当前位置: 首页 > 知识库问答 >
问题:

如何更新Tweepy Streaming Python代码

鄢博简
2023-03-14

我为早期版本的Python运行了此代码,但现在想将其升级到最新版本的Python和Tweepy,但我似乎无法使其工作。任何帮助都将不胜感激!我得到的错误是:

ImportError:无法从“tweepy.streaming”中导入名称“StreamListener”(C:\ Users \ mman enica \ anaconda 3 \ lib \ site-packages \ tweepy \ streaming . py)

import sys

from tweepy import OAuthHandler
from tweepy import API
from tweepy import Stream
from tweepy.streaming import StreamListener
import pandas as pd
from time import sleep
from random import randint

CONSUMER_KEY = ""
CONSUMER_SECRET = ""
ACCESS_TOKEN = ""
ACCESS_TOKEN_SECRET = ""

auth = OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = API(auth, wait_on_rate_limit=True,
          wait_on_rate_limit_notify=True)

tweets = pd.DataFrame(columns=['description', 'location', 'text', 'name', 'user_created', 
                  'followers', 'user_id', 'created', 'retweets', 'analysis', 'sentiment'])

class Listener(StreamListener):
    def __init__(self, output_file=sys.stdout):
        super(Listener,self).__init__()
        self.output_file = output_file
        self.counter = 0
        self.limit = 3
    def on_status(self, status):
        try:
            name = status.user.screen_name  
            sleep(randint(100,190))
            print(name)
            api.create_friendship(name)            
            
            print(status.text, file=self.output_file)
                 
            self.counter += 1
            if self.counter <= self.limit:
                print(self.counter)
                return True
            else:
                print('Limit reached')
        except:
            print("Error in adding friendship")                   
        
    def on_error(self, status_code):
        print('Error ' + str(status_code))
        return False

listener = Listener()

stream = Stream(auth=api.auth, listener=listener)
try:

    stream.filter(track=['NFTs', 'Buying NFT', 'Buy NFT', '-filter:links', '-filter:retweets'])

    print('Start streaming.')
except KeyboardInterrupt:
    print("Stopped.")
finally:
    print('Done.')
    stream.disconnect()

共有1个答案

谷梁浩思
2023-03-14

首先,确保您已经安装了最新版本的Tweepy(4.5.0)。您可以通过在终端中键入pip安装--user--升级Tweepy来保证这一点。您可以在没有--user部分的情况下尝试它。它也应该升级。现在,安装了最新版本,您可以开始收集包含以下代码的流(基于https://docs.tweepy.org/en/stable/streaming.html):

import tweepy 

class StreamCollector(tweepy.Stream):

    def on_data(self, data):
        print(data)


stream = StreamCollector(
  "Consumer Key here", "Consumer Secret here",
  "Access Token here", "Access Token Secret here"
)
stream.filter(track=["Obama"])

请注意,on_data方法直接从 Twitter 接收raw_data。我们只是用上面的代码打印它,但你可以像对待一个python字典一样对待这个数据对象,并提取你想要的关于推文的任何信息。

我建议,不要打印数据对象,而是像下面这样(导入 json 库并将其余代码放在 def on_data 中,而不是 print(data)):

import json

tweet_info = json.loads(data)
print(tweet_info['text'])

请注意,我们已经访问了< code>data对象,并且只提取了tweet的“文本”信息。你可以更深入地从< code>tweet_info字典中获取其他信息,也可以用问题中显示的必需品来补充上面的代码。

希望它有帮助。:)

 类似资料:
  • 问题内容: 我是Jenkins Plugin开发的新手,所以请问这个问题很愚蠢。我目前正在开发Jenkins插件,该插件提供了非常小的配置选项列表,如所附的屏幕快照所示。 该表单是使用Jelly脚本设计的。我必须从Java代码更新作业的config.xml文件中由表单提交的这些参数。谁能在我的Java代码中建议更新作业的当前config.xml的方法吗? 谢谢 问题答案: 经过一些研究,我已经知道

  • 有时代号为One的团队表示修复将在几周内到来,而其他时候他们表示已经修复。这种不透明性显然与云服务器的更新有关,但我不清楚是否只是云服务器&插件,还是我遗漏了什么。为什么没有一个单独的更新过程? 我真的想要一个更明确的答案,比如代号一是如何工作的?为了这个。

  • 我正在尝试从命令行更新Xcode。最初我试着跑步: 这导致了以下消息: 所以问题仍然存在,有没有办法从命令行更新Xcode?

  • 我正在尝试创建一个SNMP4j代理,但发现很难正确理解该过程。我已经成功创建了一个可以使用snmpwalk从命令行查询的代理。我遇到的困难是理解如何更新存储在我实现的MIB中的值。 下面显示了我用于创建MIB的相关代码(我实现了主机资源MIB) 这似乎足以创建可运行的代理。我不明白的是,我应该如何更改MIB中存储的值(例如,如何更改HrSWRunStatus的值)。似乎有一些乱七八糟的方法,但它们

  • 本文向大家介绍如何利用pycharm进行代码更新比较,包括了如何利用pycharm进行代码更新比较的使用技巧和注意事项,需要的朋友参考一下 pycharm自带对两个文件比对更新模块,方便查找不同,进行修改替换。方法如下:   1.选择目标文件,右键选择compare with   2.选择对比文件   3.查看对比修改如图: 到此这篇关于如何利用pycharm进行代码更新比较的文章就介绍到这了,更

  • 这是我正在查看的代码片段: 根据迭代器无效规则: 向量:插入点之前的所有迭代器和引用不受影响,除非新容器大小大于以前的容量(在这种情况下,所有迭代器和引用都无效)[23.2.4.3/1]迭代器无效规则 我明白,由于我在每个插入操作中重新分配iter的值,也许我能够保持它的有效性(如果我错了,请纠正我)。然而,迭代器“中间”在这种情况下仍然有效,即使我没有在循环中篡改它,而且当向量的容量发生变化时也