在持续时间参数(# 行、秒、#Tweets 等)后停止 Tweepy 流

2024-01-04

我正在使用 Tweepy 捕获基于主题标签 #WorldCup 的流式推文,如下面的代码所示。它按预期工作。

class StdOutListener(StreamListener):
  ''' Handles data received from the stream. '''

  def on_status(self, status):
      # Prints the text of the tweet
      print('Tweet text: ' + status.text)

      # There are many options in the status object,
      # hashtags can be very easily accessed.
      for hashtag in status.entries['hashtags']:
          print(hashtag['text'])

      return true

    def on_error(self, status_code):
        print('Got an error with status code: ' + str(status_code))
        return True # To continue listening

    def on_timeout(self):
        print('Timeout...')
        return True # To continue listening

if __name__ == '__main__':
   listener = StdOutListener()
   auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
   auth.set_access_token(access_token, access_token_secret)

   stream = Stream(auth, listener)
   stream.filter(follow=[38744894], track=['#WorldCup'])

因为这是现在的热门标签,所以搜索不需要太长时间就能捕获 Tweepy 让您在一笔交易中获得的最大推文数量。但是,如果我要在 #StackOverflow 上搜索,它可能会慢得多,因此,我想要一种方法来终止流。我可以对几个参数执行此操作,例如在 100 条推文后停止、3 分钟后停止、文本输出文件达到 150 行后等。我确实知道套接字超时时间不用于实现此目的。

我看过这个类似的问题:

Tweepy Streaming - 停止收集 x 数量的推文 https://stackoverflow.com/questions/20863486/tweepy-streaming-stop-collecting-tweets-at-x-amount

但是,它似乎没有使用流 API。它收集的数据也非常混乱,而这个文本输出是干净的。

除了键盘中断之外,任何人都可以建议一种基于某些用户输入参数来停止 Tweepy 的方法(当在此方法中使用流时)?

Thanks


我解决了这个问题,所以我将成为那些回答自己问题的网络英雄之一。

这是通过使用静态 Python 变量作为计数器和停止值来实现的(例如,在抓取 20 条推文后停止)。目前这是一个地理位置搜索,但您可以使用以下命令轻松地将其替换为主题标签搜索:getTweetsByHashtag() method.

#!/usr/bin/env python
from tweepy import (Stream, OAuthHandler)
from tweepy.streaming import StreamListener

class Listener(StreamListener):

    tweet_counter = 0 # Static variable

    def login(self):
        CONSUMER_KEY =
        CONSUMER_SECRET =
        ACCESS_TOKEN =
        ACCESS_TOKEN_SECRET =

        auth = OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
        auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
        return auth

    def on_status(self, status):
        Listener.tweet_counter += 1
        print(str(Listener.tweet_counter) + '. Screen name = "%s" Tweet = "%s"'
              %(status.author.screen_name, status.text.replace('\n', ' ')))

        if Listener.tweet_counter < Listener.stop_at:
            return True
        else:
            print('Max num reached = ' + str(Listener.tweet_counter))
            return False

    def getTweetsByGPS(self, stop_at_number, latitude_start, longitude_start, latitude_finish, longitude_finish):
        try:
            Listener.stop_at = stop_at_number # Create static variable
            auth = self.login()
            streaming_api = Stream(auth, Listener(), timeout=60) # Socket timeout value
            streaming_api.filter(follow=None, locations=[latitude_start, longitude_start, latitude_finish, longitude_finish])
        except KeyboardInterrupt:
            print('Got keyboard interrupt')

    def getTweetsByHashtag(self, stop_at_number, hashtag):
        try:
            Listener.stopAt = stop_at_number
            auth = self.login()
            streaming_api = Stream(auth, Listener(), timeout=60)
            # Atlanta area.
            streaming_api.filter(track=[hashtag])
        except KeyboardInterrupt:
            print('Got keyboard interrupt')

listener = Listener()
listener.getTweetsByGPS(20, -84.395198, 33.746876, -84.385585, 33.841601) # Atlanta area.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在持续时间参数(# 行、秒、#Tweets 等)后停止 Tweepy 流 的相关文章

随机推荐

  • 为什么 Chrome 开发者工具会自动阻止请求?

    我正在尝试构建一个 PWA 渐进式 Web 应用程序 但 Chrome 开发工具控制台警告说它正在阻止我的 css 和图标文件 Request was blocked by DevTools https example com styles
  • 在 Laravel 中一起使用 React.js 和 Vue.js

    我真的很想知道 是否可以在 Laravel 中同时使用 React js 和 vue js 例如 使用 ReactJs 作为管理仪表板 使用 VueJs 作为客户端仪表板 我知道使用其中之一在技术上和逻辑上更好 你怎么认为 我们可以一起使用
  • 使用 ExecuteStreamCommand 的 Python 脚本

    在尽我所能找到以前的问题和与此问题相关的示例后 仍然没有找到我正在寻找的答案 我想我会自己提交一个问题 由于以下原因 ExecuteStreamCommand 对我来说似乎是完美的处理器 我能够执行任何 Python 脚本并避免使用 Jyt
  • 使用 TeamCity 和 Fakes Framework 进行构建和测试

    我们正在运行 TeamCity 8 1 4 构建服务器 计算机上安装了 VS2013 我最近介绍了依赖于 Microsoft Fakes Framework 的测试 因此 我必须添加一些对新 Fake 程序集和Microsoft Visua
  • SQLiteException:未知错误(代码0):本机无法创建新字节[]

    当尝试查询最多 30 个对象时 我收到此错误 每个对象都有字段字节 其权重为 100x100 ARGB 8888 位图数据 39kb 我使用的是 OrmLite 4 45 版本 在 Samsung GT n8000 平板电脑上 最大堆大小
  • 如何检测用户何时按下 Android 设备上的“菜单”键?

    我知道我可以覆盖onBackPressed 在更高的 API 级别上检测是否按下了后退键 对于菜单按钮有类似的方法吗 我不太喜欢在 KeyEvents 中检查键码 谢谢 您在寻找这个吗 public boolean onKeyDown in
  • R函数返回值以及警告消息

    我调用了其他库函数 它执行计算并抛出警告消息 我尝试使用 tryCatch 捕获消息 但不知道如何保留计算值和警告消息 这是示例 简化 代码 我希望 mydiv 函数同时具有计算值和警告消息 现在 mydiv 调用将返回除法值或警告 但不会
  • 如何在 Alamofire 中使用 PUT 请求

    我是 swift 的新手 我也尝试使用 Alamofire 从 API 调用数据 我对如何使用它感到很困惑放置请求更新数据 我已经在这里阅读了一些解决方案 但我不知道如何在我的应用程序上应用 我正在创建一个事件应用程序 场景应该是 当参与者
  • 模块“AppModule”导入了意外值“MyCustomModule”

    我正在尝试将我的 angular2 自定义库之一迁移到 RC 6 Webpack 我的目录结构是 src source TS files lib transpiled JS files definition files dev develo
  • 使用 gcc 使用 gets 函数编译我的程序[重复]

    这个问题在这里已经有答案了 每当我尝试这样做时 我都会得到 警告 gets 函数很危险 不应使用 现在 我知道为什么这个功能很糟糕了 但是为了编译我已经编写的程序 我必须使用这个函数 我应该怎么做才能不出现此警告 或具有完全相同属性的函数
  • 以编程方式查找应用程序的 URL

    我需要从我自己的应用程序中启动另一个应用程序 但我没有它的 URL 所以我的问题是 有没有办法根据另一个应用程序的包标识符或 trackid 以编程方式查找其 url 如果你只想启动其他应用程序 你可以使用ios私有api interfac
  • ORA-02303: 无法删除或替换具有类型或表相关项的类型

    我是甲骨文新手 我尝试改变varchar 50 to 250 CREATE OR REPLACE TYPE CEQ OWNER TYPE REC PARAE2 AS OBJECT BONETAT DESC VARCHAR2 250 我收到
  • Android recyclerview v.23.2.0 和设计库 v.23.2.0 已损坏

    更新到 v23 2 0 后 recyclerview 项目有奇怪的行为 非常大 但空间空白 更新到设计库 23 2 0 后 菜单溢出图标变成黑色 应用程序有黑色操作栏 UPDATE在我的 Nexus 5 上 溢出图标和回收器视图行已修复 但
  • 在 jinja for 循环中调用 JavaScript 函数[重复]

    这个问题在这里已经有答案了 我有一个 HTML 页面 在变量中schedule具有以秒为单位的连续十进制数 我的目的是创建一个函数 使用 JavaScript jQuery 及时转换所有这些数字 但我无法理解 如何调用我的函数来转换所有项目
  • WPF 中的命令链接

    有人可以告诉我如何在 WPF 窗口中添加 CommandLink 控件吗 这就是我所说的 CommandLink 的意思 http msdn microsoft com en us library aa511455 aspx http ms
  • CouchDB 组级别和键范围

    谁能向我解释为什么以下不起作用 假设以下文档结构 id 520fb089a6cb538b1843cdf3cca39a15 rev 2 f96c27d19bf6cb10268d6d1c34799931 type nosql location
  • 为什么 Meltdown 和 Spectre 错误这么长时间都没有被发现?

    为什么 Meltdown 和 Spectre 错误这么长时间都没有被发现 近 20 年来 这些错误一直存在于 CPU 中 考虑到对所有使用这些处理器的计算机的严重影响 为什么不尽早发现呢 答案非常简单 现代 CPU 拥有数十亿个晶体管 例如
  • 如何在android中使用rawQuery()

    我有一个这样的sql查询 String loadFav SELECT id title name favorite FROM table1 where favorite 1 UNION ALL SELECT id title name fa
  • 如何在AWS SES html模板中添加添加if条件?

    要求是根据从 api 接收到的正文数据发送模板邮件 BodyData 可能不包含某些标签 请参阅下面的示例模板部分 p sender has invited you to join team teamName p 因此正文数据可能不包含团队
  • 在持续时间参数(# 行、秒、#Tweets 等)后停止 Tweepy 流

    我正在使用 Tweepy 捕获基于主题标签 WorldCup 的流式推文 如下面的代码所示 它按预期工作 class StdOutListener StreamListener Handles data received from the