Извлекайте медиа-информацию из аккаунтов Twitter, используя всего несколько строк кода.

Вступление

Популярная социальная сеть Twitter содержит огромное количество информации. Текст из отдельных твитов не только помогает в добыче социальной информации, но и изображения и видео, содержащиеся в твитах и ​​ретвитах, также дают представление о контенте, который учетная запись обычно просматривает или публикует в Интернете.

У меня был друг попросил меня дать ему сценарий, который будет загружать все твиты, изображения и видео для любой учетной записи. Он был особенно заинтересован в получении изображений и видео, которые пользователь аккаунта разместил в Твиттере на своей временной шкале. Поскольку Python был моим любимым языком, я решил написать небольшой служебный скрипт, который будет загружать медиафайлы из временных шкал Twitter.

Как и в случае с Python, здесь есть библиотека для жизни, вселенной и всего остального. Я шучу насчет вселенной и всего остального. В любом случае, в сегодняшней статье я собираюсь показать вам, как легко вы можете придумать что-то, что очищает временные рамки Twitter примерно в 100 строках кода. Мы собираемся использовать замечательную библиотеку Python под названием Tweepy.

Перво-наперво запустите терминал и установите следующее, если вы еще этого не сделали:

pip install tweepy

Получение твитов из пользовательской хронологии

Справочник по API и документацию для Twitter можно найти по адресу https://developer.twitter.com/en/docs/api-reference-index. Нас особенно интересует конечная точка пользовательской шкалы времени.

GET statuses/user_timeline

Как упоминалось в документации, это возвращает коллекцию самых последних твитов, опубликованных пользователем , указанными параметрами screen_name или user_id.

Пользовательские временные шкалы, принадлежащие защищенным пользователям, могут быть запрошены только в том случае, если аутентифицированный пользователь либо «владеет» временной шкалой, либо является утвержденным последователем владельца.

Возвращенная временная шкала эквивалентна профилю пользователя в Twitter.

Этот метод может возвращать не более 3200 последних твитов пользователя. Собственные ретвиты других статусов пользователя включаются в это общее количество, независимо от того, установлено ли для include_rts значение false при запросе этого ресурса.

Чтобы выполнять аутентифицированные запросы к этой конечной точке API, необходимо создать новое приложение Twitter, перейдя по адресу https://dev.twitter.com/apps/new.

После создания вы можете перейти на вкладку Ключи API, и там вы найдете записи ключа потребителя и секрета потребителя. Обязательно скопируйте их. Создайте файл с именем .twitter.json и поместите его в свой домашний каталог.

Сначала нам нужно убедиться, что наш сценарий может использовать эти ключи и создать аутентифицированного клиента. Это можно сделать следующим образом:

from tweepy import OAuthHandler
auth = OAuthHandler(consumer_key, consumer_secret)
api = tweepy.API(auth)

Объект API - это то, что будет использоваться для доступа к временной шкале пользователя.

Пагинация

Хорошие ребята из Twitter включили разбиение на страницы в свои API. Если вы не знаете, что такое разбиение на страницы, в основном это то, как API отвечают фрагментами данных вместо того, чтобы отправлять весь ответ за один раз. Это предотвращает отправку чрезвычайно больших объемов данных по сети.

Чтобы выполнить разбиение на страницы, мы должны предоставить параметр страницы / курсора с каждым нашим запросом. Проблема здесь в том, что для управления циклом разбивки на страницы требуется много шаблонного кода. Чтобы упростить разбиение на страницы и потребовать меньше кода, в Tweepy есть объект Cursor. Вы используете это так:

for status tweepy.Cursor(api.user_timeline).items(num_items):
    # process status here
    process_status(status)

Если num_items не передан, по умолчанию Twitter будет возвращать курсор на 3200 твитов.

Милая! Теперь давайте воспользуемся объектом Cursor в нашем коде.

Получение изображений и видео

Мы заинтересованы в том, чтобы анализировать каждый твит, проверять, есть ли в нем изображения и видео, а затем загружать эти артефакты. Медиа-объект, связанный с твитом, присутствует во вложенном атрибуте extended_entities.

Чтобы получить доступ к URL-адресу изображения или видео, мы сначала проверяем, присутствует ли атрибут extended_entities в твите. Если да, то мы перебираем записи, соответствующие атрибуту media в объекте extended_entities. Мы проверяем, является ли тип каждого медиа-объекта media_url, video или animated_gif, что сигнализирует о том, что это изображение или видео, соответственно. Мы храним каждый URL в отдельных списках.

Метод process_tweet - это то место, где мы определяем нашу логику для извлечения URL-адресов изображений и видео.

Теперь, когда у вас есть два списка, один для видео и один для изображений, вы можете легко использовать что-то вроде библиотеки wget Python, чтобы загрузить их на диск.

Заманчиво использовать многопоточность для распараллеливания задачи загрузки URL-адресов мультимедиа, поскольку это в основном дисковый ввод-вывод с небольшими накладными расходами ЦП.

Полный код можно найти на GitHub.