Автор оригинала: 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 поиска и потоковой передачи, кратко описали процесс сбора твитов и некоторые возможные идеи, которые они могли бы извлечь. Не стесняйтесь создавать их сами!
Рекомендации
- ” Наука о данных с нуля ” Джоэл Грас (книга)
- Twitter API – документация
geopy
библиотека – Веб-страница Pypipgplot
библиотека – проект GitHub