mentions_timeline中的since_ID返回最近的推文 - 不确定问题是否与Python或Twitter API有关

时间:2015-01-15 03:42:31

标签: python twitter tweepy

我是Python的新手,对于Twitter API来说是一个新手,并且不确定我在这里搞砸了哪些(这使得研究解决方案很难)。

我做了一个简单的twitter机器人查询mentions_timeline,并用一个预定的响应列表响应回复(对于表情符号提前抱歉)。问题在于,每次运行它都会响应所有最近的回复,无论它们是否已被回复。

我试图通过将机器人已回复的最新提及ID写入文件,并在下次运行脚本时将该值传递给mentions_timeline的since_ID来试图解决这个问题。据我了解,机器人应该只看到它没有响应的推文,而是看到最近的回复,包括它已经回复的那些。

在运行查询之前,无论是否将提及ID增加1,我都得到相同的结果 - 我想也许是因为_ID是包容性的,但它似乎没有区别。从本质上讲,since_ID似乎对查询返回的内容没有任何影响。

我不知道该怎么做 - 我不知道问题是我如何将值传递给Twitter API,或者我的代码中是否有错误。任何帮助将不胜感激!

这是有问题的剧本:

### find the last mention ID ###
fp=open("lastid.py","r")
last_id_replied = fp.read()

### increment by 1 (or not?!) ###
# last_id_replied = (int(last_id_replied) + 1)
# print(last_id_replied)   

### iterate through mentions ###
mentions = api.mentions_timeline(count=1, since_ID=last_id_replied)
print (mentions)
for mention in mentions:
  fp=open("lastid.py","w")
  fp.write(str(mention.id))

  ### choose a heart ###
  atheart = randrange(0,3)
  if atheart == 0:
    atheartprint = ''
  if atheart == 1:
    atheartprint = ''
  if atheart == 2:
    atheartprint = ''
  if atheart == 3:
    atheartprint = ''

  ### post the tweet ###
  sn = mention.user.screen_name
  m = ("@%s " + atheartprint) % (sn)
  s = api.update_status(m, mention.id)
  print(last_id_replied)
  fp=open("lastid.py","w")
  fp.write(str(mention.id))
  print("done messaging people!")  

1 个答案:

答案 0 :(得分:0)

我认为,通过完全改变用于获取推文的方法解决了这个问题 - 我已经使用光标代替迭代它们,它似乎正在工作。我不太明白为什么没有光标就行不通。

query = '@name'
max_tweets = 20
recent_mentions = [status for status in tweepy.Cursor(api.mentions_timeline, q=query, since_id=last_id_replied).items(max_tweets)]
print recent_mentions