久々の更新です。mixiやtwitterなどで既につぶやきましたが、先週の週末に衝動的にtwitter botを作ってしまいました。このBotは次のように振る舞います。
1. Twitter上のつぶやきの中から、任意の単語が含まれるtweetを集める。
2. そのtweetをRe-tweetする。
以上です。
実際には例外処理などの細かな処理も含まれていますが、大まかな振る舞いは上述の通りです。この一連の処理を、cronを用いて1時間毎に1回実行します。
下記に、実際のコードの一部(main.py)を引用します。
Twitter Bot作成の参考になれたら幸いです。
#!/usr/bin/env python #! -*- coding: utf-8 -*- from appengine_twitter import AppEngineTwitter from basehandler import BaseHandler, h import twitter # twitter.Api.__init__ method for override. def twitter_api_init_gae(self, username=None, password=None, input_encoding=None, request_headers=None): import urllib2 from twitter import Api self._cache = None self._urllib = urllib2 self._cache_timeout = Api.DEFAULT_CACHE_TIMEOUT self._InitializeRequestHeaders(request_headers) self._InitializeUserAgent() self._InitializeDefaultParameters() self._input_encoding = input_encoding self.SetCredentials(username, password) def run(name, pswd, search_term): gae_twitter = AppEngineTwitter(name, pswd) results = gae_twitter.search(search_term.encode('utf8'), {'rpp': 20}) api = twitter.Api(username=bot_username, password=bot_password) # Get most corrently tweeted tweet status = api.GetUserTimeline() for s in status: if s.text.startswith("RT"): recent_tweet = s.text break else: print "The following tweet would be posted by hand, so skipped it." print "Tweet: " + s.text.encode('utf8') print print "Recent Tweet: "+recent_tweet.encode('utf8') print # Search Most Recent Tweet results.reverse() flag_enable = 0 for i,result in enumerate(results): rt = "RT @" + result['from_user'] + " " + result['text'] rt_len = len(rt) if flag_enable and result['from_user'] != bot_username and rt_len < max_len : """ Retweet and exit """ print "Re-tweet: "+rt.encode('utf8') print "Re-tweet Result: " + str(gae_twitter.update(rt.encode('utf8'))) exit() if recent_tweet == rt: flag_enable = 1 if flag_enable: print "There are no tweet found that I should tweet." exit() print "There are no tweets recently tweeted, so tweet the oldest tweet for i,result in enumerate(results): rt = "RT @" + result['from_user'] + " " + result['text'] rt_len = len(rt) if result['from_user'] != bot_username and rt_len < max_len: """ Retweet and exit """ print "Re-tweet: "+rt.encode('utf8') print "Re-tweet Result: " + str(gae_twitter.update(rt.encode('utf8'))) exit() # overriding API __init__ twitter.Api.__init__ = twitter_api_init_gae # User Setting and Run Twitter Bot bot_username = 'CafeMiyamaBot' bot_password = '???' max_len = 140 search_term = u'Cafe Miyama' run(bot_username, bot_password, search_term)
なお、上述のコードには、cronの設定などは含まれていません。
詳細な振る舞いおよび設定を知りたい方は、下記のコマンドでcloneしてください。
$ git clone git://github.com/yasulab/Simple-Twitter-Bot.git
もしくは、下記のGithubレポジトリに直接アクセスしてください。
http://github.com/yasulab/Simple-Twitter-Bot
bot_usernameとbot_passwordの内容を別のtwitterアカウントに書き換えて、お手持ちのGoogle App EngineのアカウントにdeployするとTwitter Botが動くと思います。加えて、search_termを任意の単語に書き換えれば、オリジナルTwitter Botの出来上がりです。
参考にさせて頂いたサイトおよびコード:
1. Python Twitter, Google Code
http://code.google.com/p/python-twitter/
2. Google App Engineで手軽にTwitterアプリを作成!
http://0-oo.net/sbox/python-box/appengine-twitter