Фильтрация данных Twitter с помощью Tweepy
Я использовал учебник Марко Бонзанини по добыче данных в Твиттере: https://marcobonzanini.com/2015/03/02/mining-twitter-data-with-python-part-1/
class MyListener(StreamListener):
def on_data(self, data):
try:
with open('python.json', 'a') as f:
f.write(data)
return True
except BaseException as e:
print("Error on_data: %s" % str(e))
return True
def on_error(self, status):
print(status)
return True
и использовал параметр "follow" метода filter для извлечения твитов, созданных этим конкретным идентификатором:
twitter_stream = Stream(auth, MyListener())
twitter_stream.filter(follow=["63728193"#random Twitter ID])
Однако он, похоже, не выполняет миссию, поскольку возвращает не только твиты и ретвиты, созданные идентификатором, но также каждый твит, в котором упоминается идентификатор (т. Е. Ретвиты). Это не то, что я хочу.
Я уверен, что должен быть способ сделать это, так как в файле json, предоставленном Twitter, есть поле "screen_name". В этом поле screen_name указывается имя создателя твита. Мне просто нужно найти способ фильтрации данных в этом поле screen_neame.
1 ответ
Такое поведение разработано. Чтобы процитировать документы по потоковому API Twitter:
Для каждого указанного пользователя поток будет содержать:
- Твиты созданные пользователем.
- Твиты, которые ретвитятся пользователем.
- Ответы на любой твит, созданный пользователем.
- Ретвиты любого твита, созданного пользователем.
- Ручные ответы, созданные без нажатия кнопки ответа (например, "@twitterapi I согласен").
Лучший способ обработать его для ваших целей - проверить, кто создал твит по мере его поступления, что, я думаю, можно сделать следующим образом:
class MyListener(StreamListener):
def on_data(self, data):
try:
if data._json['user']['id'] == "63728193":
with open('python.json', 'a') as f:
f.write(data)
except BaseException as e:
print("Error on_data: %s" % str(e))
return True
def on_error(self, status):
print(status)
return True