Рубрики
Без рубрики

Доступ к API Twitter с помощью Python

Автор оригинала: Mihajlo Pavloski.

Вступление

Одна вещь, которая нравится разработчикам Python, – это, безусловно, огромное количество ресурсов, разработанных его большим сообществом. Интерфейсы прикладного программирования (API), построенные на Python, являются обычным явлением для веб-сайтов. Трудно представить, что какой-либо популярный веб-сервис не создал бы библиотеку API Python для облегчения доступа к своим сервисам. Несколько идей таких API для некоторых из самых популярных веб-сервисов можно найти здесь . На самом деле, “Python wrapper” – более правильный термин, чем “Python API”, потому что веб-API обычно предоставляет общий интерфейс прикладного программирования, в то время как библиотеки конкретных языков программирования создают код, чтобы “обернуть” его в простые в использовании функции. В любом случае, мы будем использовать оба термина взаимозаменяемо на протяжении всей этой статьи.

В этом блоге мы сосредоточимся на Twitter API , покажем, как настройка ваших учетных данных идет с Twitter, и сравним несколько оболочек Python на основе вовлеченности сообщества. Затем мы покажем несколько примеров использования API Twitter для поиска твитов и создания потока твитов в реальном времени на определенную тему. Наконец, мы рассмотрим сохраненные данные.

Обзор API Twitter

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

  • Твиты: поиск, публикация, фильтрация, вовлечение, потоковая передача и т. Д.
  • Реклама: управление кампаниями и аудиторией, аналитика.
  • Прямые сообщения (все еще в бета-версии): отправка и получение, прямые ответы, приветственные сообщения и т. Д.
  • Учетные записи и пользователи (бета-версия): управление учетными записями, взаимодействие с пользователями.
  • Медиа: загрузка и доступ к фотографиям, видео и анимированным GIF-файлам.
  • Тренды: трендовые темы в данном месте.
  • Гео: информация об известных местах или местах рядом с местоположением.

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

Получение учетных данных

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

  • Посетите страницу Управления приложениями по адресу https://apps.twitter.com/ , и войдите в свой аккаунт Twitter
  • Нажмите на кнопку “Создать новое приложение”, заполните необходимые данные и согласуйте Условия предоставления услуг
  • Перейдите в раздел “Ключи и токены доступа” и запишите свой потребительский ключ и секрет
  • В том же разделе нажмите на кнопку “Создать мой токен доступа” .
  • Обратите внимание на свой Токен доступа и Секрет токена доступа

И это все. Потребительский ключ/секрет используется для аутентификации приложения, использующего Twitter API, в то время как маркер доступа/секрет аутентифицирует пользователя. Все эти параметры должны рассматриваться как пароли и не должны включаться в ваш код в виде обычного текста. Один из подходящих способов-сохранить их в JSON-файле” twitter_credentials.json ” и при необходимости загрузить эти значения из вашего кода.

import json

# Enter your keys/secrets as strings in the following fields
credentials = {}
credentials['CONSUMER_KEY'] = ...
credentials['CONSUMER_SECRET'] = ...
credentials['ACCESS_TOKEN'] = ...
credentials['ACCESS_SECRET'] = ...

# Save the credentials object to file
with open("twitter_credentials.json", "w") as file:
    json.dump(credentials, file)

Обертки Python

Python-один из языков программирования с наибольшим количеством разработанных оболочек для Twitter API. Поэтому трудно сравнивать их, если вы не использовали каждый из них в течение некоторого времени. Возможно, хороший способ выбрать правильный инструмент-это покопаться в их документации и посмотреть, какие возможности они предлагают и как они вписываются в специфику вашего приложения. В этой части мы сравним различные оболочки API, используя участие сообщества Python в их проектах GitHub. Несколько подходящих показателей для сравнения: количество участников , количество полученных звезд , количество наблюдателей , зрелость библиотеки за период времени с момента первого выпуска и т. Д.

Таблица 1 : Библиотеки Python для Twitter API упорядочены по количеству полученных звезд.

Библиотека # участники # звезды # наблюдатели Зрелость
твипи 135 4732 249 ~ 8,5 лет
Инструменты Python Twitter 60 2057 158 ~ 7 лет
python-twitter 109 2009 148 ~ 5 лет
твайтон 73 1461 100 NA
Twitter API 15 424 49 ~ 4,5 года
Поиск в Твиттере 8 241 29 ~ 4,5 года

