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