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

使用Tweepy的Twitter APIv2扩展

曾河
2023-03-14

我有一个非常基本的应用程序,它使用Tweepy的StreamingClient从定义的用户列表中流式发送推文。当他们中的一个人发推特时,我有几个基于关键词的条件来确定我是否应该提醒自己。我希望它将推文的文本和发送人的用户名都发送给我。我可以做前者,但可以知道如何获得用户名。

据我所知,我需要使用扩展,但我是一个完全的新手,不知道如何将它集成到我的代码中,因为大多数关于扩展的文档都在twitter API上,我不确定如何将它应用到我的使用tweepy的python代码中。

我的代码的精简版本,目前只处理推文文本如下(除了tweet.text之外,我还想打印用户名):

import tweepy
import json
import re
import logging


class MyListener(tweepy.StreamingClient):
    def on_tweet(self, tweet):
        keyword = ["xxxx", "yyyy","zzzz"]
        key_patterns = [r'\b%s\b' % re.escape(s.strip()) for s in keyword]
        key_there = re.compile('|'.join(key_patterns))
        if key_there.search(tweet.text):
            print(tweet.text)
       
        else:
            print("No Match")
        
        
    def on_error(self, status):
        print(status)
        return True
 
twitter_stream = MyListener("token")

twitter_stream.get_rules()
twitter_stream.filter()

共有2个答案

姜淇
2023-03-14

weet对象有一个user属性,而user属性有一个screen_name属性,这是用户名。你可以这样得到它:

class MyListener(tweepy.StreamingClient):
    def on_tweet(self, tweet):
        keyword = ["xxxx", "yyyy","zzzz"]
        key_patterns = [r'\b%s\b' % re.escape(s.strip()) for s in keyword]
        key_there = re.compile('|'.join(key_patterns))
        if key_there.search(tweet.text):
            print(tweet.text)
            print(tweet.user.screen_name)
       
        else:
            print("No Match")
夏奕
2023-03-14

我在这里有点晚了,不过,我将放弃一个答案,以防将来有人发现它有帮助。要访问Twitter API V2中的用户数据,您需要将扩展=author_id传递给过滤器方法。现在,您可以使用user_fields参数传递所需的用户字段。但是,默认情况下,将返回nameusernameid。在逗号分隔的列表中指定任何其他所需字段,逗号和字段之间没有空格。(参考https://docs.tweepy.org/en/stable/expansions_and_fields.html)

有关不同的用户字段,请参阅https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/user

您还需要将on_tweet方法更改为on_data。数据将以 json 字符串的形式接收,该字符串由数据包含matching_rules字段组成(请参阅 https://docs.tweepy.org/en/stable/streamingclient.html)。

您的代码如下所示:

import tweepy
import json
import re
import logging


class MyListener(tweepy.StreamingClient):
     def on_data(self, data):
        jsonData = json.loads(data)
        print(jsonData) #notice the different fields. 'username' comes with the key 'users' which itself comes in the 'includes' field.
        tweetText = jsonData['data']['text']
        username = jsonData['includes']['users']['username'] 
        print(username)
        keyword = ["xxxx", "yyyy","zzzz"]
        key_patterns = [r'\b%s\b' % re.escape(s.strip()) for s in keyword]
        key_there = re.compile('|'.join(key_patterns))
        if key_there.search(tweetText):
            print(tweetText)
       
        else:
            print("No Match")
        
        
    def on_error(self, status):
        print(status)
        return True
 
twitter_stream = MyListener("token")

twitter_stream.get_rules()
twitter_stream.filter(expansions = ['author_id'], user_fields = ["<required fields>"])
 类似资料:
  • 我正在尝试使用python库Tweepy来传输twitter数据。我设置了工作环境,谷歌了一下这些东西,但是我不知道它们是如何工作的。我想在python (tweepy)中使用spark streaming(DStream-Batch processing)。我至少经历了以下环节: < li >如何获取tweepy中某个位置的特定标签的推文? < Li > http://spark . Apach

  • 使用Tweepy v2访问推文图片网址的优雅方式是什么?Twitter发布了他们API的v2,Tweepy将他们的python模块调整为它(Tweepy v2)。 举个例子,我有一个tweet的数据帧,用tweet创建,保存tweet id等等https://twitter.com/federalreserve/status/1501967052080394240 图片保存在不同的url下,twe

  • 我正在运行下面的程序。但是我得到了下面的错误信息。401 **** 401 ****(不停重复) 代码(从某个论坛获得)基本上试图连接到Twitter并获取tweets。当它在ubuntu终端上运行时,出现了401错误信息。

  • 我正在使用使用Tweepy库的Python代码来检索特定主题标签的Twitter数据,但问题是我需要检索特定时期,例如,从2013年6月30日到2013年12月30日。我该怎么做?

  • 问题内容: 我在Stack Exchange上的一个问题中看到,限制可能是每15分钟的请求数的函数,并且还取决于算法的复杂性,只不过这并不复杂。 所以我使用这段代码: 我总是收到Twitter限制错误: 问题答案: 问题在于您的区块放置在错误的位置。将数据插入数据库将永远不会产生-对其进行迭代。我建议重构您的代码以在无限循环中调用方法。该调用应放置在块中,因为它可能引发错误。 代码大致如下所示:

  • 我使用Tweepy访问流API并将其存储在JSON文件中。代码看起来很好,但我一直得到这个错误:属性错误:'NoneType'对象没有属性'strip' 这里的错误在最后一行。我认为流正在返回null,因此当我试图过滤它时,它给出了错误。请帮忙!