В приведенной выше таблице перечислены некоторые из наиболее популярных библиотек Python для API Twitter. Теперь давайте используем один из них для поиска по твитам, получения некоторых данных и изучения.

Примеры Twython

Мы выбрали библиотеку twython из – за ее разнообразных функций, связанных с различными API Twitter, ее зрелости-хотя нет никакой информации, когда был опубликован ее первый релиз, есть информация, что версия 2.6.0 появилась около 5 лет назад, и ее поддержка потоковых твитов. В нашем первом примере мы будем использовать Search API для поиска твитов, содержащих строку “learn python”, а позже мы покажем более реалистичный пример с использованием Streaming API Twitter .

API поиска

В этом примере мы создадим запрос для поискового API с ключевым словом поиска “learn python”, который вернет самые популярные публичные твиты за последние 7 дней. Обратите внимание, что поскольку наше ключевое слово состоит из двух слов, “learn” и “python”, они оба должны появляться в тексте твита, и не обязательно в виде непрерывной фразы. Во-первых, давайте установим библиотеку. Самый простой способ-использовать pip , но другие параметры также перечислены в installation docs .

$ pip install twython

На следующем шаге мы импортируем класс Twython, создадим его экземпляр и создадим наш поисковый запрос. Мы будем использовать только четыре аргумента в запросе: q , result_type , count и lang соответственно для ключевого слова поиска, типа, количества и языка результатов. Twitter также определяет другие аргументы для тонкой настройки поискового запроса, которые можно найти здесь .

# Import the Twython class
from twython import Twython
import json

# Load credentials from json file
with open("twitter_credentials.json", "r") as file:
    creds = json.load(file)

# Instantiate an object
python_tweets = Twython(creds['CONSUMER_KEY'], creds['CONSUMER_SECRET'])

# Create our query
query = {'q': 'learn python',
        'result_type': 'popular',
        'count': 10,
        'lang': 'en',
        }

Наконец, мы можем использовать наш объект Twython для вызова метода search , который возвращает словарь search_metadata и statuses – запрошенных результатов. Мы рассмотрим только часть statuses и сохраним часть всей информации в pandas dataframe, чтобы представить ее в виде таблицы.

import pandas as pd

# Search tweets
dict_ = {'user': [], 'date': [], 'text': [], 'favorite_count': []}
for status in python_tweets.search(**query)['statuses']:
    dict_['user'].append(status['user']['screen_name'])
    dict_['date'].append(status['created_at'])
    dict_['text'].append(status['text'])
    dict_['favorite_count'].append(status['favorite_count'])

# Structure data in a pandas DataFrame for easier manipulation
df = pd.DataFrame(dict_)
df.sort_values(by='favorite_count', inplace=True, ascending=False)
df.head(5)
Пт Янв 12 21:50:03 +0000 2018 2017 год был Годом Питона. Мы отправились в леа… Codecademy 1 137
Пн Янв 08 23:01:40 +0000 2018 Пошаговое руководство по изучению #Python для #Data… Киркдборн 3 137
Пн Янв 08 11:13:02 +0000 2018 Resetter-это новый инструмент, написанный на Python и p… linux foundation 4 109
Сб 06 января 16:30:06 +0000 2018 Мы с гордостью сообщаем, что на этой неделе у нас есть… DataCamp 8 96
Вс 07 января 19:00:36 +0000 2018 Изучите программирование на Python с помощью Python by… скромный 2 94

Итак, мы получили несколько интересных твитов. Обратите внимание, что это самые популярные твиты, содержащие слова “learn” и “python” за последние 7 дней. Чтобы изучить данные в истории, вам нужно будет приобрести Премиальный или корпоративный план API поиска.

Потоковое API

В то время как предыдущий пример показал одноразовый поиск, более интересным случаем было бы собрать поток твитов. Это делается с помощью Twitter Streaming API , и у Twython есть простой способ сделать это через класс TwythonStreamer . Нам нужно будет определить класс My Streamer , который наследует TwythonStreamer , а затем переопределить методы on_success и on_error следующим образом.

