10分前に放送アニメを通知する

サーバを入れ直して、なにがツラいって plagger の環境作り直すことですね。なんか毎回のようにハマるし悲しい限りです。今 plagger でやらせてることってのが、朝に今日の天気予報を push させるというのと、10分前に放送アニメを通知すること。天気予報はどうにでもなりそうだったので、アニメ通知のほうをなんとかできれば、いちいち plagger 入れる必要ないんじゃないかなーということで、python で書いてみた。

cron で10分間隔で回す。しょぼかるから番組情報を拾ってくる。〜10分後に放送する番組があったら im.kayac に push するという感じ。feedparser は標準じゃないので、apt-get install しよう!!!

#!/usr/bin/env python
# coding: utf-8

import feedparser
import datetime
import urllib2, urllib
import hashlib

url = 'http://cal.syoboi.jp/rss2.php?usr=yutamoty&titlefmt=$(Mark)%20$(StTime)%20[$(ChName)]%20$(Title)%20$(SubTitleB)'

class IMKayac:
    def __init__(self, id, password=None, sig=None):
        self.id = id
        self.password = password
        self.sig = sig

    def notify(self, msg):
        if isinstance(msg, unicode):
            msg = msg.encode('utf-8')
            path = 'http://im.kayac.com/api/post/%s' % self.id
            params = { 'message':msg, }

            if self.password:
                params['password'] = self.password

            if self.sig:
                params['sig'] = hashlib.sha1(msg+self.sig).hexdigest()

            urllib2.build_opener().open(path, urllib.urlencode(params))

d = datetime.datetime.today()
d10 = d + datetime.timedelta(minutes=11)

item = feedparser.parse(url)

for entry in item['entries']:
    title = entry['title']
    time = entry['updated']
    t = datetime.datetime.strptime(time, '%Y-%m-%dT%H:%M:%S+09:00')

    if d <= t:
        if d10 >= t:
            if __name__ == '__main__':
                im = IMKayac('username','password','1')
                im.notify(title)

しょぼかるRSSについてはヘルプを参照。ユーザ作って表示させる放送局をしぼらないと push されすぎてつらいと思う。
rss2.php - しょぼいカレンダーのヘルプ

これで、リアルタイムで見たいアニメがあった場合でも大丈夫。今期だと IS と まどかマギカ はリアルタイムで見るようにしてます。毎度、しょぼかるにはお世話になっております。