2009 年 1 月の記事一覧です(3 件)

がんばれ! アドミンくん の新作情報を知らせるTwitterBotを作った

@ITで連載中の4コマ漫画がんばれ! アドミンくんは、システム管理者のありがちネタをユーモラスに描いており、とっても面白く、一服の清涼剤という感じで、第一話から欠かさず読んでいます。
今回、がんばれ! アドミンくんの新着を見逃さないように、新着情報を知らせるTwitterBotを作成しました。
http://twitter.com/ad_min_kun
アカウントがadmin_kunでなく、ad_min_kunと細切れになっているのは、下のようにadminという文字は使えないようなので。

image01

がんばれ!アドミンくん はRSSを吐き出していない為(YahooPipes等の外部サービスでRSS化しているものは見かけます)、スクレイピングで対応しました。例によってコードを晒します。
Python2.4と2.5で動作確認をしています。スクレイピングにBeautifulSoupを、Twitter投稿にpython-twitter(依存関係でsimplejsonも必要)を使用しています。

# coding: utf-8
import urllib2
from twitter import Api as TwitterApi
from BeautifulSoup import BeautifulSoup


def file_open(f):
    r = open(f,'r')
    latest_number = r.readline()
    r.close()
    return latest_number

def parse_html(u):
    soup = BeautifulSoup(urllib2.urlopen(u))
    data = []
    for node in soup.findAll('td', {'colspan': '3'}):
        for tag in node('table', {'width': '100%', 'cellpadding': '3', 'border': '0'}):
            for atag in tag('a'):
                data.append([atag['href'], atag.string])
    data.reverse()
    return data

def main(data, latest_number):
    for i in data:
        entry_link, entry_title = i[0], i[1]
        e = entry_link.split('/')
        entry_number = e[4]
        if latest_number < entry_number:
            api = TwitterApi(TWITTER_USERNAME, TWITTER_PASSWORD)
            post = u'%s %s%s' % (entry_title, DOMAIN, entry_link)
            api.PostUpdate(post)
            latest_number = entry_number
    return latest_number

def file_close(f, l):
    w = open(f, 'w')
    w.write(str(l))
    w.close()

if __name__ == '__main__':
    FILE = 'adminkun_status.txt'
    TWITTER_USERNAME = 'TWITTER_ACCOUNT'
    TWITTER_PASSWORD = 'PASSWORD'
    URL = 'http://www.atmarkit.co.jp/fwin2k/itpropower/admin-kun/index/index.html'
    DOMAIN = 'http://www.atmarkit.co.jp'
    latest_number = file_open(FILE)
    data = parse_html(URL)
    latest_number = main(data, latest_number)
    file_close(FILE, latest_number)

実は前回のBotはこれの副産物でした。自分にとってTwitterは、すっかり情報ハブになっているので、有益になりうるTwitterBot候補があれば、ちょくちょく作っていこうかと思います。


ラジオNIKKEI競馬実況webのNEWSを配信するTwitterBotを作りました

17年近く競馬をやっていた私が、結婚してからいうもの、すっかり馬券を買わなくなっていたのですが、去年の年末に東京大賞典だけ購入しました。結果は駄目でしたが、やはり競馬は面白いね!ということで、いつも予想時に参考にしているラジオNIKKEI競馬実況webのニュースをTwitterに配信するBOTを作りました。

http://twitter.com/keiba_news

配信は1時間に1回にしています(レンタルサーバのcronジョブの最短間隔が1時間なので)。例によってコードを晒します。このコードはPython2.4と2.5で動作確認をしています。また、RSSのパースにfeedparserを、Twitter投稿にpython-twitter(依存関係でsimplejsonも必要)を使用しています。

# coding: utf-8
from time import *
import email.Utils
import feedparser
from twitter import Api as TwitterApi

def file_open(f):
    r = open(f,'r')
    latest_date = r.readline()
    r.close()
    return latest_date

def parse_feed(u):
    data = feedparser.parse(u)
    feed = []
    for entry in data.entries:
        feed.append([entry.date, entry.title, entry.link])
    feed.reverse()
    return feed

def main(feed, latest_date):
    for i in feed:
        entry_date, entry_title, entry_link = i[0], i[1], i[2]
        entry_date = localtime(mktime(email.Utils.parsedate(entry_date)) + 32400)
        entry_date = strftime('%Y/%m/%d %H:%M',entry_date)
        if latest_date < entry_date:
            api = TwitterApi(TWITTER_USERNAME, TWITTER_PASSWORD)
            post = u"%s %s %s" % (entry_date, entry_title, entry_link)
            api.PostUpdate(post)
            latest_date = entry_date
    return latest_date

def file_close(f, l):
    w = open(f, 'w')
    w.write(str(l))
    w.close()

if __name__ == '__main__':
    TWITTER_USERNAME = 'TWITTER_ACCOUNT'
    TWITTER_PASSWORD = 'PASSWORD'
    FILE = 'radionikkei_status.txt'
    URL = 'http://keiba.radionikkei.jp/keiba/rss2/news/'
    latest_date = file_open(FILE)
    feed = parse_feed(URL)
    latest_date = main(feed, latest_date)
    file_close(FILE, latest_date)

なんか無理矢理、関数組んじゃったりしてますが、とりあえず動いてます><
というわけで、ついったったーで競馬好きな方がいらっしゃいましたらFollowしてやって下さい。

参考サイト


明けましておめでとうございます

明けましておめでとうございます。今年もよろしくお願いします。
とりあえず牛で思い出すのがこれ。丑年ということでこれを聴きます。


PAGE TOP