【问题标题】:Python save state in a for loop for a twitter botPython 在 for 循环中为 twitter 机器人保存状态
【发布时间】:2012-12-30 23:50:05
【问题描述】:

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

我的问题是防止重复。我有一个循环,通过检查它的 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      

最后期望的行为是让循环只打印以前没有打印过的推文。

【问题讨论】:

    标签: python twitter


    【解决方案1】:

    我对 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 的原因是更改会影响主变量 see_ids,而不是函数内部的副本。 祝你好运!

    【讨论】:

      【解决方案2】:

      我只想列出已打印的 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      
      

      【讨论】:

      • 完美运行。我有更多的数据库背景,但我对在 python 中使用内置数据类型不是很熟悉。非常感谢。
      • @TomMcMahon:但是,我认为如果您再次运行该函数,更改将不会持续。
      • @elijaheac 它在这里工作。我第一次运行这个函数,它打印了两条推文(如预期的那样),再次运行它,它什么也没打印。再次运行它,它什么也没打印。
      猜你喜欢
      • 2015-05-11
      • 2020-12-29
      • 2021-07-28
      • 2022-01-16
      • 2019-09-25
      • 2016-03-15
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多