Python在for bot循环中保存状态

时间:2012-01-21 01:04:55

标签: python twitter

我正在使用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      

最后所需的行为是循环只打印以前没有打印过的推文。

2 个答案:

答案 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