Как по-быстому связать приложение на Питоне с Твиттером?

Ответ — подключить библиотеку oauthtwitter.

Почему не python-twitter? Потому что первая гораздо меньше по объему кода и числу зависимостей от дополнительных модулей: 300 строк кода против 4000!

Установим необходимые библиотеки:

pip install ouath2
pip install httplib2
pip install simplejson

Для работы с Твиттером нужно зарегистрировать приложение. Твиттер позволяет указывать ссылки вида localhost или 127.0.0.1 в поле «Callback URL», что очень полезно при разработке на локальной машине.

screenshot

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: ввод логина и пароля на стороне Твиттера

screenshot

Шаг 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 Иван Гришаев: То же самое могу сказать о вашем комментарии.