2011年1月17日月曜日

radikoを聞くperlスクリプト書いた

ポイントはforkして指定した時間で落とすこと


#!/usr/bin/perl
################################################
# radiko を聞くスクリプト
# 引数で制御する
#
# ヘルプを表示するにはh
# radiko.pl -h
################################################
use strict;
use warnings;
use Getopt::Std;

my %opt;
getopts("hc:f:t:",\%opt);

if (exists $opt{h}){
print << "HELP";
usage: radiko.pl [-h] [-c channel] [-f outfile] [-t playtime]
-h
 print this message

-c channel
 select play channel
 default: LFR
 * FMT  TOKYO FM
 * FMJ  J-WAVE
 * LFR  nippon housou
 * TBS  TBS radio

-f outfile
 default: /tmp/channel.flv

-t playtime
 default: 1 hour
HELP
exit;
}

my $CHANNEL;
if (exists $opt{c}){
 $CHANNEL=$opt{c};
}
else {
 $CHANNEL="LFR";
}

my $OUTFILE;
if (exists $opt{f}){
 $OUTFILE=$opt{f};
}
else{
 $OUTFILE="/tmp/$CHANNEL.flv";
}

my $PLAYTIME;
if (exists $opt{t}){
 $PLAYTIME=$opt{t} * 60 * 60;
}
else{
 $PLAYTIME= 1 * 60 * 60;
}

unlink $OUTFILE if -e $OUTFILE;

my $com = << "CMD";
rtmpdump -v -e -s 'http://radiko.jp/player/swf/player_2.0.1.00.swf' \\
-r 'rtmpe://radiko.smartstream.ne.jp/$CHANNEL/_defInst_' \\
--playpath 'simul-stream?ucid=1dbab2acb98174787146465a40ba9eba' \\
-p 'http://radiko.jp/player/player.html' \\
-f 'WIN 10,1,102,64' \\
-o $OUTFILE
CMD

print "${com}\nplaytime=$PLAYTIME\n";

my $pid=fork;
die $! unless defined $pid;
print $pid;

if ($pid){
 sleep $PLAYTIME;
 kill 9,$pid;
}
else{
 exec "$com";
}

0 件のコメント: