Пишем в django – публикуем в twitter
Доброго времени суток!
Появилась необходимость следующего характера: в движке на django, при публикации новости, чтоб создавался кросс-пост на twitter. Т.е. пишем новость, жмём сохранить и на твиттере появляется пост аля «Название статьи, bit.ly/s/ссылка_на_нашу_новость».
Для реализации потребовались следующие пакеты:
Перед тем как начать предполагаю, что у Вас есть аккаунт в twitter.com и bit.ly. Если нет, то это по минуте на регистрацию на каждом из сервисов.
Начнём с twitter’a…
При-python-им twitter
Проставляем все пакеты и выполняем следующие действия (кстати они описаны выше в руководстве python-oauth2):
Логинимся в браузере в twitter.com, и после этого переходим по ссылке http://twitter.com/apps/new. Далее мы воспользуемся инструкциями из замечательной статьи:
Следующие два параметра нам вернет такой скрипт
В CONSUMER_KEY, CONSUMER_SECRET вводим значения полученные на предыдущем этапе, запускаем. Скрипт сгенерит url, переходим по нему и копируем PIN который нам вежливо предлагает twitter. Вставляем PIN в скрипт, он как раз его ждет.
На выходе мы получим значения для двух последних параметров OAUTH_TOKEN и OAUTH_TOKEN_SECRET.
Все, теперь у нас есть все что надо для oauth авторизации, осталось немного подправить скрипты.
Готовимся сокращать ссылки вместе с bit.ly
Предельно простой и удобный модуль bitlyapi. Схема простая:
Правим модель в Django
Здесь мы не рассматриваем создание модели, предполагается, что Вы это умеете. В шапку добавляем:
Переходим к моделе. Логика проста, есть boolean поле twitter_export, если галочка ставится, то новость публикуется при сохранении на твиттере. Если не понятно, то сейчас всё увидите и поймёте ))
Всё готово! Можно тестировать!
Появилась необходимость следующего характера: в движке на django, при публикации новости, чтоб создавался кросс-пост на twitter. Т.е. пишем новость, жмём сохранить и на твиттере появляется пост аля «Название статьи, bit.ly/s/ссылка_на_нашу_новость».
Для реализации потребовались следующие пакеты:
- python-oauth2 | https://github.com/simplegeo/python-oauth2
- oauth-python-twitter2 | http://code.google.com/p/oauth-python-twitter2/
- simplejson | http://pypi.python.org/pypi/simplejson/
- oauth2 | http://pypi.python.org/pypi/oauth2/
- bitlyapi | http://pypi.python.org/pypi/bitlyapi/
Перед тем как начать предполагаю, что у Вас есть аккаунт в twitter.com и bit.ly. Если нет, то это по минуте на регистрацию на каждом из сервисов.
Начнём с twitter’a…
При-python-им twitter
Проставляем все пакеты и выполняем следующие действия (кстати они описаны выше в руководстве python-oauth2):
Логинимся в браузере в twitter.com, и после этого переходим по ссылке http://twitter.com/apps/new. Далее мы воспользуемся инструкциями из замечательной статьи:
- Заполняем все поля на свое усмотрение, для Application Type выбираем Client
- Для Default Access type выбираем Read & Write, Use Twitter for login я оставил не выбранным
- Вводим капчу и сабмитим
Следующие два параметра нам вернет такой скрипт
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. Схема простая:
Правим модель в 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()
Всё готово! Можно тестировать!
Источники
0 комментариев