移動技術再加上無所不在的網絡,已經完全改變了我們生活的這個世界。如今坐在公園里就可以打理你的銀行賬戶,或者在亞馬遜書店搜索你正在閱讀的圖書的評論,或者查閱Twitter,看看世界上其他公園里的人們都在想些什么。手機只能打電話發短信的時代已經過去,它可以讓你隨時隨地訪問世界各地的數據。
雖然用手機瀏覽器可以訪問互聯網,但由于屏幕太小,而且速度受到限制,因此使用者會感覺不適。如果能夠定制應用,有針對性地從網絡上提取少部分信息,以適應手機終端的特點,就可以獲比瀏覽器得更具吸引力的替代方案。

本章我們將領略從網絡獲取信息的各類應用,首先創建一個顯示游戲排行榜的(圖表)應用,然后以Yahoo財經頻道的股票數據為例,討論如何使用TinyWebDB從網上獲取任意類型的信息(不只是圖像),最后討論如何創建屬于自己的網絡信息源,以用于App Inventor應用。
創新就是對這個世界的重組,以一種新奇的方式將舊的觀念和內容組合在一起。埃米納姆(Eminem,美國說唱歌手)的單曲Slim Shady追隨了AC/DC(最著名的澳大利亞搖滾樂隊)與Vanilla Ice(美國白人說唱歌手)的風格,并使這種混搭的音樂風行一時。這一類的“模仿”非常普遍,以至于許多藝術家,包括Girl Talk(專攻混搭及數字音樂的美國音樂家)及Negativland(來自美國加州的一個實驗音樂樂隊),都致力于將舊的內容融入某種新的風格。
無獨有偶,在網絡及移動世界中,網站及應用混合了來自各種渠道的數據及內容,而且很多網站在設計理念上遵循了互聯互通原則(interoperability)。一個典型的混搭網站的例子就是Housing Maps([http://www.housingmaps.com](http://www.housingmaps.com/)),如圖24-1,它從網站Craigslist([http://www.craigslist.org](http://www.craigslist.org/))上采集房屋租賃信息,并與谷歌地圖API結合起來,提供一種新型的信息服務。

**圖 24-1 住房地圖(Housing Maps)應用將Craigslist的房屋信息與谷歌地圖信息疊加起來**
谷歌地圖不僅僅是可供訪問的網站,同時也提供相應的應用程序接口服務(web service API),這使得“住房地圖”這類混搭應用成為可能。我們普通人只能通過瀏覽器訪問[http://maps.google.com](http://maps.google.com/)來查看地圖,但像“住房地圖”這樣的應用可以訪問谷歌地圖API來實現機器與機器之間的通信。混搭應用處理并組合來自不同站點(如Craislist及Google Maps)的數據,并將它們以一種更有意義的方式呈現出來。
現在,幾乎所有流行的網站都提供這種備選方案:機器對機器的訪問。提供數據的一方稱為網絡服務(web service),而客戶端應用與網絡服務之間的通信協議則稱為應用程序接口,或API。事實上,術語API已經成為網絡服務(web service)的代名詞。
亞馬遜網絡服務(Amazon Web Service,即AWS)是最早的網絡服務之一,由于亞馬遜公司向第三方應用開放了它的業務數據,最終導致圖書銷量的增加。同樣,當2007年Facebook發布了它的API時,也吸引了無數人的眼球。Facebook的數據不同于圖書廣告,那么為什么它甘愿讓其他應用“偷走”它的數據,同時也可能拉走它的用戶呢(還有廣告收入!)?事實上,開放把facebook從一個網站變成了一個平臺,這意味著像快樂農場這樣的第三方程序,也可以運行在這個平臺上,并利用平臺的部分功能。現在,沒有人能質疑Facebook的成功。到2009年Twitter發布時,API訪問已經是意料之中的事情,果然,Twitter也如此行事。現在,如圖24-2所示,大多數的網站都同時提供人機訪問接口。

**圖 24-2 大多數網站同時具備供人類訪問的界面及供客戶端應用訪問的API**
對于我們普通人來說,網絡就是一個可供訪問的為數眾多的網站,而對于程序員來說,它卻是一個世界上最大也最豐富的信息數據庫。在網絡世界里,機器對機器的通信量正在超過人機之間的通信量。
## **訪問生成圖像的網絡API**
提示:谷歌圖表API現已廢棄。在本例中仍可使用它,但總有一天將不可用。盡管如此,本例仍不失為解釋URL(鏈接地址)即其參數的好例子。【原作者給出的網址確已廢棄,譯者給出了新的網址,現在可用。】
正如在第13章(亞馬遜掌上書店)中所見,大多數API都會接受以URL形式發來的數據請求,并會返回數據(通常以標準格式返回數據,如XML[Extensible Markup Language,擴展的標記語言]、JSON[JavaScript Object,JavaScript對象表示法])。可以使用TinyWebDB組件與這些API進行通信,本章稍后將詳細討論這一重點話題。
不過也有些API返回的結果不是數據,而是圖像。本節將討論如何與生成圖像的API進行通信,來拓展App Inventor的用戶界面能力。
谷歌圖表API就是這樣一類服務。通過在URL地址中加入某些數據,向API發出請求,API將返回一個圖表,你的應用負責顯示這些圖表。該服務可以生成多種圖表,包括條狀圖、餅狀圖、地圖及文氏圖(Venn Diagram,用封閉曲線所包圍的面積來表示集合及其關系的圖形)。谷歌圖表API成為網絡服務(web service)互聯互通原則的一個典范,它的目的在于增強其他網站的能力。由于App Inventor沒有提供多少所謂的可視化組件,因此能夠借用谷歌圖表這樣的API,對App Inventor來說是至關重要的。
首先要理解發給API的URL地址的格式。訪問谷歌圖表API網站([https://google-developers.appspot.com/chart/interactive/docs/gallery](https://google-developers.appspot.com/chart/interactive/docs/gallery)),你將看到如圖24-3的頁面。

**圖 24-3 谷歌圖表API生成的各類圖表**
網站提供了完整的說明文檔及操作向導,可以交互式地創建圖表,并探究如何書寫URL地址。向導非常好用,可以通過表單來定義各種類型的圖標,并能自動生成你需要的URL地址,你還可以反過來用自己的數據驗證這個地址的有效性。讓我們開始吧,訪問網站,跟隨向導來創建圖表,然后仔細分析生成這些圖表的URL地址的格式。看下面的例子,在瀏覽器中輸入以下URL地址:
[http://chart.apis.google.com/chart?cht=bvg&chxt=y&chbh=a&chs=300x225&chco=A2C180&chtt=Vertical+bar+chart|(垂直條狀圖)&chd=t:10,50,60,80,40,60,30](http://chart.apis.google.com/chart?cht=bvg&chxt=y&chbh=a&chs=300x225&chco=A2C180&chtt=Vertical+bar+chart|(%E5%9E%82%E7%9B%B4%E6%9D%A1%E7%8A%B6%E5%9B%BE)&chd=t:10,50,60,80,40,60,30)
你將獲得圖24-4所示的圖表。

**圖 24-4 谷歌圖表API根據URL地址生成了這個圖表**
要想理解之前輸入的URL地址,就需要了解URL地址的作用。你會發現其中包含了問號(?)及and符號(&)。其中的?標志著第一個參數的出現,而&號將后續的各個參數分隔開。每個參數都由名稱、等號及值組成,因此在上面調用圖表API([http://chart.apis.google.com/chart](http://chart.apis.google.com/chart))的例子中,使用了七個參數,其具體內容如表24-1所示。
**表24-1 圖表API中使用的帶參數的URL地址**
| 參數 | 值 | 參數的含義 |
| --- | --- | --- |
| cht | bvg | 圖標的類型為條狀圖(bar)、垂直的(verbical)、分組的(grouped)。 |
| chxt | y | 在y軸上顯示數字 |
| chbh | a | 自動設置條的寬度及間隔 |
| chs | 300x225 | 整個圖表尺寸(像素值) |
| chco | A2C180 | 圖表中條的顏色(16進制表示法) |
| chd | t:10,50,60,80,40,60,30 |生成圖表的數據,簡單的文本格式(t) |
| chtt | Vertical+bar+chart |(%E5%9E%82%E7%9B%B4%E6%9D%A1%E7%8A%B6%E5%9B%BE) |圖表的標題,“+”代表空格,“ | ”代表換行 |
譯者提醒:表格中圖表標題一項換行符“|”后的內容與瀏覽器中輸入的“(垂直條狀圖)”不同,這是因為App Inventor對中文字符進行了編碼的緣故。從瀏覽器地址欄中復制完整地址,然后粘貼到塊編輯器的文本塊中,就會自動將中文字變成表格中的字符。如果你強行在文本塊中輸入“(垂直條狀圖)”,最終在應用測試時,手機上應該顯示中文字符的位置會顯示“?”。提醒完畢。
通過修改參數,可以生成不同的圖形。想了解更多的圖表類型,請查閱下面的API文檔:
[http://code.google.com/apis/chart/index.html](http://code.google.com/apis/chart/index.html)
### **為圖表API設置Image.Picture屬性**
在瀏覽器中輸入上述例子中的URL地址,就可以看到圖表API生成的圖表,如果想在手機上顯示該圖表,就需要將Image組件的Picture屬性設置為上述的URL。具體操作如下:
1\. 創建一個新應用,將Screen1的Title屬性設置為“圖表應用舉例”;
2\. 添加Image組件,設置其Width屬性為“Fill parent”,Height屬性為300;
3\. 將Image1.Picture屬性設置為上述URL()。在組件設計器中無法Picture屬性,因為這一屬性只接受加載的文件,因此需要在塊編輯器中進行設置,如圖24-5所示,添加Screen1.Initialize事件處理程序,并在其中設置Image1.Picture屬性。

**圖 24-5 應用啟動時,設置image組件的picture屬性為一個圖表API的URL**
在手機或模擬器中將顯示圖24-6所示的圖像。

**圖 24-6 手機應用中顯示的圖表**
### **動態生成圖表API的URL地址**
前面的例子顯示了如何在應用中生成一個圖表,不過例子中的URL使用的是固定數據(10,50,60,80,40,60,30)。通常我們需要用動態數據來生成圖表,即,數據保存在變量中。例如,在一個游戲應用中,用戶之前的成績保存在變量Scores中,我們要顯示這些成績。
要創建這樣的動態圖表,同樣需要為圖表API生成一個URL,并將變量中的數據植入其中。前面例子的URL中,用于生成圖表的數據是固定的,并用參數chd來聲明(chd代表圖表數據):
> chd=t:10,50,60,80,40,60,30
要生成動態的成績圖表,參數定義的開頭是一樣的,chd=t;之后的數據要從Scores列表中讀取,并將成績用逗號逐個連接起來。如圖24-7中顯示的最終的方案。

**圖 24-7 向圖表API發送動態生成的URL**
我們來詳細研究一下些塊暗藏機關的塊,其中大部分我們之前都使用過。
1\. 為了便于理解,我們先編造一組數據,假設之前用戶有三次游戲的成績,保存在列表變量Scores中,分別為35、85、60。
2\. 定義了變量chdPara,用來保存URL中列表數據的部分。在showChartButton.Click事件處理程序中,第一行將變量chdPara初始化為“chd=t:”。
3\. 定義了變量scoreIndex,用于在foreach循環中跟蹤當前正在處理的列表項,在Click事件處理程序中的第二行將其初始化為1;
4\. 隨后是一個判斷,看列表Scores中是否包含列表項(length of list > 0),如果包含列表項,則執行foreach循環:
* 針對Scores列表中的每一項(成績值),用參數chdPara的當前值與列表項連接;
* 然后又是一個判斷——檢查當前正在處理的列表項是否不為列表的最后一項,如果不是最后一項,則在參數chdPara后面添加一個逗號,如果是最后一項,則不添加任何字符。
* 在循環的最后一行,將變量scoreIndex的值+1,以便在下一次循環中用于判斷列表的最后一項。
5\. 循環結束后,將Image1的Picture屬性設置為最終的URL,其中第一部分為:[http://chart.apis.google.com/chart?cht=bvg&chxt=y&chbh=a&chs=300x225&chco=A2C180&chtt=Vertical+bar+chart|(%E5%9E%82%E7%9B%B4%E6%9D%A1%E7%8A%B6%E5%9B%BE)&](http://chart.apis.google.com/chart?cht=bvg&chxt=y&chbh=a&chs=300x225&chco=A2C180&chtt=Vertical+bar+chart|(%E5%9E%82%E7%9B%B4%E6%9D%A1%E7%8A%B6%E5%9B%BE)&),第二部分為變量chdPara。
6\. 這里為了跟蹤參數值,添加了一個名為chdParaLable的標簽,用于顯示最終生成的參數。
到此為止,我們生成了動態的URL,這樣的方式具有普遍的適用性,例如,假設用戶在成績列表中新增了若干項,那么這個程序也是好用的。圖24-8顯示了在手機中應用運行的結果。

**圖 24-8 應用在手機中運行的效果**
你可以在任何游戲或應用中,采用本例中的方法來顯示各種圖表,也可以與其他API進行通信,將更多地內容植入到自己的應用中,其中的關鍵是App Inventor提供了可以獲取網絡圖片的Image組件。
## **與網絡數據API通信**
提示:App Inventor現在提供了一個web組件,可以更容易地訪問API數據,雖然下述的TinyWebDB方案仍然有效,但建議查看以下鏈接中使用web組件的例子:
[http://www.appinventor.org/stockmarket-steps](http://www.appinventor.org/stockmarket-steps)
谷歌圖表API可以接受請求并返回圖片,不過更常見的是返回數據的API,在應用中可以對這些數據進行處理,并根據需要加以利用。例如,在第13章“亞馬遜掌上書店”的應用中,返回的數據是圖書的列表,其中每項數據包含了書名、最低售價以及書號(ISBN)。
使用App Inventor應用于API通信,并不需要像在圖表API的例子中那樣,要自己來創建URL,而是更像使用一個網絡數據庫(見第22章):只需要在TinyWebDB.GetValue中使用相關的標簽即可,實際上是TinyWebDB組件負責生成了訪問API的URL。
不過,TinyWebDB并不能訪問所有的API,即使是那些返回標準數據的API,如RSS。TinyWebDB只能訪問那些“披著App Inventor外衣”的網絡服務,并遵從特定的通信協議。幸運的是,已經創建了許多這樣的服務,并且還會有更多的服務隨之而來。網站[http://appinventorapi.com](http://appinventorapi.com/)上提供了一些這樣的服務。
### **探索API的網絡接口**
本節將學習使用TinyWebDB獲取股票價格信息,信息來源于一個App Inventor兼容的API,網址是[http://yahoostocks.appspot.com](http://yahoostocks.appspot.com/)。訪問該網址,將看到一個如圖23-9所示的web接口(人類可訪問的)。

**圖 24-9 App Inventor兼容的雅虎金融API的web接口**
在Tag輸入框中輸入“IBM”或其他股票的代碼,網頁上將返回股票信息列表,每一項代表一個不同的信息,后面將解釋這些數據的含義。
不過,在web頁面上查找股票信息并不是什么新鮮事,它的真實目的是為程序員提供一個機器對機器的訪問接口,從而實現與API之間的底層通信。
### **通過TinyWebDB訪問API**
創建股票查詢應用的第一步是在組件設計器中拖入一個TinyWebDB組件,該組件只有一個屬性可以設置,即ServiceURL,如圖24-10所示,它的默認值為:[http://appinvtinywebdb.appspot.com](http://appinvtinywebdb.appspot.com/),指向默認的web數據庫。而這里我們要訪問的雅虎股票API,因此將其設置為[http://yahoostocks.appspot.com](http://yahoostocks.appspot.com/),與你之前在瀏覽器地址欄中輸入的URL相同。

**圖 24-10 將ServiceURL屬性設置為[http://yahoostocks.appspot.com](http://yahoostocks.appspot.com/)**
下一步是調用TinyWebDB.GetValue,向網站請求數據。這個操作可以放在一個Button.Click事件中:當用戶在手機的應用界面中輸入股票代碼并點擊“提交”按鈕時,執行此調用;或者將其放在Screen.Initialize事件中,在應用啟動時,自動獲取某個股票的信息。無論哪種情況,都需要為GetValue設置tag——某個股票的代碼,如圖24-11所示,就像在網站[http://yahoostocks.appspot.com](http://yahoostocks.appspot.com/)上的操作一樣。

**圖 24-11 請求股票信息**
在第10章的“出題”應用中,我們已經討論過數據庫組件TinyWebDB,它的通信方式是異步的:應用中調用TinyWebDB.GetValue請求數據,之后程序將繼續運行,必須為這次請求提供另一個事件TinyWebDB.GotValue的處理程序,當請求的數據從網絡服務端返回時,來接收并處理這些數據。通過在用戶界面[http://yahoostocks.appspot.com](http://yahoostocks.appspot.com/)上的操作,我們已經知道返回的數據為列表,每個列表項代表股票的不同信息(如,第二項代表股票的收盤價)。
客戶端的應用可以利用網絡所提供的部分或全部信息,如,如果你想顯示股票的當前價格,并與開盤價進行比較,你就可以按照圖24-12的方式來組織數據。

**圖 24-12 使用GotValue時間來處理從Yahoo返回的數據**
如果從網頁[http://yahoostocks.appspot.com](http://yahoostocks.appspot.com/)上直接向API提交請求,你會看到返回列表的第2項的確是股票的當前價格,而第5想是當前價格與當天開盤價之間的差。這個例子只是簡單地從API的返回值中提取部分信息,并用兩個label顯示出來:PriceLabel與ChangeLabel,如圖24-13所示。

**圖 24-13 股票應用的運行效果**
## **創建自己的App Inventor兼容的API**
在終端應用與網絡之間,TinyWebDB起到了橋梁的作用。App Inventor程序員只需要依照GetValue內置的簡單的tag-value協議,就可以實現應用與網絡服務之間的通信。這種方式讓程序員免于親手處理那些標準格式的數據,如XML或JSON。
這種方便的代價是,用App Inventor開發的應用只能與少數網絡服務通信,這些網絡服務遵從TinyWebDB所設定的協議,協議中要求返回特殊格式的數據,因此API不得不提供對應格式的數據,如XML或JSON。如果找不到可用的與App Inventor兼容的API,那么就要靠那些有能力的程序員來創建。
從前,創建API是一件非常困難的事情,不但需要了解編程及網絡協議,還要搭建服務器來運行自己創建的服務,另外還需要建立數據庫來保存數據。但現在這件事變得容易多了,你可以借助于云計算工具,如谷歌公司的應用引擎(Google's App Engine)以及亞馬遜公司的彈性計算云(Amazon's Elastic Compute Cloud),來部署自己創建的網絡服務。這些平臺不僅可以接受委托管理你的服務,還能在不必支付費用的情況下,讓數以千計的用戶訪問你的服務。可以想象,這些平臺為創新提供了巨大的支持。
### **定制的模板代碼**
編寫API看似令人望而生畏,但令人欣慰的是你不必從零做起。利用某些現成的模板程序讓創建App Inventor兼容的API變得非常容易。這些程序由python語言編寫,并使用了谷歌應用引擎(App Engine)。模板程序提供了一段樣板代碼,可以將數據編輯成App Inventor所需要的格式,還提供了一個函數get_value,你可以按自己的需要進行修改。
下載模板程序及使用說明,并將其部署到谷歌應用引擎服務器上,網址是[http://appinventorapi.com/using-tinywebdb-to-talk-to-an-api/](http://appinventorapi.com/using-tinywebdb-to-talk-to-an-api/)。你會發現這個鏈接與第21章創建定制數據庫時使用的網址都指向了相同的appinventorapi.com。實際上創建API類似與創建定制數據庫,只是不必保存及提取數據,而是通過調用其他服務來獲取所需要的數據。
為了創建自己的API,要先下載模板程序,并對幾個關鍵代碼做出修改,再上傳到谷歌應用引擎。創建一個用TinyWebDB可以訪問的API只是幾分鐘的事情。
以下是從模板程序中選出的一段代碼,需要對其進行修改(不必理會那些“#”號后面的文字,它們就像App Inventor中的注釋一樣,用來說明接下來的代碼的功能):
~~~
def get_value(self, tag):
#在這個簡單的例子中,僅返回hello:tag,其中的tag來自于客戶端應用
value="hello:"+tag
value = "\""+value+"\""
# 如果value由多個單詞組成,為其添加引號
if self.request.get('fmt') == "html":
WriteToWeb(self,tag,value )
else:
WriteToPhone(self,tag,value)
~~~
這段代碼屬于一個名為get_value的函數(與App Inventor中的procedure相同),當你使用TinyWebDB.GetValue函數調用某個API時,需要調用這個函數。tag是函數的參數,并于GetValue中發送的tag相對應。
黑體字的代碼是需要修改的部分。默認情況下,該函數從發來的請求中提取tag,并返回“hello:tag”。(也就是說,如果在調用該函數時使用的tag為“joe”,那么函數將返回“hello:joe”)。通過設定變量value的值就可以實現這一點,隨后value值將傳遞給另一個函數:如果請求來自于web,則傳給函數WriteToWeb,如果請求來自手機,則傳給WriteToPhone。
>  提示:即使你從未見過Python或其他程序的代碼,根據使用App Inventor的經驗,你也可以讀懂上面的代碼。其中第一行“def get_value”是對過程的定義,“vlue=...”行是為變量value賦值,“if...”后面的代碼看起來很熟悉。是的,與App Inventor相比,它們的基本概念是相同的,只是用文字取代了塊。
為了定制這段代碼,需要將粗體字替換成你需要的某種計算,目的是為了給變量value賦值。通常你的API需要調用其他的API(被稱為“封裝”調用,更具體地說,就是get_value函數將調用其他的API)。
許多API過于復雜,擁有幾百個函數以及復雜的用戶認證方案。而另一些則相當簡單,你可以找到一些例程,并在網絡上訪問它們,如下節所述。
### **封裝雅虎金融API**
本章所使用的App Inventor專用雅虎股票API就是通過對上述模板程序的修改而獲得,該模板程序可以從網上搜索到。為了將雅虎股票API封裝成App Inventor可以調用的API,開發者(Wolber教授)在網站[http://www.gummy-stuff.org/Yahoo-data.htm](http://www.gummy-stuff.org/Yahoo-data.htm)【網站地址已經不存在了——譯者注】上搜索"Python Yahoo Stocks API",并發現了如下格式的URL:
> http://download.finance.yahoo.com/d/quotes.csv?f=sl1d1t1c1ohgv&e=.cs v&s=IBM
上述URL將一個文本本件“quotes.csv”下載到本地計算機,文件中包含了如下格式的字符串:
> "IBM",183.76,"5/29/2014","4:02pm",+0.68,183.68,183.78,182.33,2759978
之后Wolber教授又在網站[http://www.goldb.org/ystockquote.html](http://www.goldb.org/ystockquote.html)【該網站可訪問,但代碼已經更新,找不到本書中采用的代碼了。——譯者注】上發現了可以訪問雅虎股票API的Python代碼。通過幾次快速的剪切粘貼及編輯,為App Inventor封裝的API就創建出來了,具體修改方式如下:
~~~
def get_value(self, tag):
# Need to generate a string or list and send it to WriteToPhone/ WriteToWeb
# Multi-word strings should have quotes in front and back
# e.g.,
# value = "\""+value+"\""
# call the Yahoo Finance API and get a handle to the file that is returned
quoteFile=urllib.urlopen("http://download.finance.yahoo.com/d/quotes.csv?f=sl1d1t1c1ohgv&e=.csv&s="+tag)
line = quoteFile.readline() # there's only one line
splitlist = line.split(",") # split the data into a list
# the data has quotes around the items, so eliminate them
i=0
while i<len(splitlist):
item=splitlist[i]
splitlist[i]=item.strip('"') # remove " around strings
i=i+1
value=splitlist
if self.request.get('fmt') == "html":
WriteToWeb(self,tag,value )
else:
WriteToPhone(self,tag,value)
~~~
那行粗體的代碼通過對urllib.urlopen函數的調用來訪問雅虎API(這是Python語言訪問API的方法之一)。在URL中有一個參數f,它表明你想獲得的股票數據的類型(這個參數有點像谷歌圖表API中的神秘參數)。數據保存在變量line中,其余的代碼將返回值分解為列表,移除每個列表項中的引號,并將結果發給請求者(電腦上的web頁面或手機上的App Inventor應用)。
## **小結**
大多數網站以及許多移動應用并非孤島,它們遵從互聯互通原則,利用其它網站的功能來實現自己的目標。在App Inventor中,可以創建獨立的應用,如游戲、測驗等,但這還遠遠不夠,你遲早會遇到訪問web的問題。是否可以為我平時等車的公交車站寫一個應用,來預計下一班車何時到達呢?是否可以讓應用給我facebook中的部分好友發送短信呢?再有,應用是否能夠發tweet呢?App Inventor中有兩種方式可以連接到網絡:①將Image.Picture屬性設置為某個返回圖像的URL;②使用TinyWebDB從某些專用的API上獲取數據。
App Inventor不支持對任意API的訪問,程序員需要創建遵從特定協議的“封裝”API來實現對web的訪問。一旦有了封裝的API,App Inventor程序員就可以像訪問數據庫一樣,使用TinyWebDB.GetValue來訪問需要的API。實際上,相對于編寫App Inventor應用來說,編寫API對程序員來說是一個更大的挑戰,但如果你有興趣學習,可以查閱一些Python的書籍及課程(O'Reilly出版社有若干這類的書),然后就可以開練了。
- 簡介
- 序言
- 前言
- 第 1 章 Hello 貓咪
- 第 2 章 油漆桶
- 第 3 章 打地鼠
- 第 4 章 開車不發短信
- 第 5 章 瓢蟲快跑
- 第 6 章 巴黎地圖旅游
- 第 7 章 安卓,我的車在哪?
- 第 8 章 總統測驗
- 第 9 章 木琴
- 第 10 章 出題及答題
- 第 11 章 廣播中心
- 第 12 章 遙控機器人
- 第 13 章 亞馬遜掌上書店
- 第 14 章 理解應用的結構
- 第 15 章 軟件工程與應用調試
- 第 16 章 應用中的存儲
- 第 17 章 創建動畫應用
- 第 18 章 程序中的決策:條件塊
- 第 19 章 數據列表編程
- 第 20 章 循環
- 第 21 章 定義過程
- 第 22 章 數據庫
- 第 23 章 傳感器
- 第 24 章 與Web API通信