我是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!")
答案 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