Как стать автором
Обновить

Автоматическая отсылка анонсов в твиттер

Время на прочтение3 мин
Количество просмотров784
Недавно, при работе над проектом на Джанго, понадобилось автоматически отправлять в твиттер заголовок и укороченную ссылку для публикуемых статей от имени пользователя.

Как оказалось, делается это совсем несложно.


Я сразу решил не изобретать велосипед и воспользоваться одной из доступных библиотек для работы с твиттером. Больше всего мне глянулся twython. Импортируем его в models.py:

Copy Source | Copy HTML
  1. import twython.core as twython

Вот упрощенная модель публикаций. Я оставил только самый минимум полей:

Copy Source | Copy HTML
  1. class Post(models.Model):
  2.     title = models.CharField(max_length=100)
  3.     media = models.TextField()
  4.     published = models.BooleanField(default=False)
  5.     tweeted = models.BooleanField(default=False, editable=False)
  6.  
  7.     def __unicode__(self):
  8.         return u'%s' % self.title
  9.  
  10.     @models.permalink
  11.     def get_absolute_url(self):
  12.         return ('news.views.news_view', [str(self.id)])

У модели есть два поля — published для того, чтобы не «твитить» черновики и tweeted, чтобы каждый пост анонсировался только один раз.

Теперь сам процесс отправки анонса:

Copy Source | Copy HTML
  1. def post_to_twitter(sender, instance, **kwargs):
  2.     """<br/>    Отправляем анонс в тви если пост опубликован но еще не затвитен<br/>    """
  3.     if instance.published and not instance.tweeted:
  4.         try:
  5.             twitter = twython.setup(username="TWITTER_USER", password="TWITTER_PASSWORD")
  6.             long_url = "http://%s%s" % (Site.objects.get_current(), instance.get_absolute_url())
  7.             short_url = twitter.shortenURL(long_url)
  8.             twi_message = instance.title + " " + short_url
  9.             try:
  10.                 twitter.updateStatus(twi_message)
  11.                 Post.objects.filter(pk=instance.pk).update(tweeted = True)
  12.             except TwythonError:
  13.                 pass
  14.         except AuthError:
  15.             pass

Процесс отсылки в твиттер логично повесить на событие post_save:

post_save.connect(post_to_twitter, sender=Post)


Вот и все. Можно добавить всяких полезностей по-вкусу, но и в таком виде вполне себе работает.
Теги:
Хабы:
Всего голосов 41: ↑30 и ↓11+19
Комментарии32

Публикации

Истории

Работа

Python разработчик
189 вакансий

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань