Tweepy转推机器人不断循环播放

时间:2019-01-02 06:34:49

标签: python python-3.x twitter tweepy

所以我已经在Twitter机器人上工作了一段时间了,但我遇到了问题。每当我包含api.retweet()函数时,函数都会运行两次。要停止它,我要做的就是将其注释掉。每次运行两次,都会导致错误并杀死我的程序。

除安装程序外,我尝试尝试修复该部件,但仍会回复两次,并尝试两次喜欢它。我不明白为什么会这么做。如果我将其取出,它将完全修复。

我放置了打印标签以告诉我循环如何发生,然后它进入了on_data函数(由tweepy提供,以检查是否已接收到数据),然后进入我的{ {1}}(我的功能,用于检查数据中是否希望过滤出短语和标签),然后转到我的check_dataretweet函数。完成这些操作后,它将继续备份到我的like的末尾。如果没有转发,则到此结束。如果有一个,那么在结束之前再做一次。

Streamer类:

on_data

数据检查功能:

class LEDStreamListener(tweepy.StreamListener):
    def on_data(self, raw_data):
        # with open("tweets.json", "w") as write_file:
            # write_file.write(raw_data)
        print('at the top boi')

        data = json.loads(raw_data)
        usr = data['user']['screen_name']

        tweet_id = data['id']

        if len(data['entities']['hashtags']) != 0:
            tag = data['entities']['hashtags'][0]['text']

        else:
            tag = ''

        data_check(usr, tweet_id, tag, counter)

        print('here in on_data now')

转发功能:

def data_check(twitter_user, tweet, tag, count):
    print('Entering data_check')

    if tag == 'HUNTER_LED_OFF':
        requests.get('http://192.168.1.172/off')
        retweet_tweet(tweet)
        api.update_status('I turned the led off for you', tweet)
        print('off')
        return

    elif tag == 'HUNTER_LED_ON':
        requests.get('http://192.168.1.172/on')
        retweet_tweet(tweet)
        api.update_status('I turned the led on for you', tweet)
        print('on')
        return

    elif tag == 'led_test':
        retweet_tweet(tweet)
        api.update_status('Nice test bro *highfives* keep up the good work', tweet)
        print('tested')
        return

    elif twitter_user == 'realDonaldTrump':
        print('Make America Great Again!')
        return

    else:
        return

在已启用转发功能的情况下控制台输出接收到的信息

def retweet_tweet(tweet_id):
    try:
        print('re-tweeting')
        api.retweet(tweet_id)
        api.create_favorite(tweet_id)
        print('done re-tweeting')
    except tweepy.TweepError as e:
        print(e)

在retweet函数中没有retweet行的控制台日志

at the top boi

Entering data_check
re-tweeting
done re-tweeting
off
here in on_data now
at the top boi
Entering data_check
re-tweeting
[{'code': 327, 'message': 'You have already retweeted this Tweet.'}]
off(this is me editing this just says the state of the command it did to my robot)
here in on_data now

1 个答案:

答案 0 :(得分:0)

好吧,让我们首先说我对自己发火,并且现在还不以我的大脑说话。不知道我会原谅那个家伙。基本上,如果您遇到此错误,是因为当您基于它的标签对推文进行推文时,会在页面上发布带有标签的帖子。绊机器人去做事。要修复它,我只是设置了一个变量 text = data['text'] 然后在我的if语句中,我检查了现在存储在我刚刚创建的变量中的json文件的文本部分是否以“ RT”开头。通过说 if tag = '(your hashtag)' and not text.startswith('RT') 当我发现它们都是这样做的时候,我在查看json文件时注意到了。