radiko.jpの番組表を端末に表示する
radiko.jp(ラジコ) | ラジオがインターネット(アプリやパソコン)で無料で聴けるが始まったが、プレスリリースの通り、Flash Playerによる再生、IPアドレスによる地域判別による利用制限など、お固い仕様となっている。
録音に関しては、スピーカ出力を入力に持ってくるループバックなどが使えるので大抵のPCでは問題は無い。玄箱/Linuxでしようと思うと、結構難しいかもしれない。
radikoでは配信しているラジオ局の1週間分の番組データを配信/表示している。これは、URLさえ知っていれば、利用可能区域外でも参照可能のようだ(東京から大阪の番組表を参照出来たから)。
簡単に、Pythonで番組データを解析、時間とタイトルを表示するスクリプトを書いた。UNIX哲学 - Wikipediaに含まれる「標準入出力を扱うプログラムを書け。標準入出力は普遍的インターフェースなのだ。」に倣い。
$ python radiko.py today # 今日の番組一覧 $ python radiko.py tomorrow # 明日の番組一覧 $ python radiko.py # 1週間分の番組一覧
#!/usr/bin/python # Copyright (C) SAEKI Yoshiyasu # TODO: 放送局絞り込み、柔軟な日時指定 import lxml.etree import sys import datetime BANGUMI_URL = "http://radiko.jp/epg/epgapi.php?area_id=JP13" # area_id: JP13(Tokyo) or JP27(Osaka) # mode: now or nothing # station_id: ID or nothing root = lxml.etree.parse(BANGUMI_URL) if len(sys.argv) >= 2: opt = sys.argv[1] if opt == "today": today = datetime.datetime.now().strftime("%Y%m%d") progl = root.xpath('.//progs[@date="%s"]' % today) elif opt == "tomorrow": tomorrow = (datetime.datetime.now() + datetime.timedelta(days=+1)).strftime("%Y%m%d") progl = root.xpath('.//progs[@date="%s"]' % tomorrow) else: progl = root.xpath(".//progs") else: progl = root.xpath(".//progs") for progs in progl: name = progs.getparent().xpath("./name")[0].text date = progs.get("date") # YYYYMMDD print "/".join([date[0:4], date[4:6], date[6:8]]), "\t", unicode(name).encode("utf-8") for prog in progs.xpath(".//prog"): title = prog.xpath(".//title")[0].text stime = prog.get("ftl") # HHMM etime = prog.get("tol") # HHMM print "\t" + stime[0:2] + ":" + stime[2:4] +\ " ~ " + etime[0:2] + ":" + etime[2:4] +\ "\t" + unicode(title).encode("utf-8")
番組データから得られるデータとして、タイトルの他にMC情報、リクエスト先メールアドレスなどがある。