01-获取 Twitter User Profile 的三条路径 | 07.杂项

简介:

01-如何获取 Twitter User Profile

郑昀 201005 隶属于《07.杂项》小节

主要通过三种方式。当然,算上各种公开的 twitter 第三方Proxy API ,会更多。

由于每一种方式都有请求频率限制,所以建议最终程序混合这三种方法,要么随机选择其一,要么按优先级逐次访问,如果访问不通,立刻切换到下一种。

 

1.YQL 方式

YQL 和 Yahoo! Pipe 都是最优秀的 mashup 工具之一,身为 Geek 至少要熟悉 Yahoo! Pipe 。

1.0.背景

雅虎发布的YQL,背后的机理是每个人都可以将他的数据以一种特殊的方式供其他人使用,谁想要读取这些数据,只需要使用一种类似SQL语法的语言即可。

它是一个具有基于REST接口,可以让开发者从各类资源中查询数据的在线查询处理器。

它是一个严格的查询处理托管服务。这也意味着YQL不受单独的数据资源限制,甚至不限制应用于雅虎的自身产品。YQL可以操作任何第三方数据源,只要对方是一种常见的格式,如RSS, ATOM, JSON, XML,等等。

以上文字参见互动百科

1.1.Twitter API 都可适用于 YQL

上面说了,只要对方是一种常见的数据格式,如JSON、RSS,都可以被 YQL 作为数据源。所以,我们访问 Twitter 受访问频率限制时,可以走这条路。

1.2.YQL 的 Python 封装库

Python yql 库主页地址:http://python-yql.org/

安装简单:easy_install yql 。使用也非常简单:


>>> import yql
>>> y = yql.Public()
>>> query = 'select * from flickr.photos.search where text="panda" limit 3';
>>> result = y.execute(query)
>>> result.rows
 


但要小心,yql 库实际上是组装了一个查询YQL的 HTTP URL ,用自定义或外部传入的 httplib2 实例发起请求,那么它势必受到网络环境的影响,比如 GFW 的干扰。

1.3.请求限制


