Python在twitter机器人的for循环中保存状态

Python在twitter机器人的for循环中保存状态,python,twitter,Python,Twitter,我正在使用tweepy编写一个twitter机器人,它将搜索对它的提及,然后根据tweet中的文本执行操作。最终我想通过cron每隔几分钟运行一次。我是python初学者,请原谅我的无知 我的问题是防止重复。我有一个循环,通过检查一条tweet的id是否大于前一条tweet来测试它是否是新的。但是,我无法找到一种方法来初始化这个变量,然后在循环结束时保存对它的更改 以下是我当前(已损坏)的代码: 最后,循环需要的行为是只打印以前没有打印过的tweet。我只需要列出已打印的ID。然后,您只需检查您

我正在使用tweepy编写一个twitter机器人,它将搜索对它的提及,然后根据tweet中的文本执行操作。最终我想通过cron每隔几分钟运行一次。我是python初学者,请原谅我的无知

我的问题是防止重复。我有一个循环,通过检查一条tweet的id是否大于前一条tweet来测试它是否是新的。但是,我无法找到一种方法来初始化这个变量,然后在循环结束时保存对它的更改

以下是我当前(已损坏)的代码:


最后,循环需要的行为是只打印以前没有打印过的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