twitterのbotをつくってみる

[2009-10-10]

遅ればせながら,ついかっとなって twitter の bot を作ってみようと思い立ちました。

Python Twitter でいってみよう

Python の Twitter ラッパ python-twitter をつかいます。

準備

依存関係にある simplejson をインストール。 Python Package Index : simplejson 2.0.9

$ wget "http://pypi.python.org/packages/source/s/simplejson/simplejson-2.0.9.tar.gz"
$ tar xfv simplejson-2.0.9.tar.gz
$ cd simplejson-2.0.9
$ python setup.py build
$ sudo python setup.py install

Python twitterをインストール。 python-twitter - Project Hosting on Google Code

$ svn checkout http://python-twitter.googlecode.com/svn/trunk/ python-twitter
$ cd python-twitter/
$ python setup.py build
$ sudo python setup.py install

動作確認

すごく簡単で感激。サンプル通りにやってみた。

まず,任意のユーザのつぶやきを取得。

>>> import twitter
>>> api = twitter.Api()
>>> statuses = api.GetUserTimeline('umio')
>>> [s.text for s in statuses]
[u'\u7279\u6025\u4e2d\u76ee\u9ed2\u901a\u904e\uff01', u'\u3061\u3087\u3046\u3061\u3087\u306e\u30d1\u30b9\u30bf\u306e\u540d\u524d\u306f\u300c\u30d5\u30a1\u30eb\u30d5\u30a1\u30c3\u30ec\u300d', (snip...)

つぶやいてみる

API ドキュメントを参照しながら,認証とつぶやきに挑戦。

>>> api = twitter.Api(username='xxxx',password='xxxx')
>>> status = api.PostUpdate('Hi, there!')

簡単すぎ。

長いURLを含んだつぶやきを送ってみる。

>>> status = api.PostUpdate('Check this out! http://umio.net/blog/ict%E3%83%A1%E3%83%A2%E5%B8%B3/twitter%E3%81%AEbot%E3%82%92%E3%81%A4%E3%81%8F%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "build/bdist.linux-i686/egg/twitter.py", line 1536, in PostUpdate
twitter.TwitterError: Text must be less than or equal to 140 characters. Consider using PostUpdates.

だめだった。URL短縮は自分でやって,なおかつ140文字制限も対応しなきゃ。まあ,当たり前だけど。

いわれたとおりに PostUpdates を使ってみる。

>>> status = api.PostUpdates('Check this out! http://umio.net/blog/ict%E3%83%A1%E3%83%A2%E5%B8%B3/twitter%E3%81%AEbot%E3%82%92%E3%81%A4%E3%81%8F%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B')

通った。

結果は,スペースを境界に複数つぶやきに分割。

つぶやきの先頭にURLがあると,短縮URLにしてくれる。どうもこれは Python Twitter の機能ではなく,Twitter API の機能のようだ。先頭以外にURLを入れる場合は,別途短縮URL化をしなくてはいけない。しかもスペース区切りなので,日本語のつぶやきには厳しいかな。

かんたんなbotを作ってみる

1時間に1回,挨拶をつぶやくという簡単な bot を作ってみる。

botTest.py

#!/bin/env python
import twitter
api = twitter.Api(username='xxxx',password='xxx')
api.PostUpdate('Hi There!')
$ chmod u+x botTest.py
$ ./botTest.py

動いた。

これを crontab に登録して待つ。 テストのために毎分つぶやいてみる。

crontab -e
----
0-59 * * * * /home/umio/botTest.py
----

どうも1回しか動かないようだ。直前のつぶやきと同じものをつぶやこうとすると,はねられるらしい。

とりあえず乱数を入れて,毎回違うつぶやきにしてみる。

#!/bin/env python
import twitter
import random
api = twitter.Api(username='xxxx',password='xxx')
api.PostUpdate('Hi There! '+str(random.random()))

できた!

次は、@をつかったReplyに答える twitter bot を作ってみる

twitter bot 制作の関連記事

参考サイト


ictメモ帳/twitterのbotをつくってみる.txt · Last modified: 2009-12-19 10:49 by taka6