Сохранение состояния Python в цикле for для Twitter-бота - PullRequest
1 голос
/ 21 января 2012

Я пишу бота в твиттере, используя tweepy, который будет искать упоминания в нем, а затем реализовывать действия, основанные на тексте в твите. В конце концов я хочу запускать его каждые несколько минут через cron. Я начинающий питон, так что прости мое невежество.

Моя проблема - предотвращение дубликатов. У меня есть цикл, который проходит и проверяет, является ли твит новым, проверяя, больше ли его идентификатор, чем предыдущий твит. Однако я не могу найти способ инициализации этой переменной, а затем сохранить изменения в ней в конце цикла.

Вот мой текущий (неработающий) код:

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 ]

2 голосов
/ 21 января 2012

Я мало что знаю о 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

Итак, он будет искать в Твиттере все твиты, нацеленные на него, а затем проверит, видел ли он этот идентификатор.до.Я использовал global по той причине, что изменения повлияют на основную переменную seen_ids, а не на копию, сделанную внутри функции.Удачи!

1 голос
/ 21 января 2012

Я бы просто сделал список идентификаторов, которые были напечатаны. Затем вы просто проверите, есть ли идентификатор, который вы пытаетесь распечатать, уже в списке для печати. Если это так, ничего не делать. Если это не так, распечатайте его и добавьте в список.

Другими словами:

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      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...