我正在寻找一种方法来阻止我的Twitter机器人HappyBot回复每个发布过它的用户,而不是回复自上次代码以来的新推文跑。例如,如果我在13:00发布机器人它将在13:00回复,但如果我在14:00再次发推文,它将回复13:00和14:00的推文。我目前运行的代码:
twts = api.search(q="@1happybot make me happy")
t = ['@1happybot make me happy',
'@1happybot Make me happy!',
'@1happybot make me happy.',
'Make me happy @1happybot',
'make me happy @1happybot']
for s in twts:
for i in t:
if i == s.text:
sn = s.user.screen_name
m = "@%s Don't worry, be happy!" % (sn)
s = api.update_status(m, s.id)
print ('yes')
任何解决方案,想法或跳出点都将不胜感激。希望一切都清楚。
答案 0 :(得分:0)
您使用的是哪个库?我最好的猜测是,无论你使用什么,都会暴露twitter返回的JSON响应。在这种情况下,您可以尝试检索推文的创建日期。见https://dev.twitter.com/rest/reference/get/search/tweets
s.created_at
那应该给你日期时间字符串。你的代码也可能更加pythonic。看看:
TRIGGERS = ('@1happybot make me happy',
'@1happybot Make me happy!',
'@1happybot make me happy.',
'Make me happy @1happybot',
'make me happy @1happybot')
for tweet in tweets:
if tweet.text in TRIGGERS:
sn = tweet.user.screen_name
status_msg = '@{} Don't worry, be happy!'.format(sn)
api.update_status(status_msg, s.id)
print ('yes')
命名事情很难,但我们应该尽量做到描述而不要过于冗长。变量名称应该传达他们的意图。在列表中使用"元素等约定"而不是循环遍历列表以查看元素是否在其中。在引用中保持一致。单引号用于您的字符串列表,但不在您设置的状态消息中。选择一个,坚持下去。
TRIGGERS的价值是否会发生变化?如果是这种情况,请使用像元组一样的非可变类型,并通过使用全部大写来传达保持静态的意图。很多小事。强烈建议您阅读 - > http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html
答案 1 :(得分:0)
我在这里提供的解决方案是快速的&脏,但它应该工作。基本上,它将您回复的最后一条推文的值存储在文本文件中,以确保代码停止时的持久性,并在调用代码时重新加载它。使用“自”选项,它只会查找比您已回复的推文更早的推文,因此它不会找到两次推文。
f = open("lastTweet.txt","r")
lastTweet = int(f.readline())
f.close()
twts = api.search("@1happybot make me happy since:"+str(lastTweet))
t = ['@1happybot make me happy',
'@1happybot Make me happy!',
'@1happybot make me happy.',
'Make me happy @1happybot',
'make me happy @1happybot']
for s in twts:
for i in t:
if i == s.text:
sn = s.user.screen_name
m = "@%s Don't worry, be happy!" % (sn)
s = api.update_status(m, s.id)
print ('yes')
if s.id > lastId:
lastId = s.id
f = open("lastTweet.txt","w")
f.write(lastId)
f.close()