Pull to refresh

Используем Twitter API для получения «дерева» пользователей

Reading time2 min
Views7.4K
Доброе утро, хабраюзер. В данном посте я хотел бы поделиться небольшим опытом работы с 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
Tags:
Hubs:
-5
Comments8

Articles

Change theme settings