使用tweepy访问Twitter Stream API

来源:互联网 发布:大数据全套视频百度云 编辑:程序博客网 时间:2024/05/17 06:36

准备阶段

1、实现本机翻墙,本人使用Shadowsocks实现翻墙,用浏览器测试翻墙成功。

2、申请twitter帐号,并且注册app。详细步骤请参考以下地址:
[ Python + Tweepy 实现Twitter信息抓取-准备阶段]


访问Twitter REST API

虽然翻墙成功,但在Python IDE(如pycharm)中测试,依旧是访问失败;原因在于Shadowsocks使用的是socks5代理,并非是http代理。而tweepy使用的恰恰是http代理。

所以需要将socks5代理转换为http代理来支持tweepy访问twitter REST API,这里参考以下地址:
[ 为终端设置Shadowsocks代理]

最后不要忘记在代码里加上代理:

api = tweepy.API(auth, proxy="127.0.0.1:8123")

这时,就可以成功访问了,快来试试吧!


访问twitter Stream API

按照上述方法,可以通过REST API访问twitter数据,但是不能通过Stream API访问twitter流数据。

查看tweepy源代码的streaming.py可以发现Stream并不支持代理访问。但庆幸的是,Tweepy uses ‘requests’ package for sending request。我们可以使request实现代理呀。

所以,修改streaming.py中的源代码:(添加对应的proxies部分即可)

class Stream(object):     host = 'stream.twitter.com'     def __init__(self, auth, listener, proxies, **options): 
resp = self.session.request('POST',                              url,                              data=self.body,                              timeout=self.timeout,                              stream=True,                              auth=auth,                              verify=self.verify,                              proxies=self.proxies)
def new_session(self):    self.session = requests.Session()   self.session.headers = self.headers    self.session.params = None    self.session.proxies = self.proxies

最后修改调用代码为:

proxies = { "http": "http://127.0.0.1:8123",             "https": "http://127.0.0.1:8123",}twitter_stream = Stream(api.auth, streamListener, proxies=proxies)

这时,使用Twitter Stream API就可以成功获取twitter流数据啦!

4 0
原创粉丝点击