面白そうなtwitter botをPythonでやってみたよ。
まめこ さんの「 ロックンロールニュースの今日のつぶやきをポストするtwitter bot 」が面白そうだったので、 Pythonで100%パクりもんを作ってみたよ。 やりたいってホザいてから、だいぶ時間経っちゃったけども気にしない。
まずはルールをおさらいから。
- 今日のつぶやき/ロックンロールニュース を取ってくる。
- そこから div.txt なテキストだけ取りだす。
- twitter に放り込む。
とりあえずは動くところまでやってみる。
まずは一通り使うものをインストール。って言っても easy_install 経由なんだけども。 BeautifulSoup とか python-twitter とか。
$ sudo easy_install -UZ BeautifulSoup
$ sudo easy_install -UZ python-twitter
で、出来たのがコチラ。
#!/usr/bin/env python
# vim: fileencoding=utf-8 :
import urllib2
from twitter import Api as TwitterApi
from BeautifulSoup import BeautifulSoup
TWITTER_USERNAME = 'twitterのスクリーンネーム'
TWITTER_PASSWORD = 'twitterのパスワード'
TSUBUYAKI_URL = 'http://www.lilyfranky.com/tsubuyaki/'
def fetch_data():
"""
ロックンロールニュースから「今日のつぶやき」を取ってくる
"""
soup = BeautifulSoup(urllib2.urlopen(TSUBUYAKI_URL))
for node in soup.findAll('div', {'class': 'txt'}):
yield node.p.string, node.span.string
def main():
"""
メインロジック
"""
api = TwitterApi(TWITTER_USERNAME, TWITTER_PASSWORD)
for message, info in fetch_data():
post = u"%s %s" % (message, info)
api.PostUpdate(post)
if __name__ == '__main__':
main()
BeautifulSoup って初めて使ったけども、 lxml とは違った面白さがあって良いかも。 なんとなく E4X 使ってる気分になるのは自分だけかなぁ?
で、ココからスルー力のなさ全開。 どうやら最終的にヘテムル?ってレンタルサーバで動かないとダメらしい。 ので、それらしく書き直してみる事に。
BeautifulSoup はもともとファイル一枚なのでコピペしておしまいで良いんだけども、 python-twitter は simplejson とかに依存してて意外にファイルの量が多くなってメンドクサイ。 なので、ここは一つ書き直しの方向にしてみたよ。
#!/usr/bin/env python
# vim: fileencoding=utf-8 :
import urllib
import urllib2
import urlparse
from BeautifulSoup import BeautifulSoup
TWITTER_USERNAME = 'twitterのスクリーンネーム'
TWITTER_PASSWORD = 'twitterのパスワード'
TWITTER_REALM = 'Twitter API'
TWITTER_URL = 'http://twitter.com/statuses/update.xml'
TSUBUYAKI_URL = 'http://www.lilyfranky.com/tsubuyaki/'
def get_twitter_opener():
"""
Twitter API用のクライアントを取得
"""
parsed_url = urlparse.urlparse(TWITTER_URL)
handler = urllib2.HTTPBasicAuthHandler()
handler.add_password(TWITTER_REALM, parsed_url.hostname,
TWITTER_USERNAME, TWITTER_PASSWORD)
return urllib2.build_opener(handler)
def fetch_data():
"""
ロックンロールニュースから「今日のつぶやき」を取ってくる
"""
soup = BeautifulSoup(urllib2.urlopen(TSUBUYAKI_URL))
for node in soup.findAll('div', {'class': 'txt'}):
yield node.p.string, node.span.string
def main():
"""
メインロジック
"""
opener = get_twitter_opener()
for message, info in fetch_data():
post = u"%s %s" % (message, info)
data = urllib.urlencode({'status': post.encode('utf8')})
opener.open(TWITTER_URL, data)
if __name__ == '__main__':
main()
ココまでやればPythonが動くレンタルサーバであれば、
どこでもこのファイルと BeautifulSoup の2つだけで動くと思うんだけどもどうでしょう?
実際に試せる環境が無くて試してないんだけども ![]()
今回の 最終的なソースはコチラ から落とせるので、 手練れの方からのツッコミをお待ちしております。
- Posted at:
- 2008/05/17 22:55:40
- 0 Comments
- 1 TrackBack
- Trackback:
- http://humming.via-kitchen.com/2008/05/17/python-twitte-bot/trackback/
TrackBacks
[Python][HIGE]巡回 - 常山日記
Dive Into Python (6日目:後半) 面白そうなtwitter botをPythonでやってみたよ。 [Python]Windows環境へのlxmlのインストールでつまった。 Perlクックブックのお題をPythonで解いてみた75 追加パッケージを使う時のメモ 長い行をインデントの文句を言われないように分割
- Created at:
- 2008/05/18 01:38:35
Comments
まだ登録されていません。