Tweepy поток игнорирует некоторые учетные записи Twitter - PullRequest
0 голосов
/ 20 января 2019

Я работаю над последними штрихами в своем твиттер-боте для моего светодиода.Я тестировал его с разными аккаунтами, и происходит нечто странное.Со своим личным аккаунтом я чирикаю, а он ничего не делает.Мой фильтр не обнаруживает хэштеги и просто игнорирует все.Мои друзья смогли использовать его, поэтому я решил войти в отдельную учетную запись Twitter.Я могу твитнуть там, и мой бот видит это и распознает.

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

import tweepy
import requests
import json

consumer_key = 'nein'
consumer_secret = 'das'
access_token = 'ist'
access_token_secret = 'böse'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth, wait_on_rate_limit=True)

user = api.me()
print(user.name)

counter = 0


class LEDStreamListener(tweepy.StreamListener):
    def on_data(self, raw_data):
        with open("tweets.json", "w") as write_file:
            write_file.write(raw_data)
        data = json.loads(raw_data)

        variable_checker(data)


    def on_error(self, status_code):
        if status_code == 420:
            print('Stream disconnect, because of rate limit error')
            return False
        else:
        print('Unknown Error ' + status_code)
        return False


def retweet_tweet(tweet_id):
    api.retweet(tweet_id)
    api.create_favorite(tweet_id)


def tag_checker(tag_list):
    for i in range(0, len(tag_list)):
        iterated_tag = tag_list[i]['text']
        if iterated_tag == 'HUNTER_LED_ON':
            return iterated_tag

        elif iterated_tag == 'HUNTER_LED_OFF':
            return iterated_tag

        elif iterated_tag == 'led_test':
            return iterated_tag

    return ' '


def variable_checker(json_file):
    if 'delete' in json_file:
        # If the tweet was deleted do nothing
        print('Delete')

    else:
        usr = json_file['user']['screen_name']

        tweet_id = json_file['id_str']
        print(tweet_id)

        text = json_file['text']

        tag_list = json_file['entities']['hashtags']

        tag = tag_checker(tag_list)

        data_check(usr, tweet_id, tag, text)


def data_check(twitter_user, tweet, tag, text):
    if tag == 'HUNTER_LED_OFF' and not text.startswith('RT'):
        requests.get('http://192.168.1.175/off')
        retweet_tweet(tweet)
        api.update_status('I turned the led off for you', tweet)
        print('off')
        return

    elif tag == 'HUNTER_LED_ON' and not text.startswith('RT'):
        requests.get('http://192.168.1.175/on')
        retweet_tweet(tweet)
        api.update_status('I turned the led on for you', tweet)
        print('on')
        return

    elif tag == 'led_test' and not text.startswith('RT'):
        retweet_tweet(tweet)
        reply = 'Nice test bro *highfives* keep up the good work'
        api.update_status('@%s %s' % (twitter_user, reply), in_reply_to_status_id=tweet)
        print('tested')
        return

    elif twitter_user == 'realDonaldTrump':
        api.create_favorite(tweet)
        requests.get('http://192.168.1.175/trump')
        print('Make America Great Again!')
        return

    else:
        return


ledStreamListener = LEDStreamListener()
ledStream = tweepy.Stream(auth=api.auth, listener=ledStreamListener)


ledStream.filter(track=['#HUNTER_LED_OFF', '#HUNTER_LED_ON', '#led_test'])

1 Ответ

0 голосов
/ 20 января 2019

Это может иметь какое-то отношение к Твиттеру, только делая доступным около 1% твитов для потоковой передачи большинству пользователей. Твиттер предлагает учетную запись «Firehose», которая дает вам все, но это довольно дорого.

Вы можете опрашивать временную шкалу пользователей каждые несколько секунд, а не использовать потоковый API.

new_tweets = api.user_timeline(user_id = user_id,count= 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...