返回介绍

13.4 使用 Twitter 流式 API 进行高级数据收集

发布于 2024-01-27 21:43:11 字数 2870 浏览 0 评论 0 收藏 0

本章前文中提到过,有两种类型的 Twitter API 可以使用:REST API 和流式 API。

流式 API 同 REST API 相比有什么差别呢?下面进行了简单的概括。

· 数据是实时的,而 REST API 只返回已经发布一段时间的推文。

· 流式 API 缺乏普遍性,但是在未来,随着更多实时数据的生成和曝光,其可用性会变得越来越高。

· 因为最新的数据很有趣,所以很多人对这部分数据很感兴趣,这意味着你可以在网络上找到很多资源和帮助。

让我们创建一个脚本来收集来自流式 API 的数据。这个脚本会使用在这一章覆盖到的所有知识。首先编写最基础的部分——输入值和 key 值。

from tweepy.streaming import StreamListener     ➊
from tweepy import OAuthHandler, Stream       ➋

API_KEY = '5Hqg6JTZ0cC89hUThySd5yZcL'
API_SECRET = 'Ncp1oi5tUPbZF19Vdp8Jp8pNHBBfPdXGFtXqoKd6Cqn87xRj0c'
TOKEN_KEY = '3272304896-ZTGUZZ6QsYKtZqXAVMLaJzR8qjrPW22iiu9ko4w'
TOKEN_SECRET = 'nsNY13aPGWdm2QcgOl0qwqs5bwLBZ1iUVS2OE34QsuR4C'

❶ 导入 StreamListener,这会创建一个流式会话,并且监听信息。

❷ 导入之前使用过的 OAuthHandler,以及 Stream,后者是真正处理 Twitter 的流信息的类。

这个脚本中的 import 语句和上一个脚本中的有少许不同。这两种方式都是合法的,只是个人偏好问题。下面是这两种方式的一个快速比较。

方式 1

import tweepy
...
auth = tweepy.OAuthHandler(API_KEY, API_SECRET)

方式 2

from tweepy import OAuthHandler
...
auth = OAuthHandler(API_KEY, API_SECRET)

通常情况下,脚本中没有频繁使用库时使用第一种方式。在你有一长串代码,想要更清晰一些的时候,也适合使用第一种方式。然而,当库使用得非常多时,要将其都打印出来会变得令人厌烦;同样,如果这个库是脚本的基础,从这个库导入的模块或类对人们来说应该很明显。

现在,要创建导入的 StreamListener 类的子类(在第 12 章学习的概念),以覆写其中的 on_data 方法。为此,在新的类 Listener 中重新定义了这个函数。当有数据时,我们想要在终端中看到它们,所以添加 print 语句到函数中。

class Listener(StreamListener):             ➊

  def on_data(self, data):              ➋
    print data                  ➌
    return True                   ➍

❶ 创建 StreamListener 的子类。

❷ 定义 on_data 方法。

❸ 输出推文。

❹ 返回 True。StreamListener 有 on_data 方法,同样返回 True。因为我们创建了子类并重新定义了这个函数,所以必须在子类方法中重复返回这个值。

接下来,添加你的认证处理逻辑:

auth = OAuthHandler(API_KEY, API_SECRET)
auth.set_access_token(TOKEN_KEY, TOKEN_SECRET)

最后,将 Listener 和 auth 传入到 Stream 中,开始使用搜索词过滤。在这个案例中,我们查看 child labor(童工),因为它相对于 #childlabor 更加普遍。

stream = Stream(auth, Listener())      ➊
stream.filter(track=['child labor'])     ➋

❶ 将 auth 和 Listener 作为参数传递,创建一个流。

❷ 过滤流,只返回有 child 和 labor 存在的条目。

最后的脚本如下:

from tweepy.streaming import StreamListener
from tweepy import OAuthHandler, Stream


API_KEY = '5Hqg6JTZ0cC89hUThySd5yZcL'
API_SECRET = 'Ncp1oi5tUPbZF19Vdp8Jp8pNHBBfPdXGFtXqoKd6Cqn87xRj0c'
TOKEN_KEY = '3272304896-ZTGUZZ6QsYKtZqXAVMLaJzR8qjrPW22iiu9ko4w'
TOKEN_SECRET = 'nsNY13aPGWdm2QcgOl0qwqs5bwLBZ1iUVS2OE34QsuR4C'

class Listener(StreamListener):
  def on_data(self, data):
    print data
    return True

auth = OAuthHandler(API_KEY, API_SECRET)
auth.set_access_token(TOKEN_KEY, TOKEN_SECRET)

stream = Stream(auth, Listener())
stream.filter(track=['child labor'])

下面,你需要添加代码,通过 on_data 方法,像本章之前那样将推文保存到数据库、文件或其他的存储工具。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文