我正在使用tweepy编写一个twitter机器人,它将搜索提及它,然后根据推文中的文本实现操作。最终我想通过cron每隔几分钟运行一次。我是一个蟒蛇初学者,所以原谅我的无知。
我的问题是防止重复。我有一个循环,通过检查它的id是否大于之前的推文测试推文是否是新的。但是,我无法找到一种初始化此变量的方法,然后在循环结束时保存对它的更改。
这是我当前(破损)的代码:
import sys
import tweepy
## OAuth keys go here.
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth)
def ask_bot():
old_id = 0
for tweet in api.mentions():
if tweet.id > old_id:
print "@%s: %s" % (tweet.author.screen_name, tweet.text)
old_id = tweet.id + 1
else:
pass
最后所需的行为是循环只打印以前没有打印过的推文。
答案 0 :(得分:2)
我对Tweepy了解不多,但这可能会有所帮助:
import sys
import tweepy
## OAuth keys go here.
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth)
seen_ids = []
def ask_bot():
global seen_ids
for tweet in api.mentions():
if tweet.id not in seen_ids:## Heading ##:
print "@%s: %s" % (tweet.author.screen_name, tweet.text)
seen_ids.append(tweet)
else:
pass
因此,它将在Twitter上搜索所有针对它的推文,然后它将检查它是否之前已经看过该ID。我使用global
的原因是因此更改会影响主变量seen_ids,而不是函数内部的副本。
祝你好运!
答案 1 :(得分:1)
我只会列出已打印的ID列表。然后,您只需检查您要打印的ID是否已经在打印列表中。如果是的话,什么都不做。如果不是,请将其打印并添加到列表中。
换句话说:
import sys
import tweepy
## OAuth keys go here.
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth)
printed_ids = []
def ask_bot():
old_id = 0
for tweet in api.mentions():
if tweet.id not in printed_ids:
print "@%s: %s" % (tweet.author.screen_name, tweet.text)
printed_ids.append(tweet.id)
else:
pass