Raspberry Pi Twitter Bot - tweetování z RSS feedu

Jedním z nejčastějších využití Twitter Bota je tweetování novinek z RSS feedů stránek. Jakmile se na vybrané stránce publikuje novinka, Twitter Bot ji pošle do světa. Jak na to?

Obrázky se nestihly načíst.
Prosím opakujte akci zachvilku.

V minulém díle seriálu o Twitter Botech jsme si ukázali, jak se připojit na REST API sociální sítě Twitter a jak přes něj poslat náš první tweet. Dnes si ukážeme, jak zautomatizovat tweetování novinek z RSS feedu.

Co je to RSS feed?

RSS neboli Rich Site Summary, je XML formát, kterým webové stránky mohou informovat o novinkách. Velmi často se nachází na kde se obsah mění a přidává velmi často (například zpravodajské servery).
Je to tedy ideální zdroj, ze kterého se můžete dozvědět o všech novinkách na konkrétní stránce.

Ukázka RSS feedu: https://charlieblog.eu/rss.php

Zdrojový kód

import feedparser
from twython import Twython, TwythonError
import os
import time

def post_tweet(message):
  try:
    message = message.replace('"', '"');
    twitter = Twython(API key, API secret key, Access token, Access token secret)
    twitter.update_status(status=message)
  except TwythonError as err:
    print('Not tweeted', message, 'Error', err)

def is_in_logfile(content, filename):
  if os.path.isfile(filename):
    with open(filename) as f:
      lines = f.readlines()
      if (content + "\n" or content) in lines:
        return True
    return False

def write_to_logfile(content, filename):
  try:
    with open(filename, "a") as f:
      f.write(content + "\n")
  except IOError as e:
    print(e)

feedUrl = Feed URL
feed = feedparser.parse(feedUrl)
logfile = '/path/to/tweeted/file'
date_from = '2018-12-06';
tweet_counter = 0;
max_tweets = 2;

print('Only items with published higher than', date_from, 'will be tweeted')

print('Working on feed', feedUrl)
if feed:
  for item in feed['items'][::-1]:
    link = item['link']
    published = item['published_parsed']
    publishediso = time.strftime('%Y-%m-%dT%H:%M:%SZ', published)
    if publishediso < date_from:
      print(publishediso, 'Too old item')
    elif is_in_logfile(item['link'], logfile):
      print(publishediso, 'This link was posted some time ago', item['link'])
    else:
      message = '💣 Novinka ze stránek\n' + item['title'] + '\n#myhashtag\n' + item['link']
      tweet_counter = tweet_counter + 1
      if tweet_counter < max_tweets:
        post_tweet(message)
        write_to_logfile(link, logfile)
      else:
        print('Reached max tweet limit. Wait a moment')


Jak jste si jistě všimli, jedná se o jednoduchý program napsaný v jazyce Python. Využívají se v něm dvě knihovny… feedparser a twython.
Knihovna feedparser zajišťuje načtení a naparsování RSS feedu z konkrétní URL adresy.
Knihovnu twython známe už z předchozího dílu a zajišťuje jednoduchý přístup k Twitter REST API.
Pro správnou funkčnost programu je potřeba doplnit API key, API secret key, Access token, Access token secret, Feed URL a cestu k souboru, do kterého se budou logovat odeslané tweety (abychom neposílali vícekrát a nedostali „ban“ RESTRICTED TO API READ ACCESS ONLY).

Spuštění programu

python3 feedreader.py


Abychom na to nemuseli myslet a spouštět ručně, zadáme spuštění do cronu. Třeba každou hodinu. Zkontrolujeme jestli v RSS nejsou novinky a pokud ano dáme o nich světu vědět ;-).

Závěr

Pokud má váš web RSS feed, tak není jednodušší cesta jak „automaticky“ přidávat příspěvky na Twitter. Já jsem si udělal bota na novinky ze stránek mého oblíbeného účetního software FlexiBee. Takže teď okamžitě vím o každé nové verzi. A nejen já. :-)

Twitter bot, Python

- (19. 3. 2019)

Jsem programátor, horolezec a tak trochu FlexiBee fanatik :-).
Na CharlieBlogu sepisuji své nápady a poznatky už od roku 2006.

Powered by CharlieBlog Engine v2.1