无论是做与微博相关研究还是开发相关应用,可能需要获取历史的或者实时的数据。如何获取呢?除了新浪微博为开发者提供了API, 还可以利用搜索功能(详见此文)来收集数据。
在历史数据获取方面,与twitter相比,搜索接口比较弱,好在提供了搜索功能。
在实时数据获取方面,sina 还是比较保守。与之相关的有三个接口用public_timeline、topics、nearby_timeline,分别用来收集公共的实时微博、某个话题下的实时微博、某点周围的实时微博。由此可以看出:缺乏在某地点关于某关键词的实时搜索接口。虽然有诸多限制,但仍然有代替方案是:利用搜索功能可以进行收集一个小时前微博的,同时可以对关键字和地点进行限制,等等。下面从历史和实时数据两个方面来讲述获取微博数据。
数据收集思路
历史数据在科研方面很重要,特别是研究社交媒体方向。但是历史数据也是有要求的,首先要主题相关,然后历史也有个具体时间段。结合这两个要求的考虑,可以使用微博的高级搜索接口(详见http://s.weibo.com/)。
主要思路是:抓取网页;解析网页;存储有用信息。
值得注意的是:我们可以选择解析网页的全部信息,包括微博文和用户的部分信息,但这样获得的信息相对较少。这时可以考虑只从网页中提取出微博的id,然后通过API来返回该微博的所有信息,包括用户信息。
实时数据的主要作用可以体现在一些应用上,譬如实时监测公众对突发事件的反应。
主要思路是:实时数据的一条路径为,利用微博提供的API进行搜索。这里不表,调用API即可。另一条就是,上文提到的利用搜索功能收集一个小时前的近实时数据。
遇到的问题
- 微博API访问权限、频次问题
即每个小时对API的访问有次数限制。新浪微博API采用OAuth2进行授权,有严格的访问权限和对应的访问频次。一种走正规流程,申请appKey并获得appSecret,从而的得到相应的权限和对应的访问频次。当然还有其他方法可以避开这种限制。获取OAuth2授权的方式不止这一种(可参考http://netment.iteye.com/blog/945402)。文中提到可以通过基于用户名与密码模式,这样我们可以通过构造类似 :
grant_type=password&client_id=s6BhdRkqt3&client_secret=47HDu8s&username=johndoe&password=A3ddj3w
这样的URL请求来申请Access Token。这时还是需要一个高级权限的appKey和appSecret。很幸运的是,很多APP和客户端的官方微博appKey和appSecret在网络上都可以找到(可参见http://fengmk2.github.io/blog/appkey.html)