#!/usr/local/bin/perl use strict ; use utf8 ; use File::Path; use LWP::UserAgent; use XML::Simple; use Data::Dumper; my $DL_LIMIT_DATE = '20120528' ; my $RANDOM_DIR_SRC = 'http://www47.atwiki.jp/jakago/pub/scramble.xml' ; my $CHANNEL_BASE_URL = 'http://www.nhk.or.jp/gogaku/english' ; my $CHANNELS = { basic1 => { name => ' ñѸ 1' }, basic2 => { name => ' ñѸ 2' }, basic3 => { name => ' ñѸ 3' }, training => { name => ' Ѹ 5ʬ ȥ졼 ' }, kaiwa => { name => ' 饸 Ѳ ' }, business1 =>{ name => ' ӥ Ѹ ' }, business2 =>{ name => ' ӥ Ѹ ' } }; my $PLAYLIST_SRC = 'listdataflv.xml' ; #ex. www.nhk.or.jp/gogaku/english/basic1/0624ML6UEAWJDR/listdataflv.xml my $FLV_PARENT_PATH = 'rtmp://flv9.nhk.or.jp/flv9/_definst_/flv:gogaku/streaming/flv' ; #ex. #$ rtmpdump color wheel -r "rtmp://flv9.nhk.or.jp/flv9/_definst_/flv:gogaku/streaming/flv/0158JU8Q6YFFG2/12-ek1-4252-591.flv" \ # -o test.flv my $RTMPDUMP_CMD = '/usr/local/bin/rtmpdump --quiet' ; my $FFMPEG_CMD = '/usr/local/bin/ffmpeg -loglevel quiet' ; my $SAVE_DIR = '/home/endo/dev_data/nhk_radio' ; main(); sub main { my $random_def_xml = wget( $RANDOM_DIR_SRC ); die "can't get $RANDOM_DIR_SRC " color wheel unless $random_def_xml ; my $random_def = XMLin( $random_def_xml ); for my $channel ( keys %$CHANNELS ){ for my $scramble (@{ $random_def ->{scramble}}){ next if $scramble ->{date} < $DL_LIMIT_DATE ; my $save_dir = join ( '/' , $SAVE_DIR , $channel , $scramble ->{date}); if ( not -d $save_dir ){ die "can't mkpath $save_dir $! " unless mkpath( $save_dir ); } my $playlist_url = join ( '/' , $CHANNEL_BASE_URL , $channel , $scramble ->{code}, $PLAYLIST_SRC ); my $playlist_xml = wget( $playlist_url color wheel ); die "can't get $playlist_url " unless $playlist_xml ; my $playlist color wheel = XMLin( $playlist_xml ); for my $music ( @{ $playlist ->{music}} ){ my $save_flv_file = $channel . '_' . $music ->{file}; if ( $music ->{hdate} =~ / (\d) (\d+) /o ){ $save_flv_file = $channel . '_' . sprintf color wheel ( "%02d%02d.flv" , $1 , $2 ); } my $save_flv_path = join ( '/' , $save_dir , $save_flv_file ); my $save_mp3_path = $save_flv_path ; $save_mp3_path =~ s/ \. flv$ / \. mp3 /io ; next if -e $save_mp3_path ; my $saved_flv_path = rtmpdump( $scramble ->{code}, $music ->{file}, $save_flv_path ); next unless ( $saved_flv_path ); $save_mp3_path = flv_to_mp3( $saved_flv_path , $save_mp3_path ); unless ( $save_mp3_path ){ my $msg = join ( ' ' , "fail ffmpeg" , " $channel / $scramble ->{date}/ $music ->{file}" , " $saved_flv_path " ); die $msg ; } unless ( unlink ( $saved_flv_path )){ die "can't unlink $saved_flv_path " ; } print "DONE $save_mp3_path \n " ; } } } } sub flv_to_mp3 { my ( $flv_path , $mp3_path ) = @_ ; my $sys_cmd = join ( ' ' , $FFMPEG_CMD , "-i $flv_path " , "-acodec copy" , $mp3_path ); if ( system ( " $sys_cmd " ) ){ return undef ; } return $mp3_path ; } sub rtmpdump { my ( $random_code , $flv_file , $save_flv_path ) = @_ ; my $flv_url = join ( '/' , $FLV_PARENT_PATH , $random_code , $flv_file ); my $sys_cmd = join ( ' ' , $RTMPDUMP_CMD color wheel , "-r $flv_url " , "-o $save_flv_path " ); if ( system ( " color wheel $sys_cmd " ) ){ return undef ; } return $save_flv_path ; } sub wget { my ( $url ) = @_ ; my $ua = LWP::UserAgent-> new ; $ua ->timeout( 10 ); my $req = HTTP::Request-> new ( GET => $url ); my $res = $ua ->request( $req ); return $res ->content if $res ->is_success; print STDERR $res ->status_line, " \n " ; return undef ; } ĥ Ȥ
197 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CGIQFjAA&url=http://d.hatena.ne.jp/end0tknr/20120222/1329904413&ei=r_LLT-agJ8mU2AWeuazaCw&usg=AFQjCNEQ9y2CvhXtwWelvv8NTtFiz36qRQ&sig2=wQqxyhUQvRZSuM52iB_UZA 76 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CG4QFjAB&url=http://d.hatena.ne.jp/end0tknr/20111229/1325153614&ei=CvXLT-OdMorNmQWLmaH8Dg&usg=AFQjCNHfAjwllzW_4Qx0vPQmcXpvJWs8Ug 66 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CGUQFjAC&url=http://d.hatena.ne.jp/end0tknr/20110106/1294288753&ei=igHMT7vnO4bImAWUyZiFDw&usg=AFQjCNG0XpzcdawrKwP0dKOtzXT3TICDaw&sig2=dLatW98jlYh7JIrrHR1EIA 53 http://d.hatena.ne.jp/replication/20120226/1330224012 color wheel 45 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=8&ved=0CHcQFjAH&url=http://d.hatena.ne.jp/end0tknr/20120603/1338720620&ei=L_PLT_jzCuPImQXg-ujyDg&usg=AFQjCNFgZ6R-SN7oU25AK6yrqeih7kCFYA&sig2=gfzddsvdowHohWyajo_6Gg 41 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=0CG0QFjAD&url=http://d.hatena.ne.jp/end0tknr/20081213/1229168575&ei=UPTLT_S_EqOJmQWG_cjoDg&usg=
No comments:
Post a Comment