#setlinebreak(on) &size(30){ここの記述は仕様変更により古くなり利用できません。}; &size(24){新使用対応については[[GetAG.sh]]をごらんください。}; *GetAsf.sh [#h9faec4a] スクリプト内容を説明していきます。 改変を繰り返しているので、冗長なコード(意味のない変数など)が含まれていますが 気にしないでください。 なおスクリプトは添付ファイルとしてつけてあります。 まずは引数チェックといろいろな変数の設定を行います。 #sh("bash;highlight:[23,24,29]"){{ #!/bin/sh export PATH=$PATH:/home/users/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/\usr/local/sbin:/usr/local/bin export LD_LIBRARY_PATH=/home/users/lib export PERL5LIB=/home/users/lib/perl5/lib/perl5:/home/users/lib/perl5/lib/perl5/perl5/i386-freebsd-64int # args check if [ $# -ne 8 ]; then echo "usage : $0 OUTFILE_SUFFIX REC_TIME(s) "\ "STREAM(V/A) UPLOAD(0/1) COMMENT DL_PASS RM_PASS BIWEEK(0/1)" exit 1; fi SUFFIX=$1 REC_TIME=$2 STREAM=$3 UPLOAD_F=$4 COMMENT=$5 DL_PASS=$6 RM_PASS=$7 BIWEEK_F=$8 rtspurl="rtsp://1134mb-live3.daijinakoto.com/uniqueradio%5C2ch_movie" ftpaccount_pass=xxxxx:passpass; ftpurl="ftp://ftp.4shared.com"; #posturl="http://www6.puny.jp/uploader2/upload/"; working_dir=/home/users/REC posted_dir=/home/users/000 check_biweek_dir=/home/users/100 sid='*****DRM-KEY SID*****' # }} 23,24行目でftpアップロードするためのID,password,URLを設定しています。 >ftpaccout_pass=user:passs とコロンで区切って入れてください。 working_dirにアーカイブが残ります。 29行目はDRMを解除するときに使うSIDを入れます。最近では簡単に手に入らないかもしれません。 #sh("bash;first-line:31;highlight:[38,55]"){{ now=`date '+%Y-%m-%d-%H%M'`; comment_date=`date '+%m%d'`; ftpdir=Public/Radio/`date '+%Y-%m'`; check_date=`date -v -1w '+%Y-%m-%d-%H%M'`; check_file=$check_date-fix-$SUFFIX.asf if ( [ $BIWEEK_F -eq 9 ] ); then today=`date -v -6H '+%d'`; weekly=`date -v -6H '+%u'`; checkmonday=$(expr $today - $weekly + 1); if ( [ $checkmonday -le 0 ] ); then exit 0; fi if ( [ $checkmonday -ge 8 ] && [ $checkmonday -le 14 ] ); then exit 0; fi if ( [ $checkmonday -ge 22 ] && [ $checkmonday -le 28 ] ); then exit 0; fi fi if ( [ $BIWEEK_F -eq 1 ] && [ -f $check_biweek_dir/$check_file ] ); then rm -f $check_biweek_dir/$check_file; exit 0; fi # }} ここではこれであっているのかわからないですが隔週、月2回放送に対応するためのロジックを書いてあります。 $BIWEEK_Fに'9'が入っていた場合、月2回で'1'が入っていた場合は隔週です。 AGQRの月2回とは基本的に第1,3月曜日がある週に放送が更新されるので、めんどくさいことをしています。 隔週の場合は前回の保存時に作ったファイルが$check_biweek_dirの下にあるかどうかで動作をトグルするようにしています。 #sh("bash;first-line:60;highlight:[66,72,73,74,75,77,78,79,91]"){{ cd $working_dir outfile=$now-$1.asf; outasffile=$now-fix-$1.asf; upfile=$now-fix-$1-AG.asf.zip; [ $BIWEEK_F -eq 1 ] && touch "$check_biweek_dir/$outasffile"; ##### msdlretry=0; while : do roundrobbin=`date '+%S'`; index=$(expr $roundrobbin % 4); index=$(expr $index + 1); rtspurl=rtsp://1134mb-live${index}.daijinakoto.com/uniqueradio%5C2ch_movie msdl -a 10 -q --stream-timeout $REC_TIME \ -o $working_dir/$outfile \ $rtspurl if ( [ $? -eq 0 ] ); then break; fi msdlretry=$(expr $msdlretry + 1); if ( [ $msdlretry -ge 5 ] ); then echo "MSDL ERROR"; exit 1; fi # echo $rtspurl $msdlretry; sleep 5; done #### echo $sid | FreeMe2 2 $outfile 2>/dev/null #### }} 66行目で隔週用の「保存した印」ファイルを作っておきます。 72~75行目は4つあるストリーミングURLを適当に選ぶような仕組みです。 接続に失敗したら5回までリトライするので、そのたびに変わるようにしたかったのですが、 これでは同じURLを選択する可能性もあります。 77~79行目でmsdlで実際に接続、保存をおこなっています。 91行目でFreeMe2を使ってDRMを解除しています。 #sh("bash;first-line:94;highlight:[94,102,112,143,145,148,159]"){{ if ( [ $STREAM = 'V' -o $STREAM = 'v' ] ); then wine asfbin -q -i Freed-$outfile -o $outasffile>/dev/null; else wine asfbin -q -nostr 2 -i Freed-$outfile -o $outasffile>/dev/null; fi rm -f $outfile Freed-$outfile #zip -q -P $DL_PASS $upfile $outasffile gpg --options /home/users/.gnupg/opt.txt $outasffile ##### posturl=`PostURL.pl $upfile`; if ( [ $posturl = 'NONE' ] ); then UPLOAD_F=0; fi if ( [ $UPLOAD_F -eq 1 ] ); then tmpfile=/tmp/aaa.$$ curl -s \ -F "file=@$upfile;type=application/x-zip-compressed" \ -F "comment=$COMMENT-$comment_date" \ -F "download_pass=$DL_PASS" \ -F "remove_pass=$RM_PASS" \ -F 'code_pat=京' \ --retry 5 \ --retry-delay 10 \ $posturl >$tmpfile echo $posturl > $posted_dir/$upfile GetId.pl $tmpfile > $posted_dir/$upfile.info rm -f $tmpfile; POSTURL=`cat $posted_dir/$upfile | sed 's/\/upload\//\/download\//'` ID=`cat $posted_dir/$upfile.info` TW.pl "[$upfile] is uploaded. $POSTURL$ID.zip" >/dev/null fi ###### DB=/home/users/.gnupg/Sessionkeys.db key=`gpg -o /dev/null --batch --show-session-key $outasffile.gpg 2>&1| perl -ne 'print $1 if (/gpg: session key:\s+.(\w+:\w+)/)'` sqlite3 $DB "insert into sKey values('$outasffile.gpg', '$key');" Update-crk.sh $working_dir/$outasffile.gpg curl -s \ -T "$outasffile.gpg" \ -u "$ftpaccount_pass" \ --retry 20 \ --retry-delay 10 \ --connect-timeout 300 \ --ftp-create-dirs \ $ftpurl/$ftpdir/ >/dev/null TW.pl "[$outasffile.gpg] is uploaded." >/dev/null rm -f $upfile $outasffile.gpg exit 0; }} 94行目で動画付きかどうかでasfbinの動作をかえています。音声放送であれば音声だけ抜き取ります。 asfbinはFreebsdでは動かないのでwindows版をwineで動かしています。 コーデック情報がくずれてしまうけど[[ffmpeg:http://ffmpeg.org/]]でASFコンテナの入れ直しでもいいはずです。 >ffmpeg -codec copy -i input.asf output.asf みたいな 情報がおかしくなるのはffmpegがwindows video v9にまだ対応していないためです。 102行目でgpgを使って暗号化しています。opt.txtには登録された公開鍵が記述されています。 112行目からのcurlまででアップローダにあげる作業をしていますが、今はもう使っていません。 curlはhttpのPOSTメソッドでファイルを送ることができるので便利です。引数などは「ぷ!」用です。 143行目で[[セッションキー]]をdbファイルに書き込んでいます。 145行目は[[quickダウンロード:http://quick-dl.co.cc/]]用のファイルコピーなどを行っています。 148行目で[[crk.4shared.com]]にftpアップロードしています。curlは便利だ。 159行目のTW.plはTwitterに投稿するためのperlスクリプトです。 "perl twitter"で検索すれば簡単に見つかるものです。