Tag/Twitter

面白そうなtwitter botをPythonでやってみたよ。

まめこ さんの「 ロックンロールニュースの今日のつぶやきをポストするtwitter bot 」が面白そうだったので、 Pythonで100%パクりもんを作ってみたよ。 やりたいってホザいてから、だいぶ時間経っちゃったけども気にしない。

まずはルールをおさらいから。

  1. 今日のつぶやき/ロックンロールニュース を取ってくる。
  2. そこから div.txt なテキストだけ取りだす。
  3. 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-twittersimplejson とかに依存してて意外にファイルの量が多くなってメンドクサイ。 なので、ここは一つ書き直しの方向にしてみたよ。

#!/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つだけで動くと思うんだけどもどうでしょう? 実際に試せる環境が無くて試してないんだけども :-P

今回の 最終的なソースはコチラ から落とせるので、 手練れの方からのツッコミをお待ちしております。

Posted at: 
2008/05/17 22:55:40
0 Comments
1 TrackBack
Tags: 
Python
Twitter
Trackback: 
http://humming.via-kitchen.com/2008/05/17/python-twitte-bot/trackback/