一、導(dǎo)言
我們都知道API就是接口,通過這個(gè)接口,我們可以在不知道具體實(shí)現(xiàn)過程的情況下獲得數(shù)據(jù)。
實(shí)際上,調(diào)用API獲取你想要的拼多多商品數(shù)據(jù),可簡(jiǎn)單描述為【發(fā)送請(qǐng)求→判斷服務(wù)器響應(yīng)狀態(tài)→獲取數(shù)據(jù)】3個(gè)步驟。這是一個(gè)主要的思路,Java和Python的API調(diào)用也是類似的思路。下面,我們以這三步為發(fā)散點(diǎn)詳細(xì)為大家介紹“如何調(diào)用API獲取數(shù)據(jù)”。
二、實(shí)現(xiàn)過程
(一)發(fā)送請(qǐng)求
首先,您需要確定您感興趣的數(shù)據(jù)是否可以通過API獲得。最簡(jiǎn)單的方法是通過谷歌搜索,但您也可以在Web服務(wù)的主頁上查找“API”或“開發(fā)人員”鏈接。
【示例】The New York Times Best Sellers API(紐約時(shí)報(bào)暢銷書API):http://developer.nytimes.com/docs/best_sellers_api/
【注解】如何找數(shù)據(jù)的API接口:首先要明確自己要什么樣的數(shù)據(jù),根據(jù)自己需求找相應(yīng)的API接口或相應(yīng)的數(shù)據(jù)網(wǎng)站。比如爬取微博數(shù)據(jù),需要找到能夠返回微博數(shù)據(jù)的API,則要去微博官方網(wǎng)站或者提供相應(yīng)接口的一些商家網(wǎng)站等。
通常您會(huì)找到一組文檔,這是API的說明手冊(cè),它會(huì)告訴你所有的控件都做了什么,主要描述的是可用于獲得數(shù)據(jù)的URL列表。查看API文檔,找出是否有一個(gè)URL用于檢索你想查找的數(shù)據(jù)類型。
但要獲得相應(yīng)的數(shù)據(jù)是需要通過請(qǐng)求的。在網(wǎng)頁里面主要通過http請(qǐng)求。對(duì)于每個(gè)URL,您通常會(huì)找到一個(gè)頁面或一個(gè)小節(jié),它會(huì)更詳細(xì)的解釋如何使用。通常這包含兩個(gè)內(nèi)容:參數(shù)和響應(yīng)。
【示例】
如下圖所示:
【注解】
API文檔:是調(diào)用URL時(shí)參數(shù)的說明和返回狀態(tài)碼說明等。是一種操作API的規(guī)范。
如何查看API文檔:一般來說,提供API的地方就有提供相應(yīng)的說明或文檔。
URL:統(tǒng)一資源定位符,是互聯(lián)網(wǎng)上標(biāo)準(zhǔn)資源的地址。互聯(lián)網(wǎng)上的每個(gè)資源都有一個(gè)唯一的URL,URL包含的信息指出資源的位置及服務(wù)器應(yīng)該怎么處理這種資源。通過解析URL,服務(wù)器端就可以返回相應(yīng)的數(shù)據(jù)。
對(duì)于任何給定的URL,通常有許多可選參數(shù)可以進(jìn)一步細(xì)化您正在做的事情。簡(jiǎn)單來說就像定語部分,對(duì)URL進(jìn)行限定。它指定了如下內(nèi)容:你想同時(shí)返回多少結(jié)果?你想如何排序結(jié)果?你想搜索哪個(gè)日期范圍?你想搜索什么位置?你想要么格式的結(jié)果?
【示例】
https://api.twitter.com/1.1/search/tweets.json?q=burritos&lang=en&count=100
【注解】
參數(shù)q是一個(gè)必需的參數(shù)。如果您沒有提供(參數(shù)q),API將不會(huì)接受您的請(qǐng)求,因?yàn)槟谒阉鲿r(shí)沒有告訴它要搜索什么。(比如,你要在淘寶上搜索女性的衣服,卻只輸入了“衣服”這一參數(shù),那么便不能搜到“女性衣服”)。如果您只需要英文的返回結(jié)果,則需要添加一個(gè)lang參數(shù),并設(shè)置lang=en。一般搜索的默認(rèn)結(jié)果數(shù)為15.如果您希望一次超過15個(gè),則必須指定count=100。
(二)判斷服務(wù)器相應(yīng)狀態(tài)
將URL(包括參數(shù))放在在服務(wù)器中搜索,等待服務(wù)器響應(yīng)。
【注解】
請(qǐng)求URL,獲取服務(wù)器的返回結(jié)果:請(qǐng)求的方式為http(一般通過程序封裝的request來完成)。
在網(wǎng)絡(luò)中獲取數(shù)據(jù),最常見的有三種方式:第一種,就是TCP/IP協(xié)議。第二種就是通過HTTP請(qǐng)求,HTTP請(qǐng)求有兩種方式,就是GET與POST。這兩種方式一般都封裝在request里面。第三種就是FTP,F(xiàn)TP就是文件傳輸協(xié)議。它跟我們平時(shí)看的遠(yuǎn)程桌面、文件管理系統(tǒng)之類的遠(yuǎn)程文件管理系統(tǒng)類似。
而響應(yīng)一般出現(xiàn)兩種情況:①成功:返回你所想要的數(shù)據(jù)(這意味著你調(diào)用API獲取數(shù)據(jù)成功);②失?。航忉屇愕恼?qǐng)求為什么失?。ㄊ≡蚩赡苡校耗銢]有提供一個(gè)必須的參數(shù)、你超過了請(qǐng)求的速率限制、你需要提供身份驗(yàn)證(API密鑰)來發(fā)出特定的請(qǐng)求、你沒有聯(lián)網(wǎng)、請(qǐng)求超時(shí)等等)。
【示例】
如果你沒有API密鑰,在Rotten Tomatoes API上請(qǐng)求“skyfall”數(shù)據(jù):http://api.rottentomatoes.com/api/public/v1.0/movies.json?q=Skyfall;
你可能獲得失敗的響應(yīng):{"error":"Account Inactive"}
你需要提供API密鑰才能成功:http://api.rottentomatoes.com/api/public/v1.0/movies.json?q=Skyfall&apikey=krw98sa2。
【注解】
API密匙:一種認(rèn)證使用者身份的特殊參數(shù)。調(diào)用API,大多數(shù)都需要某種認(rèn)證,通常采用API密鑰的形式(一串長(zhǎng)長(zhǎng)的字母和數(shù)字,其功能類似于密碼)來實(shí)現(xiàn)認(rèn)證。這個(gè)過程通常很快,即使需要API密鑰,大量的API仍然是免費(fèi)的。舉個(gè)例子,你要進(jìn)入知乎軟件問問題,知乎系統(tǒng)要求你設(shè)置昵稱和密碼等進(jìn)行身份認(rèn)證,這些昵稱和密碼便是一種API密匙。
速率限制:許多API都會(huì)限制您每小時(shí)或每天可以發(fā)出多少次請(qǐng)求,以防止服務(wù)器超載。另外,很多API都是免費(fèi)的,如果您超過一定的速率限制,可能會(huì)涉及到收費(fèi)(具體參閱特定的API文檔)。
(三)獲取數(shù)據(jù)
返回的結(jié)果常常用JSON和XML方式呈現(xiàn)。一般我們更常用的是JASON數(shù)據(jù),JASON數(shù)據(jù)返回的是一串字符串,通過字符串的一些處理,就能夠得到我們想要的結(jié)果。
【注解】
JSON和XML:都是傳遞數(shù)據(jù)的方式。JSON(JavaScript Object Notation)一種輕量級(jí)的數(shù)據(jù)交換格式,具有良好的可讀和便于快速編寫的特性,可在不同平臺(tái)之間進(jìn)行數(shù)據(jù)交換。JSON采用兼容性很高的、完全獨(dú)立于語言文本格式,同時(shí)也具備類似于C語言的習(xí)慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)體系的行為。這些特性使JSON成為理想的數(shù)據(jù)交換語言。XML是標(biāo)準(zhǔn)通用標(biāo)記語言 (SGML)的子集,非常適合 Web傳輸。XML提供統(tǒng)一的方法來描述和交換獨(dú)立于應(yīng)用程序或供應(yīng)商的結(jié)構(gòu)化數(shù)據(jù)。
三、對(duì)于非程序員來說的API工作示例
1.知道你想要從某服務(wù)器獲取什么樣的數(shù)據(jù),并確定該服務(wù)器是否有你想要數(shù)據(jù)的API?
2.查看API文檔,找出是否有一個(gè)URL用于檢索你想查找的數(shù)據(jù)類型。
3.如果服務(wù)器需要,請(qǐng)注冊(cè)API密匙。
4.找出你需要包含在URL中的參數(shù),以便于獲得你想的確切數(shù)據(jù)。
5.將URL(包括參數(shù))放在在服務(wù)器中搜索,等待服務(wù)器響應(yīng)。返回的結(jié)果常常用JSON和XML方式呈現(xiàn)。如果不起作用,請(qǐng)返回到第4步。
6.獲得數(shù)據(jù)。有關(guān)更多信息,請(qǐng)閱讀XML和JSON。
四、一些流行的免費(fèi)Web API
API搜索引擎(Search the Largest API Directory on the Web):
https://www.programmableweb.com/category/all/apis?data_format=21190
New York Times:
http://developer.nytimes.com/docs/
Yelp:
http://www.yelp.com/developers/documentation/
Twitter:
https://dev.twitter.com/docs/api/
Flickr:
http://www.flickr.com/services/api/
Foursquare:
https://developer.foursquare.com/
Instagram:
http://developer.linkedin.com/apis/
LinkedIn:
http://instagram.com/developer/
Vimeo:
http://developer.vimeo.com/
Tumblr:
http://www.tumblr.com/docs/en/api/v2/
Google Books:
https://developers.google.com/books/
Facebook:
https://developers.facebook.com/docs/reference/api/
Google+:
https://developers.google.com/+/api/
YouTube:
https://developers.google.com/youtube/
Rotten Tomatoes:
http://developer.rottentomatoes.com/