Доброе утро, читатель. В данном посте я хотел бы поделиться небольшим опытом работы с twitter API, а в частности с парсингом большого числа юзеров и получением информации о каждом пользователе(дата создания аккаунта, имя пользователя, screen_name, web страничка пользователя, количество твиттов, количесво друзей, количество фолловеров, местоположение). Это мой первый пост, поэтому прошу не судить строго, но и против конструктивной критики я тоже ничего не имею.
Задача: Имеется около 100 активных и глубокоуважаемых пользователей твиттера (T0). Для этих пользователей мне нужно было получить список друзей (T1) и для каждого пользователя получить персональные данные. Таким же способом получаем T2(T2 – друзья пользователей из Т1) и T3.
В результате мы имеем базу пользователей T = T0 + T1 + T2 + T3. Так как каждый пользователь твиттера имеет около 1286 друзей(статистика получена на основе данных около 80 миллионов аккаутов), то количество пользователей в каждой из групп растет очень быстро:
- T0: 100 пользователей
- Т1: ~ 42000 уникальных пользователей
- T2: ~ 5 200 000 уникальных пользователей
- T3: ~ 80 миллионов уникальных пользователей
При парсинге такого количества аккаунтов первая проблема с которой мы сталкиваемся – лимит запросов к API. Мы можем выполнить 150 запросов/ час, если мы неавторизованы и 350 запросов / час, если мы авторизованы. К тому же эти 150/350 запросов делятся на два 30 минутных интервала. То есть мы можем выполнить 75/175 запросов с каждого пользователя в 30 минут. Этого явно недостаточно для получения такого количесва данных. Для этого я использовал базу из около 3000 аккаунтов(ботов) из ботсети, которую я разрабатывал для этого же заказчика (если кому то будет это интересно могу в отдельном посте рассказать о функциональности ботсети и некоторых “подводных камнях”). То есть у меня был запас почти в 0,5 миллиона запросов в 30 минут и тут иже все упиралось в скорость обработки ответа API и записи данных в базу.
Для общения с API я не изобретал велосипедов и использовал широко известную в узких кругах библиотеку abraham oauth. Я лишь слегка модифицировал ее, чтобы она имела возможность использования multi_curl (мы помним, что нам надо сделать очень много запросов).
Для получения списка друзей пользователя использовался метод API friends/ids. Этот метод позволяет получить список ID друзей пользователя. Если количество друзей превышает 5000, результат разбивается на страницы(я получал максимум 5000 друзей для каждого пользователя и не делал дополнительные запросы, если их было больше 5к).
После того, как мы получили друзей всех пользователей, нам надо получить данные о каждом пользователе. Для этого используем замечательный метод users/lookup. Берем из базы ID пачками по 100 и парсим данные.
В итоге у мы получаем довольно большую базу данных пользователей. Далее приведены некоторые статистические данные:
- среднее количество твитов ~ 4317
- среднее количесво друзей ~ 1286
- среднее количество фолловеров ~ 35045
Автор: IoanSolo