Python:如何从 Twitter 帐户获取对推文的所有回复?

如何解决Python:如何从 Twitter 帐户获取对推文的所有回复?

我从 Twitter 帐户获取我需要的所有推文。超过 200 条推文;例如 500,600,...

我正在使用 Tweepy 库来帮助我使用 Python 完成此操作,并且我创建了此对象来完成此操作。

from rrss.twitter_connection import TwitterConnection
import tweepy


class Tweets:
    def __init__(self):
        self.all_tweets = []    # List of tweets
        self.__total_tweets = None
        self.__screen_name = None
        self.__replies = None

    def __del__(self):
        del self.all_tweets
        del self.screen_name
        del self.total_tweets
        del self.replies

    @property
    def screen_name(self):  # Screen name of twitter account which we are going to retrieve all their tweets
        return self.__screen_name

    @screen_name.setter
    def screen_name(self,screen_name):
        self.__screen_name = screen_name

    @screen_name.deleter
    def screen_name(self):
        del self.__screen_name

    @property
    def total_tweets(self): # Total tweets which wants to be returned
        return self.__total_tweets

    @total_tweets.setter
    def total_tweets(self,total):
        self.__total_tweets = total

    @total_tweets.deleter
    def total_tweets(self):
        del self.__total_tweets

    @property
    def replies(self):
        return self.__replies

    @replies.setter
    def replies(self,replies):
        self.__replies = replies

    @replies.deleter
    def replies(self):
        del self.__replies

    @staticmethod
    def __get_tweets(total,screen_name,oldest_id=None):
        """
        :param total: Number of tweets to return
        :param screen_name: Twitter account
        :param oldest_id: The last id of the tweet retrieved
        :return: A list with at least a number of tweets equal to variable total from the Twitter Account relationed to screen_name variable
        """
        api = TwitterConnection().api
        if oldest_id is None:
            tweets = api.user_timeline(screen_name=screen_name,count=total,include_rts=False,tweet_mode="extended")
        else:
            tweets = api.user_timeline(screen_name=screen_name,max_id=oldest_id - 1,tweet_mode="extended")
        return tweets

    def get_tweets(self,total,screen_name):
        """
            Public method to get a total number of tweets from a screen name
        :param total: Total of tweets to retrieve from a screen name
        :param screen_name: Twitter account
        :return: Update self.all_tweets with all the tweets retrievedd
        """
        self.screen_name = screen_name
        if total <= 200:
            self.all_tweets = Tweets.__get_tweets(total,screen_name)
        else:
            counter = 200
            self.all_tweets = Tweets.__get_tweets(counter,screen_name)
            oldest_id = self.all_tweets[-1].id
            while len(self.all_tweets) < total:
                total_block_tweets = 200 if total - counter > 200 else total - counter
                tweets = Tweets.__get_tweets(total_block_tweets,oldest_id)
                if len(tweets) > 0:
                    self.all_tweets.extend(tweets)
                    oldest_id = self.all_tweets[-1].id
                    counter = len(self.all_tweets)
                else:
                    break

    def get_replies(self,tweet_id):
        api = TwitterConnection().api
        self.replies = tweepy.Cursor(api.search,q='to:{}'.format(self.screen_name),since_id=tweet_id,tweet_mode='extended').items()

    def search_replies_to_tweet(self,tweet_id):
        while True:
            try:
                reply = self.replies.next()
                print(reply.in_reply_to_status_id)
                if reply.in_reply_to_status_id == tweet_id:
                    print("reply of tweet:{}".format(reply.full_text))
                if reply.in_reply_to_status_id_str == str(tweet_id):
            except StopIteration:
                print("El cursor ha llegado a su final!!!")
                break

使用此代码,您可以从 Twitter 帐户“MovistarEstu”获取所有推文:

def main():
    t = Tweets()
    t.get_tweets(200,"MovistarEstu")
    i = 0
    for info in t.all_tweets:
        print(f"i: {i} - ID: {info.id} - created_at: {info.created_at}")
        print(f"text: {info.full_text}\n")
        i += 1

您获得所有推文,然后打印有关它们的一些信息。所有这些工作正常。但是当我尝试从 ID 获得对“MovistarEstu”创建的所有推文的所有回复时,我的问题就出现了。我收到了一些回复,但不是全部。

例如,我收到了 ID 为 140344418085265411 但没有 ID 为 1391368878861824002 的推文的回复,我不知道为什么:(

使用此代码,我尝试从“MovistarEstu”获取所有推文,因为 ID:1391364490286047238

t.get_replies(1391364490286047238)

现在,我尝试将“MovistarEstu”的所有回复都发送到此 ID 推文:1391368878861824002

t.search_replies_to_tweet(1391368878861824002)

但是,我什么也没有得到。但是,如果您访问 Twitter,您可以查看是否有回复:https://twitter.com/MovistarEstu/status/1391368878861824002

如果您尝试获取此 ID 的所有回复:1403443418085265411

t.search_replies_to_tweet(1403443418085265411)

然后,我可以找到回复!!!

reply of tweet:@MovistarEstu Victoria en el 4 partido de la final 
reply of tweet:@MovistarEstu Momento que no volveremos a ver en la puta vida 
reply of tweet:@MovistarEstu Es buenísimo porque el CM del @MovistarEstu está boicoteando constantemente a su directiva haciéndonos recordar que el pasado fue glorioso y que nos han llevado a la absoluta mediocridad. 
reply of tweet:@MovistarEstu No me habéis pedido permiso para usar la foto ? 
reply of tweet:@MovistarEstu Yo estaba ahí con mis compis de cantera 
reply of tweet:@MovistarEstu Que salgan los toreros oh oh oh!!!! reply of tweet:@MovistarEstu Entonces salían los toreros habitualmente,ahora sólo salen los torreznos 
reply of tweet:@MovistarEstu Cualquier tiempo pasado fue mejor. Asensio ya estaba por aquel entonces mamando del frasco? 
reply of tweet:@MovistarEstu Claro,cuando Nacho aprobó la selectividad a la 17a 
reply of tweet:@MovistarEstu 17 años ya!!! Lo recuerdo como si fuera ayer. Se forzó quinto partido de la final ACB con el Farsa. Patterson,Nicola Loncar... 
reply of tweet:@MovistarEstu Segundo partido en Vistalegre de la final de liga contra el FCBarcelona. Tremenda exhibición,ambientazo en las gradas y 2-2. Todo se decidirá en el Palau (cuando ya debía estar finiquitada la final tras algún arbitraje "ejem-ejem" en Barcelona)... 
reply of tweet:@MovistarEstu Pase a la final ACB?

我做错了什么?

解决方法

来自 Tweepy 的 standard search API 使用的 Twitter API.search 的文档:

请记住,搜索索引有 7 天的限制。换句话说,不会找到超过一周的日期的推文。

https://developer.twitter.com/en/docs/twitter-api/v1/tweets/search/guides/standard-operators 还说:

搜索 API 不是所有推文的完整索引,而是最近推文的索引。该索引包括 6-9 天的推文。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res