Tweepy twitter bot回复了新的请求

时间:2016-08-19 16:15:39

标签: python twitter tweepy

我正在寻找一种方法来阻止我的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')

任何解决方案,想法或跳出点都将不胜感激。希望一切都清楚。

2 个答案:

答案 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()