radikoを録音して後で聞くためのプログラムを作ってみた
radikoを録音して、iPhoneなどで聞くためのプログラムを書いてみました。
といっても、rtmpdumpで録音、ffmpegでエンコードし、gmailで送信するだけのプログラムです。
僕はこれを使って、朝のラジオ番組を仕事終わりの電車の中で聞いています。
ただし、プログラムを使うには、radikoが受信できてcronが使えるサーバーが必要です。
なので、かなり使えないプログラムであることは間違いありません。
もしこのプログラムを使う場合は、録画するチャンネル、録画時間、Gmailのアカウント情報などを適宜変更してください。
import os import tempfile import smtplib from email.MIMEText import MIMEText from email.MIMEMultipart import MIMEMultipart from email.MIMEAudio import MIMEAudio from email.Header import Header from email.Utils import formatdate GMailAccount = 'your_account@gmail.com' GMailPasswd = "your_password" CHANNEL = "ABC" TIME = 1800 RTMPDUMP = "/usr/local/bin/rtmpdump" FFMPEG = "/usr/bin/ffmpeg" SUBJECT = 'radiko' def make_message(sender, to, subject, body, mp3file): encoding = 'utf-8' msg = MIMEMultipart() msg['Subject'] = Header(subject, encoding) msg['From'] = sender msg['To'] = to msg['Date'] = formatdate() content = MIMEText(body.encode(encoding), 'plain', encoding) msg.attach(content) if mp3file: with open(mp3file) as io: attachment = MIMEAudio(io.read(), "mpeg", name=os.path.basename(mp3file)) msg.attach(attachment) return msg def send_mail(mp3file, sender=GMailAccount, to=GMailAccount, subject=SUBJECT, body=""): host = 'smtp.gmail.com' msg = make_message(sender, to, subject, body, mp3file) smtp = smtplib.SMTP(host, 587) try: smtp.ehlo() smtp.starttls() smtp.ehlo() smtp.login(GMailAccount, GMailPasswd) smtp.sendmail(sender, to, msg.as_string()) finally: smtp.quit() def main(): flvfile = tempfile.NamedTemporaryFile(delete=False, suffix=".flv") mp3file = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") flvfile.close() mp3file.close() rtmpdump_options = { "rtmp" : 'rtmpe://radiko.smartstream.ne.jp', "port" : "1935", "app" : '%s/_defInst_' % CHANNEL, "playpath" : 'simul-stream', "swfUrl" : 'http://radiko-dl.ssdl1.smartstream.ne.jp/radiko-dl/1.1/player/player_0.1.2.swf', "pageUrl" : 'http://radiko.jp/player/player.html#%s' % CHANNEL, "flashVer" : '"LNX 10,0,45,2"', "live" : "", "stop": str(TIME), "flv" : flvfile.name } ffmpeg_options = { "y" : "", "i" : flvfile.name, "ac" : "1", "ab" : "32", } rtmpdump_cmd = "%s %s" % (RTMPDUMP, " ".join(("--%s %s" % (k, v) for k, v in rtmpdump_options.iteritems()))) ffmpeg_cmd = "%s %s %s" % (FFMPEG, " ".join(("-%s %s" % (k, v) for k, v in ffmpeg_options.iteritems())), mp3file.name) try: print rtmpdump_cmd os.system(rtmpdump_cmd) print ffmpeg_cmd os.system(ffmpeg_cmd) send_mail(mp3file=mp3file.name) finally: os.unlink(flvfile.name) os.unlink(mp3file.name) if __name__ == '__main__': main()