Tweepy медленно для больших аккаунтов в твиттере - PullRequest
1 голос
/ 16 февраля 2020

Я делаю твиттер-монитор с tweepy, где каждую секунду он получает 2 последних твита из учетной записи через user_timeline (user, count = 2), и, если они новые твиты, он отправляет уведомление о разногласиях.

Все это прекрасно работало с такой маленькой учетной записью, как моя, где у меня всего пара твитов. Задержка всего 0,5 секунды с момента создания твита. Сейчас я тестирую с большими аккаунтами, например, с общим количеством созданных 1000 твитов. Теперь задержка составляет всего 2 секунды и до 30 секунд.

Знаете ли вы, почему это может быть? Есть ли какой-то другой, более эффективный способ решения этой же задачи? Сначала я подумал, что это потому, что по умолчанию он загружает последние 200 твитов, но я изменил это, добавив «count = 2» в функцию user_timeline, и задержка все та же.

PD: я использую приложение только аутентификация и это часть моего кода:

async def monitor_user(self, api, username, last_updated):
    data = []

    try:
        fut = self.client.loop.run_in_executor(
            None, lambda: api.user_timeline(username, count=2)
        )
        await fut
        tweets = fut.result()

1 Ответ

0 голосов
/ 25 февраля 2020

Вы должны использовать конечную точку потоковой передачи:
http://docs.tweepy.org/en/latest/streaming_how_to.html

С этим вы можете следить за 5000 пользователями Twitter, отслеживать 400 ключевых слов и реализовывать 25 блоков местоположения:
https://developer.twitter.com/en/docs/tweets/filter-realtime/api-reference/post-statuses-filter

Новый статус, который публикуется, появляется менее чем за 2 секунды, и это намного быстрее, чем запрашивать отдельные учетные записи Twitter. Ограничение скорости для конечной точки user_timeline составляет 180 запросов на каждые 15 минут. Это означает, что чем больше людей вы хотите отслеживать, тем реже вам разрешается проверять, что означает значительную задержку.

Недостатком конечной точки потоковой передачи является то, что она будет показывать только недавно опубликованные статусы.

...