Raspberry Pi Twitter Bot - Retweeter

Chcete automatizovat retweetování nebo „lajkování“ tweetů obsahujících váš oblíbený #hashtag? Není to nic složitého a budete mít přehled o všem 🙂.

Už víme jak se připojit k Twitter REST API a jak si zautomatizovat tweetování novinek z RSS feedu. Co takhle naprogramovat Twitter Bota, který bude retweetovat nebo likovat některé tweety jiných uživatelů? I to je možné. Tak jdeme na to!

Obrázky se nestihly načíst.
Prosím opakujte akci zachvilku.
Retweeter Twitter Bot 😉


Zdrojový kód

from twython import Twython, TwythonError
import os

max_tweets = 2
tweet_counter = 0

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)

def search_and_retweet(query, logfile, count=10):
  global tweet_counter
  global max_tweets

  """Search for a query in tweets, and retweet those tweets."""
  try:
    twitter = Twython(API key, API secret key, Access token, Access token secret)
    search_results = twitter.search(q=query, count=count)
  except TwythonError as e:
    print(e)
  for tweet in search_results["statuses"][::-1]:
    # check if is retweet
    is_retweet = True if 'retweeted_status' in tweet or 'quoted_status' in tweet else False
    link = tweet['id_str']
    if tweet_counter >= max_tweets:
      print('Wait a moment... rate limited')
    elif is_in_logfile(link, logfile):
      print('Nothing: operation on tweet', link, 'was performed')
    else:
      if is_retweet:
        print('Like:', link, '-', tweet['user']['name'], '-', tweet['text'])
        try:
          twitter.create_favorite(id=link)
        except TwythonError as e:
          print(e)
      else:
        print('Retweet:', link, '-', tweet['user']['name'], '-', tweet['text'])
        try:
          twitter.retweet(id = link)
        except TwythonError as e:
          print(e)
      write_to_logfile(link, logfile)
      tweet_counter = tweet_counter + 1

logfile = '/path/to/log/file.txt'

query = 'Search query'
#query = '(flexibee -(from:flexibee_bot OR from:flexibee_zpravy))'

search_and_retweet(query, logfile, 100)


V tomto prográmku budeme potřebovat jen knihovnu Twython. Všechno ostatní je jen otázkou správného volání API. Opět musíme vyplnit API key, API secret key, Access token, Access token secret a cestu k souboru, do kterého se budou logovat zpracované tweety (abychom neposílali vícekrát a nedostali „ban“ RESTRICTED TO API READ ACCESS ONLY).

Nastavení search query

V podstatě nejdůležitější částí retweeter bota je search query. Její použití nám vrátí tweety, které odpovídají našemu přání. Konstrukce není nikterak složitá. Nejspíš si vystačíme s několika základními operátory.

Základní operátory pro konstrukci search query

watching now – vyhledá všechny tweety obsahující watching a now
"happy hour" – vyhledá přesnou frázi
love OR hate – vyhledá tweety obsahující love nebo hate
beer -root – všechno co obsahuje slovo beer, ale neobsahuje slovo root
#hashtag – vše s hastagem #hashtag
from:charlieblogeu – vše co tweetne uživatel charlieblogeu
to:NASA – tweety, které odpovídají na tweety účtu NASA
@NASA – tweety, které zmiňují účet NASA

Kompletní seznam operátorů naleznete v Twitter API dokumentaci operátorů.

Spuštění programu

Program si uložíme do souboru retweeter.py a spuštění provedeme příkazem

python3 retweeter.py


Opět bude nejlepší si spouštění dát do cronu, abychom si ušetřili zbytečné ruční spouštění 😉.

Závěr

Stačí správně nastavit vyhledávací pravidlo a už nikdy nebudete muset na twitteru hledat. Bot vám všechny tweety krásně naservíruje 🙂.

Já ho takto používám pro informování o tweetech zmiňujících FlexiBee.

Twitter bot, Python

-

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.3 - Login