用R来给微博添把火
近两年来微博这对象越来越火了,已经逐渐成了最主流的网络舆论平台。对付最近的网络热点问题各人必然是深有体会,作为统计门人,必定许多人技痒不已,但愿能进一步地探究许多工作背后的奥秘……
亏得几个主流的微博平台都提供了API,各类语言的SDK应运而生,而真正的阐明利器R的SDK一直没有,这里不卖关子了,直接宣布一个R的SDK,拜见:Rweibo中文主页。
本项目在R-Forge上开拓(https://r-forge.r-project.org/projects/rweibo/),的信息宣布在Rweibo中文主页上。今朝的版本全部基于新浪微博,究竟是此刻最火的微博,其实几个微博的API平台大同小异,和twitter的也雷同,都来自于同样的开源平台,略作窜改也能支持腾讯微博等。本文就只拿新浪微博举例。
CRAN上有一个twitteR包,之前普通权限还可以用的时候有些接口可以和新浪的API通用,新浪废掉普通权限只留OAuth之后,我就放弃了twitteR,开始开拓Rweibo(当前版本的twitteR已经可以支持OAuth,不外许多接口的细节和新浪微博照旧纷歧样)。
在这里,我先先容一下授权机制以及OAuth,这个搞定后整个微博的API就仅仅只是传一下参数挪用GET和POST要领罢了。最早的微博开放平台的授权方法是普通授权,通过HTTP的头信息来通报用户的信息,这种方法不是很安详,在非HTTPS的环境下暗码大概会被窃听,对付开拓者和利用者来说都是较量危险的。厥后新浪就直接停用了这种方法,回收今朝风行的OAuth。
OAuth看上去很玄乎,其实原理很是简朴。拿微博开放平台来说,开拓者但愿能开拓一个应用,让差异的用户利用,每个用户都有本身的微博帐号信息,他们不但愿在利用的进程中被开拓者知道,同时开拓者的这个应用的帐号暗码也不但愿被此外用户知道,否则就会被同行拿去糊弄。这样一来,就需要一种授权机制,可以或许使得开拓者和用户都信得过,就好象在淘宝买对象一样,买家和卖家都基于一个可信的第三方平台。对付新浪微博来说,两边都信任新浪,只要能确认所处的网站是真的新浪微博,就不会有问题。先是开拓者将本身的App
Key和App
Secret发送到一个请求地点,新浪微博验证无误后,返回请求的Token,其实相当于是加密过的开拓者信息,将这个信息发送到授权地点,可以完成用户的授权。用户在授权的页面可以输入本身的微博帐号,这些信息只有新浪知道,然后会返回一个验证码,用户输入这个验证码之后举办再次确认。开拓者将之前本身的Token信息以及用户的这个验证码一起发送到一个会见解点,颠末确认后,新浪微博以为两边都是可信的,并且互相也都不知道对方的信息,就会返回一个会见的Token以及暗码,这就比如是一把钥匙,开拓者只要存着这把钥匙,下次假如再对该用户做某些操纵时就不需要再征求他的同意了,除非用户主动破除这把钥匙。以上的进程就是OAuth授权的进程。
我最开始是操作Java版本的OAuth库,通过rJava实现,厥后CRAN上的ROAuth成熟之后又改用ROAuth,在twitte上利用没问题,在新浪微博上挪用POST时会有问题,并且对付中文的POST,新浪的开放平台需要编码两次,因此需要对这个包举办改写。当前版本的Rweibo已经不再依赖于ROAuth,直接利用RCurl实现整个授权进程,可是仍然警惕了大部门的ROAuth包的内容,在这里对作者暗示感激。
安装Rweibo可以拜见Rweibo中文主页,内里有具体的先容。利用时首先需要有一个微博帐号,点击“应用”,选定“微博开放平台”,在弹出页面选择“我是开拓者”,然后建设一个普通应用,填好根基信息之后在应用的详情中填上相应的内容,就可以乐成建设一个新的应用,将会获得一个App
Key和App
Secret,在Rweibo中利用registerApp函数,输入这两个信息以及该应用的名称(本身随便起个英文名字即可,不必然要与新浪应用的名字沟通),就可以在R中注册该应用的信息。
操作createOAuth函数可以建设一个OAuth工具,假如是第一次利用,将会自动举办授权。例如说我注册了一个应用叫做test,我需要授权给我的微博帐号lijiao001可能我的马甲Rweibo,那么将会在R的界面中完成一个授权的交互进程,假如我用lijianoo1的帐号来操纵,那么授权乐成后,就可以挪用种种函数读取这个帐号的信息可能用该帐号来发微博。一个简朴的操纵进程如下所示:
#p#分页标题#e#
registerApp(“GDdmIQH6jh”, “MCD8BKwGdgPHv”, app_name = “test”) # 在R中注册新的应用
roauth <- createOAuth(“test”, “lijian001”) # 建设OAuth工具
timeline.Friends(roauth, list(count = 5)) # 获取挚友及本身的前5条微博
timeline.CommentsList(roauth, list(id = 14762313082)) # 获取某条微博的评论列表
timeline.Comments(roauth, list(count = 5)) # 获取本身发送及收到的评论
timeline.Repost(roauth, list(id = 14761105585, count = 5)) # 获取某ID微博的转发环境
timeline.Mentions(roauth, list(count = 5)) # 获取@了当前用户的微博列表
timeline.User(roauth, list(screen_name = “rweibo”, count = 5)) # 获取某用户的信息
access.update(roauth, list(status = “hello world”)) # 发一条微博
search.Content(roauth, list(q = “Rweibo”)) # 按照要害词搜索微博内容
今朝版本的Rweibo实现了所有的timeline接口以及搜索、查询用户等接口,操作这些接口已经可以取到大部门可以或许用来阐明的信息了。至于其他一些操纵的接口,将会在后续的版本中实现。各人有什么发起也可以提给我,我将会在后续的版本中修改。
别的值得留意的是,我们申请的应用都是较低权限的,因为新浪今朝对接口会见权限节制得较量严,只有成为相助开拓者才气有很大的权限,而这些主要都是针对应用的需求而不是阐明的需求。普通的权限一小时只能会见150次,个中发微博的操纵只能在30次以内。对付一些操纵,每次取出的信息条目也会有限制,20条到200条不等。没步伐对某个要害词一次把所有的对象搜索出来可能将某条微博的转发信息一次抓取出来。可是这些难不倒我们,微博API是基于轮询的协议,两分钟阁下取一次足矣,对付要阐明的内容,我们完全可以配置一个任务,每隔两分钟取一下增量,时间一长就会获得我们想要的大量的数据了。
至于这些内容可以如何举办阐明,就需要各人的智慧才智了。我最近想做的一件工作就是研究一下微博的转发纪律。许多热点事件凡是城市有几条转得极热的微博,假如可以或许获得转发的纪律,就像熏染病的纪律一样,找到一些要害的节点,对付我们研究微博舆情长短常有用的。