Метод on_success вызывается автоматически, когда Twitter отправляет нам данные, а метод on_error – всякий раз, когда возникает проблема с API (чаще всего из-за ограничений API Twitter). Добавленный метод save_to_csv является полезным способом хранения твитов в файл.

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

from twython import TwythonStreamer
import csv

# Filter out unwanted data
def process_tweet(tweet):
    d = {}
    d['hashtags'] = [hashtag['text'] for hashtag in tweet['entities']['hashtags']]
    d['text'] = tweet['text']
    d['user'] = tweet['user']['screen_name']
    d['user_loc'] = tweet['user']['location']
    return d
    
    
# Create a class that inherits TwythonStreamer
class MyStreamer(TwythonStreamer):     

    # Received data
    def on_success(self, data):

        # Only collect tweets in English
        if data['lang'] == 'en':
            tweet_data = process_tweet(data)
            self.save_to_csv(tweet_data)

    # Problem with the API
    def on_error(self, status_code, data):
        print(status_code, data)
        self.disconnect()
        
    # Save each tweet to csv file
    def save_to_csv(self, tweet):
        with open(r'saved_tweets.csv', 'a') as file:
            writer = csv.writer(file)
            writer.writerow(list(tweet.values()))

Следующее, что нужно сделать, – это создать экземпляр объекта класса MyStreamer с вашими учетными данными, переданными в качестве аргументов, и мы будем использовать метод filter для сбора только тех твитов, которые нас интересуют. Мы создадим наш фильтр с аргументом track , который предоставляет ключевые слова фильтра, в нашем случае “python”. Помимо аргумента track , есть еще больше возможностей для тонкой настройки фильтра, перечисленных в basic streaming parameters , таких как: сбор твитов от выбранных пользователей, языков, местоположений и т. Д. Платные версии потокового API обеспечат гораздо больше возможностей фильтрации.

# Instantiate from our streaming class
stream = MyStreamer(creds['CONSUMER_KEY'], creds['CONSUMER_SECRET'], 
                    creds['ACCESS_TOKEN'], creds['ACCESS_SECRET'])
# Start the stream
stream.statuses.filter(track='python')

С помощью приведенного выше кода мы собрали данные примерно для 10 000 твитов, содержащих ключевое слово “python”. В следующей части мы проведем краткий анализ включенных хэштегов и местоположений пользователей.

Краткий Анализ Данных

API Twitter-это мощная вещь, очень подходящая для изучения общественного мнения, анализа рынка, быстрого доступа к новостям и других вариантов использования, которые может поддержать ваше творчество. Обычно, после того как вы тщательно собрали свои твиты, нужно проанализировать данные, где анализ настроений играет решающую роль в систематическом извлечении субъективной информации из текста. Во всяком случае, анализ настроений-это огромное поле для рассмотрения в небольшой части сообщения в блоге, поэтому в этой части мы сделаем только некоторый базовый анализ данных относительно местоположения и хэштегов, используемых людьми, пишущими в твиттере “python”.

Обратите внимание, что смысл этих примеров состоит только в том, чтобы показать, для чего могут быть использованы данные Twitter API – наша небольшая выборка твитов не должна использоваться для вывода выводов, потому что она не является хорошим представителем всей совокупности твитов, а время ее сбора не было независимым и однородным.

Сначала давайте импортируем наши данные из файла “saved_tweets.csv” и распечатаем несколько строк.

import pandas as pd
tweets = pd.read_csv("saved_tweets.csv")
tweets.head()
RT @frenchresolution: Присоединяйтесь к нам ЗАВТРА с @OC… браунпау [‘IBM’] бабушка 0
pylocus 1.0.1: Пакет локализации https://t…. pypi_updates 2 [] бабушка 1
humilis-push-процессор 0.0.10: Humilis push ev… pypi_updates 2 [] бабушка 2
#Python Digest вышел! https://t.co/LEmyR3yDMh… хорствильмс [‘Python’, ‘python’, ‘postgresql’] Цюрих 3
RT @kdnuggets: Руководство для начинающих по #NeuralNet… джодегас [‘[‘Нейронные сети’, ‘Python’, ‘KDN’] Аквила, ИТАЛИЯ 4

