Работаем с Твиттером
Как по-быстому связать приложение на Питоне с Твиттером?
Ответ — подключить библиотеку oauthtwitter.
Почему не python-twitter? Потому что первая гораздо меньше по объему кода и числу зависимостей от дополнительных модулей: 300 строк кода против 4000!
Установим необходимые библиотеки:
pip install ouath2
pip install httplib2
pip install simplejson
Для работы с Твиттером нужно
зарегистрировать приложение. Твиттер
позволяет указывать ссылки вида localhost
или 127.0.0.1
в поле
«Callback URL», что очень полезно при разработке на локальной машине.
Consumer key — это открытый ключ приложения, что-то вроде логина. Consumer secret — закрытый ключ, которым подписываются запросы к Твиттеру. Если вы где-то опубликовали его, немедленно смените в настройках приложения.
Авторизация в Твиттере проходит в несколько шагов.
Шаг 1: запрос на авторизацию
import oauthtwitter
CONSUMER_KEY = "key"
SECRET_KEY = "secret"
# Инициализация клиента по ключам
def sign_init(request):
client = oauthtwitter.OAuthApi(CONSUMER_KEY, SECRET_KEY)
# Уникальный токен, действительный только для одной авторизации
request_token = client.getRequestToken()
# Сохраняем токен в сессию пользователя. Можно сохранить на диск или в БД
request.session["request_token"] = request_token
# Получаем уникальный адрес авторизации на основе токена
url = client.getAuthorizationURL(request_token)
# Перенаправляем пользователя на страницу ввода пароля
return redirect(url)
Шаг 2: ввод логина и пароля на стороне Твиттера
Шаг 3: возврат пользователя на ваш сайт
После авторизации пользователь будет направлен обратно на ваш сайт.
Напомню, что в приложении на стадии тестирования у нас указано что-то
вроде http://localhost:8080/twitter/callback
По этому адресу должен
быть обработчик, который завершит процесс авторизации.
def sign_callback(request):
# Извлекаем сохраненный ранее в сессии токен.
# Если токена нет, то пусть начинает всё с начала.
request_token = request.session.get("request_token")
if not request_token:
add_message(request, ERROR, u"Request token not found.")
return redirect(frontpage)
# Ключ валидации запроса из командной строки.
oauth_verifier = request.GET.get("oauth_verifier")
if not oauth_verifier:
add_message(request, ERROR, u"OAuth verifier not found.")
return redirect(frontpage)
# Снова инициализируем клиента
client = oauthtwitter.OAuthApi(CONSUMER_KEY, SECRET_KEY)
# Извлечени параметров доступа
access_token = client.getAccessToken(request_token, oauth_verifier)
print access_token
>>>
{
'oauth_token_secret': 'xTbNbG0IcUGgng9pyNdy******************',
'user_id': '123123123',
'oauth_token': '78741204-cLgfThwKXuqudeXGTQP***********************',
'screen_name': 'username'
}
Отлично! Как видно, access_token представляет из себя словарь со всеми нужными данными: идентификатором и именем пользователя, открытым и закрытым ключами доступа.
Дальнейший сценарий зависит от архитектуры вашего приложения. Например, на основании screen_name заводится новый пользователь (или извлекается имеющийся). Оба ключа записываются в профиль пользователя. Теперь можно работать с Твиттером:
# Инициализация клиента с ключами приложения и пользователя
client = oauthtwitter.OAuthApi(CONSUMER_KEY, SECRET_KEY,
user_oauth_token, user_oauth_token_secret)
# Извлечение твитов пользователя
timeline = client.GetUserTimeline()
# Твитнуть сообщение
client.UpdateStatus("Python testing")
# Получить фолловеров
timeline = client.GetFollowers()
И так далее, список всех методов ищите в коде класса. Очень доволен этой библиотекой, использую ее в двух проектах.
Комментарии из старого блога
02/11/13 Майя Любимая: я ничего не понимаю
02/20/13 Иван Гришаев: То же самое могу сказать о вашем комментарии.
Нашли ошибку? Выделите мышкой и нажмите Ctrl/⌘+Enter