Streaming With Tweepy
Tweepy是的处理twitter流api的授权,连接,创建/删除会话,读取信息以及处理路由信息(?partially routing messagaes)都变得更轻松。
此教程旨在帮助你踏出用Tweepy使用Twitter流的第一步。Tweepy流的某些特征没有包括在此教程内,请查看Tweepy的相关源码streaming.py来获取更多信息。
Twitter流也要求使用API授权。查看Authentication教程来获取相关信息。
摘要
Twitter流API用于实时下载twitter消息,这在获取大流量的tweet信息,或者创建需要实时数据的网站流时会非常有用。请查看Twitter Streaming API Documentation
流API和REST API非常不同,因为REST API主要用于从twitter上下载数据,而流API则用于将消息发送到持久会话中。这就需要流API能比REST API更好地实时下载数据。在
Tweepy中,一个 tweepy.Stream 实例建立一个流会话并把消息发送给 StreamListener 实例。 stream listener的 on_data 方法可以获得所有信息并根据信息类型来调用函数。默认的SteramListener可以对普通的twitter消息进行分类并把它们发送给适当的方法,但是这些方法只是 stub (What's this?)。
因此,使用流API有以下三个步骤
1. 创建一个继承自StreamListener的类
2. 用这个类声明一个 Stream 对象。
3. 用这个 Stream 对象来连接 Twitter API
步骤1:创建 StreamListener
下面这个简单的 stream listener 会打印其状态。StreamListener 的 on_data 方法会很方便地把数据传递给 on_status 方法。下面就是如何创建继承自 StreamListener 类的 MyStreamListener 类以及如何重写 on_status。
import tweepy
#override tweepy.StreamListener to add logic to on_status
class MyStreamListener(tweepy.StreamListener):
def on_status(self, status):
print(status.text)
步骤2:创建一个流(Stream)
这个流需要API。查看 Authentication Tutorial学习如何获得api对象。一旦我们已经有了一个api对象和 status listener,我们就能创建自己的流对象。
myStreamListener = MyStreamListener()
myStream = tweepy.Stream(auth = api.auth, listener=myStreamListener())
步骤3:开始一个流
异步流 (Async Streaming)
除非连接结束,否则流不会中断,blocking the tread。Tweepy给filter提供了一个简便的异步参数 async 然后流可以持续执行新的线程。举例:
myStream.filter(track=['python'], async=True)
处理错误
使用Twitter的流API时,你必须小心rate limit。如果客户端在时间窗中尝试连接到流API的次数超过了限制次数,那它会受到420错误。每次收到错误后客户端需要等待的时间随着错误尝试的次数呈指数型上升。
Tweepy的 Stream Listener 可以有效地把错误信息发送到 on_error stub。我们可以用 on_error 去获取420错误并取消流的连接。
class MyStreamListener(tweepy.StreamListener):
def on_error(self, status_code):
if status_code == 420:
#returning False in on_data disconnects the stream
return False
要获取更多有关twitter api错误码的信息请看 Twitter Response Codes Documendation。