Пишем в django – публикуем в twitter

Доброго времени суток!
Появилась необходимость следующего характера: в движке на django, при публикации новости, чтоб создавался кросс-пост на twitter. Т.е. пишем новость, жмём сохранить и на твиттере появляется пост аля «Название статьи, bit.ly/s/ссылка_на_нашу_новость».

Для реализации потребовались следующие пакеты:
  1. python-oauth2 | https://github.com/simplegeo/python-oauth2
  2. oauth-python-twitter2 | http://code.google.com/p/oauth-python-twitter2/
  3. simplejson | http://pypi.python.org/pypi/simplejson/
  4. oauth2 | http://pypi.python.org/pypi/oauth2/
  5. bitlyapi | http://pypi.python.org/pypi/bitlyapi/
1-4 пакеты нужны нам для связи с twitter’ом, 5-ый для укорачивания ссылок…
Перед тем как начать предполагаю, что у Вас есть аккаунт в twitter.com и bit.ly. Если нет, то это по минуте на регистрацию на каждом из сервисов.

Начнём с twitter’a…

При-python-им twitter
Проставляем все пакеты и выполняем следующие действия (кстати они описаны выше в руководстве python-oauth2):
Логинимся в браузере в twitter.com, и после этого переходим по ссылке http://twitter.com/apps/new. Далее мы воспользуемся инструкциями из замечательной статьи:
  1. Заполняем все поля на свое усмотрение, для Application Type выбираем Client
  2. Для Default Access type выбираем Read & Write, Use Twitter for login я оставил не выбранным
  3. Вводим капчу и сабмитим
После этого twitter сгенерит CONSUMER_KEY, CONSUMER_SECRET.
Следующие два параметра нам вернет такой скрипт

from oauthtwitter import OAuthApi
import pprint

CONSUMER_KEY = "*****"
CONSUMER_SECRET = "*****"

twitter = OAuthApi(consumer_key, consumer_secret)
temp_credentials = twitter.getRequestToken()
print(twitter.getAuthorizationURL(temp_credentials))
oauth_verifier = raw_input('What is the PIN? ')
access_token = twitter.getAccessToken(temp_credentials, oauth_verifier)

print("oauth_token: " + access_token['oauth_token'])
print("oauth_token_secret: " + access_token['oauth_token_secret'])


В CONSUMER_KEY, CONSUMER_SECRET вводим значения полученные на предыдущем этапе, запускаем. Скрипт сгенерит url, переходим по нему и копируем PIN который нам вежливо предлагает twitter. Вставляем PIN в скрипт, он как раз его ждет.

На выходе мы получим значения для двух последних параметров OAUTH_TOKEN и OAUTH_TOKEN_SECRET.
Все, теперь у нас есть все что надо для oauth авторизации, осталось немного подправить скрипты.

Готовимся сокращать ссылки вместе с bit.ly
Предельно простой и удобный модуль bitlyapi. Схема простая:
  1. Регистрируемся на bit.ly
  2. Логинимся
  3. Переходим по ссылке
  4. Копируем username и api key
Правим модель в Django
Здесь мы не рассматриваем создание модели, предполагается, что Вы это умеете. В шапку добавляем:

#twitter
import oauth2 as oauth
import bitlyapi
bitly = bitlyapi.BitLy('username bitly', 'api key bitly') #вводим данные с прошлого шага
from oauthtwitter import OAuthApi
CONSUMER_KEY = "*****вводим свои данные*****"
CONSUMER_SECRET = "*****вводим свои данные*****"
OAUTH_TOKEN = "*****вводим свои данные*****"
OAUTH_TOKEN_SECRET = "*****вводим свои данные*****"
twitter = OAuthApi(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)

Переходим к моделе. Логика проста, есть boolean поле twitter_export, если галочка ставится, то новость публикуется при сохранении на твиттере. Если не понятно, то сейчас всё увидите и поймёте ))

class News(models.Model):
    title = models.CharField(max_length=300)
    content = models.TextField()
    twitter_export = models.BooleanField(default=False)

def save(self):
    link = bitly.shorten(longUrl='http://example.com/news/' + str(self.id) + '/') #формируем ссылку, которая будет сокращенна
    if self.twitter_export:   #если стоит галочка на twitter_export
        twit = u'%s... | Читать %s' % (self.title[:70], link['url'])  #формируем, что писать в твиттер.. учтите, что длина сообщения в твиттере 160 символов
        twitter.UpdateStatus(twit) #публикуем наш твит
        self.twitter_export = False #убираем галку twitter_export
    super(News, self).save()

Всё готово! Можно тестировать!

Источники

  1. Пишем twitter-бота на python
  2. Twitter Three-legged OAuth Example


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.