Итак, я уже некоторое время работаю над 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