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