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