YQL 在 Usage Information and Limits 中说:


  • Per application limit (identified by your Access Key): 100,000 calls per day.
  • Per IP limits: /v1/public/*: 1,000 calls per hour; /v1/yql/*: 10,000 calls per hour.
  • All rates are subject to change.
  • YQL rate limits are subject to the rate limits of other Yahoo! and 3rd-party Web services.

1.4.YQL 的 Console 网页测试

进入 http://developer.yahoo.com/yql/console/ 页面,

在 Your YQL Statement 输入框中输入如下 SQL 命令:

select * from json where url='http://api.twitter.com/1/users/show/fenng.json'

然后点击“TEST”按钮,稍后,FORMATTED VIEW就会以 XML 方式显示出 Twitter 用户 fenng 的 profile 了。

 

SQL 命令

select * from json where url="http://search.twitter.com/search.json?q=rt&rpp=20&lang=zh" 
可透过 Twitter Search 接口得到最新的 RT 消息。

 

SQL 命令

select * from json where url='https://twitter.com/statuses/user_timeline/fenng.json'

可以得到 fenng 最近发布的若干条 Tweets 。

 

1.5.Python YQL 的调用方式

对于其他数据源的请求,比如 flickr ,在我们的网络环境下,yql 库都不会有什么问题。但对于 Twitter 数据源,貌似就容易被重置链接(但浏览器访问 YQL Console 做查询却没事儿。所以也许是User-Agent的事儿。),于是乎我们就要设置一个代理穿墙。而代理选择 Puff 貌似容易得到 401 HTTP状态,所以选择 Mr.Zhang 了。

代码如下:

import yql 
import httplib2 
import socks 
h = httplib2.Http(proxy_info = httplib2.ProxyInfo(socks.PROXY_TYPE_HTTP, 'localhost', 2010)) 
y=yql.Public(httplib2_inst=h) 
results=y.execute("select * from json where url='http://api.twitter.com/1/users/show/fenng.json'")
print results.rows 
print results.uri

(注:socks 库需要安装,主页地址:http://socksipy.sourceforge.net/ ,它没有安装程序,下载源代码包把 socks.py 复制到 Python's lib/site-packages directory 即可。httplib2 则用 easy_install httplib2 安装即可。)

你也可以把 YQL 认为是一个代理,能把任意数据格式转换为指定格式的代理。

2.SocialGraph 方式

Google Social Graph 的 lookup 方法可以获取一个 twitter 用户的关联信息。

我们可以通过组装这样的 URL :

http://socialgraph.apis.google.com/lookup?q=twitter.com%2Fzhengyun&pretty=1

来得到 zhengyun 的 twitter profile ,结果如下所示:


{
 "canonical_mapping": {
  "twitter.com/zhengyun": "http://twitter.com/zhengyun"
 },
 "nodes": {
  "http://twitter.com/zhengyun": {
   "attributes": {
    "fn": "zhengyun",
    "adr": "\u5317\u4eac",
    "photo": "http://a1.twimg.com/profile_images/27832922/zhengyun_ustc_bigger.jpg",
    "exists": "1",
    "rss": "http://twitter.com/statuses/user_timeline/zhengyun.rss",
    "atom": "http://twitter.com/statuses/user_timeline/zhengyun.atom",
    "url": "http://twitter.com/zhengyun",
    "profile": "http://twitter.com/zhengyun"
   }
  }
 }
}


当然,这没有人家 Twitter 自己的API给的数据全,但也算是能得到用户的 Location(就是 adr 字段)和 头像(photo字段)等最基本字段了。

2.1.请求限制

Google 文档写道:『Use of the Social Graph API is subject to a query limit of 50,000 queries per user per day. If you go over this 24-hour limit, the Social Graph API may stop working for you temporarily.If you continue to exceed this limit, your access to the Social Graph API may be blocked』,看来需要知道检测到“stop working for you temporarily”时触发哪种异常,这样才能避免被block。 

3.Twitter 方式

最后可以直接访问 Twitter 的 user/show 方法: 
http://api.twitter.com/1/users/show.xml?id=noradio 
,而不需要请求 statuses/user_timeline 方法。 
举例: 
http://api.twitter.com/1/users/show.json?id=zhengyun

 

3.1.请求限制

如果我们的出口IP在 twitter 的白名单上,那么访问限制是:20,000 requests per hour。否则是每小时150~350次。

 

附录A:

Python YQL 库对查询命令

select * from json where url="http://api.twitter.com/1/users/show/fenng.json"

实际是组装了一个 HTTP 请求:

http://query.yahooapis.com/v1/yql?q=select%20*%20from%20json%20where%0A%20url%3D%22http%3A%2F%2Fapi.twitter.com%2F1%2Fusers%2Fshow%2Ffenng.json%22&diagnostics=true

目录
相关文章
|
4月前
|
开发工具
百度搜索:蓝易云【使用vim编辑器,进行保存时报错:E382: Cannot write, ‘buftype‘ option is set详解。】
请注意,'buftype'选项的设置通常是由于某些插件或配置文件导致的。如果您在Vim的配置文件(如.vimrc)或使用的插件中设置了'buftype'选项,请检查相关配置并确保设置正确。
36 0
|
Windows
powershell配置anaconda及解决【无法加载文件C:\Users\xxx\Documents\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本】的问题
powershell配置anaconda及解决【无法加载文件C:\Users\xxx\Documents\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本】的问题
1515 0
|
9月前
|
Shell 开发工具
写一个批量删除上一题的10个用户的脚本udel.sh。删除之前显示用户的ID信息,要删除用户的家目录
写一个批量删除上一题的10个用户的脚本udel.sh。删除之前显示用户的ID信息,要删除用户的家目录。
36 1
|
10月前
|
Ubuntu Linux Shell
【Linux问题合集003】解决无法创建新用户丨在home目录下看不见用户文件夹丨创建的用户设置密码时报错,当前用户不在 sudoers 列表中丨Ubunt不显示用户名,只显示“$“符号问题
【Linux问题合集003】解决无法创建新用户丨在home目录下看不见用户文件夹丨创建的用户设置密码时报错,当前用户不在 sudoers 列表中丨Ubunt不显示用户名,只显示“$“符号问题
3238 0
|
10月前
移除MagenTo自动发送邮件中网址的多余部分?___store=id
移除MagenTo自动发送邮件中网址的多余部分?___store=id
thinkphp3.2 home为默认模块,怎么在URL里面隐藏掉home
thinkphp3.2 home为默认模块,怎么在URL里面隐藏掉home
163 0
|
Shell iOS开发 MacOS
iTerm2重启后别名alias配置无效问题的原因分析与解决
本文记录了在安装python环境中,配置alias别名时遇到的配置的alias别名没有成功生效的问题。根据问题,分析了导致alias配置的别名没有成功生效的原因以及具体解决办法。通过这样的问题记录,为以后避免再次遇到同样的问题,比如这样的配置未生效的问题,可以快速地对问题进行定位并解决。
292 0
iTerm2重启后别名alias配置无效问题的原因分析与解决
|
数据库 数据库连接
Entity Framework Core必须牢记的三条引用三条命令
关于EntityFramework Core有三个重要的引用和三条重要的命令,掌握以这六条,基本用Entity Framework Core就得心应手了。 引用1:Install-PackageMicrosoft.EntityFrameworkCore.SqlServer 这是SqlServer的Entity FrameworkCore的“驱动程序”。
1139 0