Каковы наиболее распространенные хэштеги, которые идут с нашим ключевым словом “python”? Поскольку все данные в нашем фрейме данных представлены в виде строк, включая скобки в столбце hashtags , чтобы получить список хэштегов, нам нужно перейти от списка строк к списку списков, к списку хэштегов. Затем мы используем класс Counter для подсчета записей хэштегов в нашем списке и распечатаем отсортированный список из 20 наиболее распространенных хэштегов.

from collections import Counter
import ast

tweets = pd.read_csv("saved_tweets.csv")

# Extract hashtags and put them in a list
list_hashtag_strings = [entry for entry in tweets.hashtags]
list_hashtag_lists = ast.literal_eval(','.join(list_hashtag_strings))
hashtag_list = [ht.lower() for list_ in list_hashtag_lists for ht in list_]

# Count most common hashtags
counter_hashtags = Counter(hashtag_list)
counter_hashtags.most_common(20)
[('python', 1337),
 ('datascience', 218),
 ('bigdata', 140),
 ('machinelearning', 128),
 ('deeplearning', 107),
 ('django', 93),
 ('java', 76),
 ('ai', 76),
 ('coding', 68),
 ('100daysofcode', 65),
 ('javascript', 64),
 ('iot', 58),
 ('rstats', 52),
 ('business', 52),
 ('tech', 48),
 ('ruby', 45),
 ('programming', 43),
 ('cybersecurity', 43),
 ('angularjs', 41),
 ('pythonbot_', 41)]

Затем мы можем использовать местоположение пользователя, чтобы ответить – какие области мира больше всего чирикают о “питоне”? Для этого шага мы будем использовать метод geocode библиотеки geopy , который возвращает координаты заданного входного местоположения. Чтобы визуализировать мировую тепловую карту твитов, мы воспользуемся библиотекой pgplot . Напоминаю: наши небольшие данные не являются реальным представителем мира.

from geopy.geocoders import Nominatim
import gmplot

geolocator = Nominatim()

# Go through all tweets and add locations to 'coordinates' dictionary
coordinates = {'latitude': [], 'longitude': []}
for count, user_loc in enumerate(tweets.location):
    try:
        location = geolocator.geocode(user_loc)
        
        # If coordinates are found for location
        if location:
            coordinates['latitude'].append(location.latitude)
            coordinates['longitude'].append(location.longitude)
            
    # If too many connection requests
    except:
        pass
    
# Instantiate and center a GoogleMapPlotter object to show our map
gmap = gmplot.GoogleMapPlotter(30, 0, 3)

# Insert points on the map passing a list of latitudes and longitudes
gmap.heatmap(coordinates['latitude'], coordinates['longitude'], radius=20)

# Save the map to html file
gmap.draw("python_heatmap.html")

Приведенный выше код создал тепловую карту на следующем рисунке, показывающую более высокую активность в твитах “python” в США, Великобритании, Нигерии и Индии. Одним из недостатков описанного подхода является то, что мы не делали никакой очистки данных; оказалось, что многие машинно сгенерированные твиты поступают из одного места или из нескольких мест, производящих один и тот же твит. Конечно, эти образцы следует отбросить, чтобы получить более реалистичную картину географического распределения людей, чирикающих “питоном”. Вторым улучшением было бы просто собирать больше данных в течение более длительных и непрерывных периодов.

Тепловая карта твита

Ресурсы

Хотите узнать больше об использовании Python для доступа к API Twitter? Попробуйте проверить курс, например, для более глубокого погружения в использование Twitter API для проектов Data science с Python.

Выводы

В этом блоге мы представили довольно скромную часть API Twitter. В целом Twitter-это очень мощный инструмент для понимания общественного мнения, проведения исследований и анализа рынка, и поэтому его API-интерфейсы являются отличным способом для компаний создавать автоматизированные инструменты для получения информации, связанной с их сферой деятельности. Не только компании, но и частные лица могут также использовать API для создания творческих приложений.

Мы также перечислили несколько самых популярных оболочек Python, но важно отметить, что разные оболочки реализуют разные возможности API Twitter. Поэтому следует выбирать оболочку Python в соответствии с ее назначением. Два примера, которые мы показали с помощью API поиска и потоковой передачи, кратко описали процесс сбора твитов и некоторые возможные идеи, которые они могли бы извлечь. Не стесняйтесь создавать их сами!

Рекомендации