Python 错误:tweepy.Error.TweepError:[{'code':187,'message':'状态是重复的。}]-如何停止获取重复的tweet Id?

Python 错误:tweepy.Error.TweepError:[{'code':187,'message':'状态是重复的。}]-如何停止获取重复的tweet Id?,python,twitter,tweepy,Python,Twitter,Tweepy,我已经用tweepy创建了一个twitter机器人 以下是此bot的功能: 搜索关键字。 转发。 回复标准消息。 我的问题是: 我不断收到重复的推文,程序停止了 此错误不是: 推特并没有阻止我回复同样的信息 我注意到,我一直在获得相同的用户id。我尝试了许多方法来避免这种情况,但它们不会像缩进一样工作,或者在停止工作之前有一段时间不会工作,因此我没有将任何方法添加到此代码示例中,因为结果完全相同,但有不同的变体 问题: 如何停止获取重复的推特ID? 有没有比使用api.search(如Strea

我已经用tweepy创建了一个twitter机器人

以下是此bot的功能:

搜索关键字。 转发。 回复标准消息。 我的问题是:

我不断收到重复的推文,程序停止了

此错误不是:

推特并没有阻止我回复同样的信息

我注意到,我一直在获得相同的用户id。我尝试了许多方法来避免这种情况,但它们不会像缩进一样工作,或者在停止工作之前有一段时间不会工作,因此我没有将任何方法添加到此代码示例中,因为结果完全相同,但有不同的变体

问题:

如何停止获取重复的推特ID? 有没有比使用api.search(如StreamListener)更好的方法?如果是,怎么做? 如何获得最新推文而不是随机推文? 请注意,这三个问题都与删除重复项的原始概念有关

完整代码:

import tweepy
import time 

consumer_key = 'MYKEY'
consumer_secret = 'MYSECRET'    
key =  'KEY'
secret =  'SECRET'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(key, secret)
api = tweepy.API(auth, wait_on_rate_limit=True)

tweetNumber = 20    
q = "MY SEARCH"

tweets = list(tweepy.Cursor(api.search, q, tweet_mode='extended').items(tweetNumber))

def crashBot():    

    for tweet in reversed(tweets):
            
        try:          
                                       
                if q in tweet.full_text.lower():
                    print(str(tweet.id) + '-' + tweet.full_text)
                    api.update_status("@" + tweet.user.screen_name + " MY MESSAGE", tweet.id)
                    api.retweet(tweet.id)                                        
                    print("done!")                
                    time.sleep(30)            
        except tweepy.tweepyError as e:
            print(e.reason)
            time.sleep(30)
            
while True:
    crashBot()    
    time.sleep(30)
因为这行只执行一次,所以它的内容永远不会改变。因此,当crashBot第二次运行时,它将回复与第一次相同的推文

一种可能的解决方案是在调用crashBot之间重新填充列表

您还可以通过保留一组您已经看到的所有tweet id来确保不会多次回复同一条tweet

tweetNumber = 20    
q = "MY SEARCH"
seen = set()

def crashBot():    
    for tweet in reversed(tweets):
        try:          
            if tweet.id in seen:
                print("Skipping", tweet.id, "because we already replied to it")
                continue
            if q in tweet.full_text.lower():
                seen.add(tweet.id)
                #rest of code continues as before

我建议对你的每个问题提出不同的问题。每个帖子都应该是具体的,你要问的一些问题一定要分开问。谢谢你的建议,我很快就会提出一个新问题。
while True:
    tweets = list(tweepy.Cursor(api.search, q, tweet_mode='extended').items(tweetNumber))
    crashBot()    
    time.sleep(30)
tweetNumber = 20    
q = "MY SEARCH"
seen = set()

def crashBot():    
    for tweet in reversed(tweets):
        try:          
            if tweet.id in seen:
                print("Skipping", tweet.id, "because we already replied to it")
                continue
            if q in tweet.full_text.lower():
                seen.add(tweet.id)
                #rest of code continues as before