Начните работу с Twitter API с Python

Начните использовать twitter api уже сегодня!

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

В этом примере python twitter api вы можете сделать следующее:

  • Создайте бота для ответа на Python в Twitter!
  • Анализ настроений в Twitter на Python!
  • Создайте скребок для Twitter на Python!
  • Создайте Twitter-бота на Python!
  • Создайте бота для подписки на Python в Twitter!

- Все исходные коды этого руководства можно найти на ней »e

Пытаетесь создать своего собственного твиттер-бота или твиттер-приложение на Python? Тогда это руководство для вас! Он будет ориентирован на тех, кто имеет базовый опыт в следующих областях:

  • HTTP (GET & POST) запросы
  • Опыт программирования (желательно на питоне)

Мы рассмотрим весь процесс использования twitter API без оболочки и с использованием OAuth2. Не стесняйтесь обращаться ко мне (twitter: @ElliottSaslow), если у вас есть какие-либо вопросы или вам нужна дополнительная помощь.

Начало работы: создание учетной записи разработчика

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

В этой области вам нужно будет нажать на «Создать новое приложение», а затем выполнить процесс создания нового приложения. На вкладке приложения и ключи вы найдете свой ключ клиента и секретный ключ клиента. См. Изображение ниже:

Получив эту информацию, вы готовы начать использовать Twitter API с вашим любимым редактором Python! Для начала я использовал блокнот jupyter, но все работает.

Создание заголовков аутентификации

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

  • Начните с определения ваших ключей
  • Используйте форматирование Json и переходите от юникода к байтам
  • Преобразование байтов в base64, которые можно распечатать (читается человеком)
  • Преобразование байтов обратно в Unicode
import base64
#Define your keys from the developer portal
client_key = '<Insert Client Key Here>'
client_secret = '<Insert Client Secret Key Here>'
#Reformat the keys and encode them
key_secret = '{}:{}'.format(client_key, client_secret).encode('ascii')

# Transform from bytes to bytes that can be printed
b64_encoded_key = base64.b64encode(key_secret)

#Transform from bytes back into Unicode
b64_encoded_key = b64_encoded_key.decode('ascii')

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

  • Создайте URL-адрес для запроса (мы красиво отформатируем его, чтобы в будущем мы могли использовать тот же базовый URL-адрес)
https://api.twitter.com/oauth2/token
  • Создайте заголовки для нашего запроса POST
  • Создайте раздел Authentication Data для запроса
  • Используя библиотеку запросов, отправьте запрос POST на URL-адрес аутентификации.

Код для завершения приведен ниже:

import requests
base_url = 'https://api.twitter.com/'
auth_url = '{}oauth2/token'.format(base_url)
auth_headers = {
    'Authorization': 'Basic {}'.format(b64_encoded_key),
    'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
}
auth_data = {
    'grant_type': 'client_credentials'
}
auth_resp = requests.post(auth_url, headers=auth_headers, data=auth_data)

Чтобы убедиться, что ваш запрос сработал, вы можете взглянуть на код состояния ответа аутентификации. Код состояния 200 означает, что запрос сработал!

  • См. Код состояния с помощью print(auth_resp.status_code)

Затем мы возьмем ответ в формате json и получим ключ доступа для наших будущих запросов. Он называется токеном носителя и дает вам доступ к API Twitter с проверкой подлинности!

  • Назовите токен токен доступа.
access_token = auth_resp.json()['access_token']

Теперь вы готовы использовать Twitter API с вашим аутентифицированным приложением !!

Искать твиты

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

Еще раз, есть несколько частей этого запроса, которые нам нужно придумать:

  • Заголовок, содержащий наш токен аутентификации
  • Параметры, содержащие конкретную информацию, относящуюся к нашему поиску
  • URL для отправки запроса GET

В данном случае я ищу два последних твита, связанных с термином НАСА:

search_headers = {
    'Authorization': 'Bearer {}'.format(access_token)    
}
search_params = {
    'q': 'NASA',
    'result_type': 'recent',
    'count': 2
}
search_url = '{}1.1/search/tweets.json'.format(base_url)
search_resp = requests.get(search_url, headers=search_headers, params=search_params)

Как только мы получим ответ, чтобы сделать информацию удобочитаемой, мы возьмем раздел содержимого ответа, превратим его в json и, наконец, распечатаем результаты. Ниже приведен код для этого:

import json 
search_headers = {
    'Authorization': 'Bearer {}'.format(access_token)    
}
search_params = {
    'q': 'NASA',
    'result_type': 'recent',
    'count': 10
}
# Create the URL
search_url = '{}1.1/search/tweets.json'.format(base_url)
# Execute the get request
search_resp = requests.get(search_url, headers=search_headers, params=search_params)
# Get the data from the request
Data = json.loads( search_resp.content )
# Print out the data!
print(Data['statuses'])

Результат приведенного выше кода даст что-то вроде:

Из этой информации вы можете легко извлечь текст для каждого твита, используя простой цикл for. Наконец, если вы хотите увидеть оставшийся предел скорости для текущего временного окна, запрос ниже предоставит вам эту информацию!

url = 'https://api.twitter.com/1.1/application/rate_limit_status.json'
#Execute the request
search_resp = requests.get(url, headers=search_headers)
#See the remaining rate limit
json.loads(search_resp.content)['resources']['search']