久々の更新です。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