Tweepy ретвит бот продолжает цикл - PullRequest
0 голосов
/ 02 января 2019

Итак, я уже некоторое время работаю над Twitter-ботом, и у меня возникла проблема с ним. Каждый раз, когда я включаю функцию api.retweet(), она запускает мою функцию дважды. Чтобы остановить все, что я должен сделать, это закомментировать. Каждый раз, когда он запускается дважды, это вызывает ошибку и убивает мою программу.

Я исправил эту часть с помощью попытки, за исключением настройки, но она все равно отвечает дважды, и она мне нравится дважды. Я не понимаю, почему он это сделал. Если я вытащу это, это исправит это полностью.

Я помещаю теги печати, чтобы сообщить мне, как происходит цикл, и он входит в функцию on_data ( Предоставляется tweepy для проверки, были ли получены данные ), затем он входит в мой check_data ( Моя функция для проверки данных на наличие фраз и тегов, которые я хочу отфильтровать ), затем она переходит к моим функциям retweet и like. После того, как он делает это, он продолжает обратно до конца моего 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)

Вывод на консоль полученного твита с включенными ретвитами

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

Журнал консоли без строки ретвита в функции ретвита

at the top boi
Entering data_check
re-tweeting
done re-tweeting
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 голосов
/ 02 января 2019

Хорошо, так что давайте начнем с того, что я злюсь на себя, и в настоящее время не разговариваю со своим мозгом за это.Не уверен, что когда-нибудь прощу парня.В основном, если вы столкнетесь с этой ошибкой, потому что, когда вы чирикаете твит на основе хештега, вы делаете пост на своей странице с хештегом.Подножка бота, чтобы делать вещи.Чтобы исправить это, я просто установил переменную text = data['text']. Затем в своих инструкциях if я проверил, начинается ли текстовая часть моего файла json, которая сейчас хранится в только что созданной переменной, с «RT».Сказав if tag = '(your hashtag)' and not text.startswith('RT'), я заметил, просматривая файлы json, после того, как понял, что они все это делают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...