一、导言
上期我们已经知道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/?