twitter提供了API接口,第三方可以通过接口调用,对twitter进行扩展。
先说下我理解的API:
主要实现两种功能:1.中转站,接收用户信息并通过Twitter API调用获取到结果,再返回给用户
2.拓展栈,基于twitter的用户群,开发一些twitter还没有的小功能。
应用情景:Twitter在某些地区被屏蔽,个人的创新起步可基于此。
Twitter API版本:
1.No Auth
用户无需授权就可使用的接口
2.Basic Auth
在twitter未支持OAuth之前,使用的是Basic Auth认证。要求API中输入账号和密码,通过HTTP或HTTPS协议发给twitter API。这样第三方就会知道用户的账号和密码而随意操作用户账号,这带来了潜在的安全威胁。
3.Oauth
OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版,他解决了第三方应用的授权问题。基本原理如下:
以下部分转自http://www.cnblogs.com/JoannaQ/p/3172561.html
在认证和授权的过程中涉及的三方包括:
- 服务提供方,用户使用服务提供方来存储受保护的资源,如照片,视频,联系人列表(如twitter角色)。
- 用户 ,存放在服务提供方的受保护的资源的拥有者。
- Consumer ,要访问服务提供方资源的第三方应用(中间商,类似上面的 twitterfeed 角色)。在认证过程之前,客户端要向服务提供者申请客户端标识。
使用OAuth进行认证和授权的过程如下所示:
- 用户访问客户端的网站,想操作自己存放在服务提供方的资源。
- 客户端向服务提供方请求一个临时令牌。
- 服务提供方验证客户端的身份后,授予一个临时令牌。
- 客户端获得临时令牌后,将用户引导至服务提供方的授权页面请求用户授权。在这个过程中将临时令牌和客户端的回调连接发送给服务提供方。
- 用户在服务提供方的网页上输入用户名和密码,然后授权该客户端访问所请求的资源。
- 授权成功后,服务提供方引导用户返回客户端的网页。
- 客户端根据临时令牌从服务提供方那里获取访问令牌 。
- 服务提供方根据临时令牌和用户的授权情况授予客户端访问令牌。
- 客户端使用获取的访问令牌访问存放在服务提供方上的受保护的资源。
一,Consumer 向 服务提供商 申请接入权限
可得到:Consumer Key,Consumer Secret。twitter申请oauth的话,在 setting - connection - developer 里面申请。 同时给出三个访问网址:
- request_token_url = 'http://twitter.com/oauth/request_token'
- access_token_url = 'http://twitter.com/oauth/access_token'
- authorize_url = 'http://twitter.com/oauth/authorize'
二,当Consumer接到用户请求想要访问第三方资源(如twitter)的时候
Consumer需要先取得 请求另牌(Request Token)。网址为上面的 request_token_url,参数为:
- oauth_consumer_key:Consumer Key
- oauth_signature_method:签名加密方法
- oauth_signature:加密的签名 (这个下面细说)
- oauth_timestamp:UNIX时间戳
- oauth_nonce:一个随机的混淆字符串,随机生成一个。
- oauth_version:OAuth版本,可选,如果设置的话,一定设置为 1.0
- oauth_callback:返回网址链接。
- 及其它服务提供商定义的参数
这样 Consumer就取得了 请求另牌(包括另牌名 oauth_token,另牌密钥 oauth_token_secret。
三,浏览器自动转向服务提供商的网站:
网址为authorize_url?oauth_token=请求另牌名
四,用户同意 Consumer访问 服务提供商资源
那么会自动转回上面的 oauth_callback 里定义的网址。同时加上 oauth_token (就是请求另牌),及oauth_verifier(验证码)。
五,现在总可以开始请求资源了吧?
NO。现在还需要再向 服务提供商 请求 访问另牌(Access Token)。网址为上面的access_token_url,参数为:
- oauth_consumer_key:Consumer Key
- oauth_token:上面取得的 请求另牌的名
- oauth_signature_method:签名加密方法
- oauth_signature:加密的签名 (这个下面细说)
- oauth_timestamp:UNIX时间戳
- oauth_nonce:一个随机的混淆字符串,随机生成一个。
- oauth_version:OAuth版本,可选,如果设置的话,一定设置为 1.0
- oauth_verifier:上面返回的验证码。
- 请求 访问另牌的时候,不能加其它参数。
这样就可以取得 访问另牌(包括Access Token 及 Access Token Secret)。这个就是需要保存在 Consumer上面的信息(没有你的真实用户名,密码,安全吧!)
六,取得 访问另牌 后
Consumer就可以作为用户的身份访问 服务提供商上被保护的资源了。提交的参数如下:
- oauth_consumer_key:Consumer Key
- oauth_token:访问另牌
- oauth_signature_method:签名加密方法
- oauth_signature:加密的签名 (这个下面细说)
- oauth_timestamp:UNIX时间戳
- oauth_nonce:一个随机的混淆字符串,随机生成一个。
- oauth_version:OAuth版本,可选,如果设置的话,一定设置为 1.0
- 及其它服务提供商定义的参数
OAuth2.0
OAuth2.0和OAuth1.0的区别还是在于简化了认证过程,不需要从未授权的Request Token转化到授权Request Token,而是利用app key通过用户授权生成access token但是,与1.0的不同之处是access token有自身的有效期,且不同平台、不同级别的程序有着不同的有效期,在程序开发中一定记得判断access token是否过期,对于过期之后的处理方法主要是利用access token和refresh token重新生成access token或者重新利用app key向服务器发送请求生成access token。由于这个问题,与OAuth1.0基本一致不一样,各个平台OAuth2.0做了不一样的选择。
第三方应用向用户发送认证请求,请求通过可获取到用户在twitter上的相关信息,并利用这个信息得到twitter认证,通过之后返回一个access_token,通过该token发送该用户的请求信息给twitter,twitter确认access_token无误后查找该用户的信息,并返回给第三方应用。
要使用OAuth,首先要去Twitter中注册一个自己的Twitter应用,注册地址:http://dev.twitter.com/apps/new 。注册之后,会得到自己Twitter应用的Consumer key和Consumer secret,都是一个字符串。
代码实现主要用到python-twitter库,可直接pip安装,https://github.com/bear/python-twitter
#第一步,测试网络是否ok,VPN用全局模式,在浏览器中可以打开Google后,再继续下边步骤
import urllib
urllib.urlopen('http://www.google.com')#看是否返回一个socket
import twitter
ACCESS_TOKEN = 'yourAccess_token'
ACCESS_SECRET = 'yourAccess_secret'
CONSUMER_KEY = 'yourConsumer_key'
CONSUMER_SECRET = 'yourConsumer_secret'
api=twitter.Api(consumer_key=CONSUMER_KEY,consumer_secret=CONSUMER_SECRET,access
_token_key=ACCESS_TOKEN,access_token_secret=ACCESS_SECRET)
usr=api.GetUser(screen_name='roof_topper')
usr.name #输出:u'roof topper'
当我们已知大量用户的screen_name或id时,就可用这种方法获取name啦
参考链接:
http://www.cnblogs.com/JoannaQ/p/3172561.html
https://github.com/bear/python-twitter