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";
}