Python在twitter机器人的for循环中保存状态
我正在使用tweepy编写一个twitter机器人,它将搜索对它的提及,然后根据tweet中的文本执行操作。最终我想通过cron每隔几分钟运行一次。我是python初学者,请原谅我的无知 我的问题是防止重复。我有一个循环,通过检查一条tweet的id是否大于前一条tweet来测试它是否是新的。但是,我无法找到一种方法来初始化这个变量,然后在循环结束时保存对它的更改 以下是我当前(已损坏)的代码:Python在twitter机器人的for循环中保存状态,python,twitter,Python,Twitter,我正在使用tweepy编写一个twitter机器人,它将搜索对它的提及,然后根据tweet中的文本执行操作。最终我想通过cron每隔几分钟运行一次。我是python初学者,请原谅我的无知 我的问题是防止重复。我有一个循环,通过检查一条tweet的id是否大于前一条tweet来测试它是否是新的。但是,我无法找到一种方法来初始化这个变量,然后在循环结束时保存对它的更改 以下是我当前(已损坏)的代码: 最后,循环需要的行为是只打印以前没有打印过的tweet。我只需要列出已打印的ID。然后,您只需检查您
最后,循环需要的行为是只打印以前没有打印过的tweet。我只需要列出已打印的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
我对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
,是因为更改会影响主变量,而不是函数内部的副本。
祝你好运 工作完美。我有更多的数据库背景,但我不太熟悉在python中使用内置数据类型。非常感谢。@TomMcMahon:但是,我认为如果您再次运行该函数,更改将不会持续。@elijaheac它在这里工作。我第一次运行该函数时,它会打印两条tweet(正如预期的那样),再次运行它时,它不会打印任何内容。再运行一次,它不会打印任何内容。
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