pythonでTwitter botを作ってみる
追記(2010/11/01):
twitterではBasic認証が廃止されてしまったので、以下の方法ではAPIが使えななっています。いずれOAuth認証ネタでも書きたいところですなぁ。。。
とあるネタでTwitter botを作る事になった。
pythonで作ったので、その時のメモなど。
目標ボット
・フォロワーが新規発言をすると、一定確率でコメントを返す。
実行テスト
上記サイトを参考につぶやきテスト(というか丸移し)
import twitter api = twitter.Api("ユーザ名", "パスワード") status = api.PostUpdate("Hello, python-twitter!!") # 日本語投稿の場合はUnicodeにする status = api.PostUpdate("python-twitterでの書き込み!")
これだけで書き込み完了。こりゃ便利だ!
bot実装
とりあえずドキュメント見ながら色々と試していく。
どうやら以下の4つのクラスが存在するらしい。
クラス | 内容 |
---|---|
Api | TLやフォロワーなどの各種情報を取得したり、tweetを送信したりする |
DirectMessage | ダイレクトメッセージの情報を管理 |
Status | つぶやき(tweet)の情報を管理 |
User | ユーザの情報を管理 |
とりあえず
1.(botの)フォロワーのユーザ情報を抽出
2.各ユーザの最新tweetを取得
という流れでやってみる。
import twitter api = twitter.Api("ユーザ名", "パスワード") users = api.GetFollowers() # フォロワーのUser情報を取得 for u in users: print u.name, u.screen_name s = u.status # UserのStatusを取得 if s: print s.id, s.text
結果の一例はこちら↓
Naoya_S billest001 4702798105 腹減ったなぁ
何もつぶやいていないユーザの場合u.status=Noneとなる。
また非公開ユーザの場合、こちらが許可されていないのに
ユーザのtweet情報を取得(u.status)しようとするとエラーが発生する。
(取得するには、botがそのユーザをフォローして許可されておく必要がある。)
各tweetにはIDがついてるので、各ユーザごとに最新tweetIDを
辞書(ハッシュ)で格納しておけば最新情報を保持できそう。
そんなこんなでおおざっぱに実装するとこんな感じ↓
from random import randint from collections import defaultdict from time import * from twitter import * api = Api(username='ユーザ名', password='パスワード') # ログイン # フォロワーの最新tweetの取得および投稿 def get_and_tweet(tweet_list): users = api.GetFollowers() # フォロワーのUser情報を取得 for u in users: s = u.status if not s: continue # 一応リネーム user_name = u.screen_name tweet_id = s.id if tweet_id > tweet_list[user_name]: # 新tweet情報の保存 tweet_list[user_name] = tweet_id # 10%の確率でbotコメント発動 if randint(1, 100) <= 10: sentence = u"@%s 誰に許可取って発言してんの?" % user_name status = api.PostUpdate(sentence) # Post def main(): # 各々の最新tweetID格納 tweet_list = defaultdict(int) # 60秒おきにTL巡回、最新tweetを補足 while(1): try: get_and_tweet(tweet_list) except urllib2.URLError: print u"エラーが発生したナリ。" sleep(60) # 1分間70リクエスト規制に注意 if __name__ == '__main__': main()
twitterAPI規制についてはこちらなどを参照。
実際に作ったのはもうちょい色々とやってるけど、基本はこんな感じ。
twitterAPIのおかげでだいぶ簡単にbotを作る事ができる。
今回は非公開内輪ネタbotなのでここでは紹介しませんが、
いずれもうちょっと有益な一般公開botなどを作ってみたいところ。
...アイデアないけど\^o^/