2016-03-03 3 views
0

Я пытаюсь написать свой первый твиттер-бот, и то, что я специально хочу, это ответить, когда какой-то конкретный пользователь что-то твиттит. Вместо поиска каждого пользователя, который упоминает слово «taco», я хочу только искать, когда в небольшом списке людей упоминается «taco». Например, мой бот ищет только твиты от Боба и Сью, которые упоминают «taco», но не твиты от Фреда. Я не нахожу, что мне нужно.Twitter bot - Ответы для конкретных пользователей с помощью Tweepy

+0

Вы должны показать нам свой код. –

ответ

1

Из документации Tweepy вы, вероятно, должны использовать метод API.user_timeline, чтобы прочитать определенные твиты пользователей.

API.user_timeline ([идентификатор_пользователь/screen_name])

Возвращает 20 последних статусы, размещенных от аутентифицируются пользователя или пользователя, указанного.

Параметры:
user_id - Определяет идентификатор пользователя
screen_name - Задает имя экрана пользователя

1

Вы можете достичь этого через user timeline API конечной точки; однако, в зависимости от того, сколько терминов и пользователей вы хотите отслеживать, вам придется беспокоиться о ограничениях скорости (предельная скорость конечной точки пользовательской временной шкалы довольно высока, 300/app auth/15 mins, 150/user auth/15 mins = 450/15 мин), а также тот факт, что вам нужно будет вызвать конечную точку вручную через некоторый промежуток времени.

Другой способ сделать это - использовать конечную точку потокового API, в частности, user stream. Следуйте за каждым, на что хотите ответить, а затем создайте некоторые правила для определенных фраз. Как следовали за пользователями твиты, они должны переходить к конечной точке пользовательского потока. Вам просто нужно запустить прослушиватель с некоторой логикой для отслеживаемых пользователей/фраз.

track = { 
    'taco': ['Bob', 'Sue'], 
    'salsa': ['John', 'Steve'], 
    'guacamole': ['Mary', 'Fred'] 
} 

Вы бы подкласс Tweepy-х StreamListener:

class TacoListener(tweepy.StreamListener): 
    def on_status(self, status): 
     # Note, I rolled my own Twitter API wrapper, and just had a glance at the Tweepy docs, so some of this syntax might be incorrect, change it as required 
     # I think Tweepy has syntax like: status.text; I'll just refer to the fields as they appear in the Twitter JSON payload 
     for k, v in track.items(): 
      if k in status.get('text') and status.get('screen_name') in v: 
       tweet = "" 
       for name in v: 
        tweet += "@" + name 
       tweet += " are talking about " + k + "! Yum." 
       api.update_status(status=tweet) 
Смежные вопросы