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

Введение Одна вещь, которая нравится разработчикам Python, - это огромное количество ресурсов, разработанных его большим сообществом. Интерфейсы программирования приложений (API), созданные на Python, - обычное дело для веб-сайтов. Трудно представить, что какой-либо популярный веб-сервис не создал бы библиотеку Python API для облегчения доступа к своим сервисам. Несколько идей таких API для некоторых из самых популярных веб-сервисов можно найти здесь [http://www.pythonforbeginners.com/api/list-of-python-apis]. В фа

Вступление

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

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

Обзор 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 лет Twython 73 1461 100 NA TwitterAPI 15 424 49 ~ 4,5 года TwitterПоиск 8 241 29 ~ 4,5 года


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

Примеры Twython

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

API поиска

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

 $ pip install twython 

На следующем шаге мы импортируем класс Twython, создадим его объект и создадим наш поисковый запрос. Мы будем использовать только четыре аргумента в запросе: q , result_type , count и lang соответственно для ключевого слова поиска, типа, count и языка результатов. 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 , чтобы представить ее в таблице.

 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) 
  Дата                            избранное_count   текст                                                            Пользователь

1 Пт 12 янв 21:50:03 +0000 2018 137 2017 год был годом Python. Мы собирались уехать ... Codecademy 3 Пн 08 янв 23:01:40 +0000 2018 137 Пошаговое руководство по изучению #Python для #DataS ... KirkDBorne 4 Пн 08 янв 11:13:02 +0000 2018 109 Resetter - это новый инструмент, написанный на Python и п ... linuxfoundation 8 Сб 06 янв 16:30:06 +0000 2018 96 Мы с гордостью сообщаем, что на этой неделе у нас ... DataCamp 2 Вс 07 янв 19:00:36 +0000 2018 94 Изучите программирование на Python с помощью Python ... скромный

Итак, мы получили несколько интересных твитов. Обратите внимание, что это самые популярные твиты, содержащие слова «учиться» и «питон» за последние 7 дней. Чтобы просмотреть данные в истории, вам необходимо приобрести план Search API Premium или Enterprise.

Потоковый API

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

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

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

 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 который предоставляет ключевые слова фильтра, в нашем случае "питон". Помимо track , есть больше возможностей для точной настройки вашего фильтра, перечисленного в основных параметрах потоковой передачи , таких как: сбор твитов от выбранных пользователей, языков, местоположений и т. Д. Платные версии Streaming 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». В следующей части мы сделаем краткий анализ включенных хэштегов и местоположений пользователей.

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

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

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

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

 import pandas as pd 
 tweets = pd.read_csv("saved_tweets.csv") 
 tweets.head() 
  хэштеги                                      текст                                                            Пользователь    место расположения

0 ['IBM'] RT @freschesolution: Присоединяйтесь к нам ЗАВТРА с @OC ... rbrownpa NaN 1 [] pylocus 1.0.1: Пакет локализации https: // t .… pypi_updates2 NaN 2 [] humilis-push-processor 0.0.10: Humilis push ev ... pypi_updates2 NaN 3 ['Python', 'python', 'postgresql'] #Python Digest вышел! https: //t.co/LEmyR3yDMh ... Horstwilmes Zürich 4 [NeuralNetworks, Python, KDN] RT @kdnuggets: Руководство для начинающих по #NeuralNet ... гиодегаз Л'Акуила, ИТАЛИЯ

Какие самые распространенные хэштеги связаны с нашим ключевым словом "python"? Поскольку все данные в нашем DataFrame представлены в виде строк, включая скобки в 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 библиотеки , которая возвращает координаты заданного входного местоположения. Чтобы визуализировать тепловую карту мира твитов, мы воспользуемся библиотекой gmplot. Напоминание: наши небольшие данные не являются реальным представителем мира.

    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”)

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

Твитнуть тепловаякарта{.ezlazyload .img-responsive}

Ресурсы

Хотите узнать больше об использовании Python для доступа к Twitter API? Попробуйте пройти курс вроде Byte-Sized-Chunks: Twitter Sentiment Analysis в Python,{.udemy-link} чтобы глубже погрузиться в использование Twitter API для проектов по науке о данных с Python.

Выводы

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

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

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

comments powered by Disqus