So-net無料ブログ作成
検索選択

radiko録音その4(Mac) [Mac]

--- 2013/12/13 追記----------------------
AK120はmp3タグがid3v2.4 (ffmpeg default) だと文字化け起こすのでid3v2.3に設定とか。(緑文字)
--- 2013/04/14 追記----------------------
iOS device 同期とかはこっち 
--- 2013/01/08 追記----------------------
いつの間にやらffmpegの-metadataに
設定した文字列が反映されなくなってる!!
※ffmpegのパラメータ順序を変更したら直ったよw(黄色部分)
  -metadata XX=zzz の後に出力ファイル意外のパラメータを指定するとNGっぽい
 (真面目に調べた訳ではないのでまぁ、こんな感じで)

 ・Mountain Lion 10.8.2 
 ・Xcode 4.5.2
 ・ffmpeg version 1.0.1
--- 2012/10/26 追記----------------------
googleやら掲示板やら見て修正 (赤ぢ部分)
-----------------------------------------

なんかradikoの認証方式がかなり変わったようです...。

0.前提
 (1) 要 Xcode
 (2) 要 rtmpdump、ffmpeg、wget、base64、swftools
 (3) スクリプトのPATHは適宜置換えでよろ。(/opt/local/bin;/usr/local/binなど...)

1.スクリプトを配置(その1)
  以下のスクリプトをホームディレクトリに置いて、chmod 755 radiko4.kshを実行
  radiko4.ksh
#!/bin/ksh #----------------------------------------------------------------- # $1:ID (必須) # TBS TBSラジオ # QRR 文化放送 # LFR ニッポン放送 # NSB ラジオNIKKEI # INT INTERFM # FMT TOKYO FM # BAYFM78 BayFm # NACK5 NACK5 # JORF ラジオ日本 # YFM FM yokohama # --------------------- # ABC ABCラジオ # MBS MBSラジオ # OBC ラジオ大阪 # CCL FM COCOLO # 802 FM802 # FMO FM大阪 # # $2:OFILE (必須) # 任意のファイル名(UTF-8可) # $3:TIME (必須) # 録音時間(分) # # -t "VALUE" (省略可) # タイトル # -a "VALUE" (省略可) # アーティスト # -A "VALUE" (省略可) # アルバム # -g "VALUE" (省略可) # ジャンル #----------------------------------------------------------------- export LANG="ja_JP.UTF-8" LC_ALL="ja_JP.UTF-8" USAGE=\ "Usage:$0 ID OFILE TIME [-t \"TITLE\"] [-a \"ARTIST\"] [-A \"ALBUM\"] [-g \"GENRE\"]" if [ $# -lt 3 ];then print "${USAGE}\n`head -n36 $0 | grep -v ksh | sed 's/^#//g' `" 1>&2 exit 1 fi ID="$1" OFILE="$2" TIME=$3 #------------------------------------------# GetAuth_SRC="${HOME}/get_auth.sh" #------------------------------------------# TOUT=1800 # sec DELAY=20 # sec RDIR=/tmp CODEC=libmp3lame ####CODEC=libfaac ((TIME=TIME*60+DELAY)) DATE1=$(date +%Y-%m-%d_%H.%M.%S) DATE2=$(echo ${DATE1} | cut -c1-10) YEAR=$(echo ${DATE1} | cut -c1-4) shift 3 while getopts a:g:t:A: opt do case ${opt} in t) TITLE="${OPTARG} ${DATE2}";; a) AUTHOR="${OPTARG}";; g) GENRE="${OPTARG}";; A) ALBUM="${OPTARG}";; *) echo ${USAGE} 1>&2 exit 1;; esac done if [ "${CODEC}" = "libmp3lame" ];then RFILE="${RDIR}/${ID}_${OFILE}_${DATE1}.mp3" ID3V="-id3v2_version 3" else RFILE="${RDIR}/${ID}_${OFILE}_${DATE1}.m4a" fi ### authentication RAuth=`${GetAuth_SRC}` set -- ${RAuth} playerurl=$1 authtoken=$2 /usr/local/bin/rtmpdump -B ${TIME} -m ${TOUT} -qvr \ rtmpe://w-radiko.smartstream.ne.jp/${ID}/_definst_/simul-stream.stream \ -W ${playerurl} -C S:"" -C S:"" -C S:"" -C S:${authtoken} \ -o - 2>/dev/null | \ /opt/local/bin/ffmpeg -y -i - ${ID3V} -vn -acodec ${CODEC} -ar 44100 -ab 196608 -ac 2 \ -metadata author="${AUTHOR}" \ -metadata artist="${AUTHOR}" \ -metadata title="${TITLE}" \ -metadata album="${ALBUM}" \ -metadata genre="${GENRE}" \ -metadata year="${YEAR}" \ "${RFILE}" > /dev/null 2>&1 #---- Lion 10.7.X 2012/03/19 if (( $(sw_vers -productVersion | awk -F"." '{ print $1$2}') >= 107 )); then F_DIR="Automatically Add to iTunes.localized" else F_DIR="iTunes に自動的に追加" fi ### iTunes_DIR=`find "${HOME}" -name "iTunes に自動的に追加" -type d | grep -vi trash` iTunes_DIR=`find ${HOME} -name "${F_DIR}" -type d | grep -vi trash` if [ "${iTunes_DIR}" ]; then cp "${RFILE}" "${iTunes_DIR}" if [ "$?" = "0" ]; then rm -f "${RFILE}" fi fi
2.スクリプトを配置(その2) 以下のスクリプトをホームディレクトリに置いて、chmod 755 get_auth.shを実行 ※1 上記 radiko4.kshから実行されるサブシェル ※2 参考にさせて頂いたのはこちらのスクリプト ⇒ 簡易radiko録音ツール  get_auth.shはPCに一時ファイルを一切吐かないように上記で参考にしたスクリプト内容を変更してます。  (某pngファイルの表示内容に対するささやかな抵抗?w) get_auth.sh
#!/bin/sh playerurl=http://radiko.jp/player/swf/player_3.0.0.01.swf # # access auth1_fms # auth1_fms=`/usr/local/bin/wget -q \ --header="pragma: no-cache" \ --header="X-Radiko-App: pc_1" \ --header="X-Radiko-App-Version: 2.0.1" \ --header="X-Radiko-User: test-stream" \ --header="X-Radiko-Device: pc" \ --post-data='\r\n' \ --no-check-certificate \ --save-headers \ https://radiko.jp/v2/api/auth1_fms \ -O -` if [ $? -ne 0 -o ! "${auth1_fms}" ]; then echo "failed auth1 process" 1>&2 exit 1 fi # get keydata # get partial key # authtoken=`echo ${auth1_fms} | perl -ne 'print $1 if(/x-radiko-authtoken: ([\w-]+)/i)'` offset=`echo ${auth1_fms} | perl -ne 'print $1 if(/x-radiko-keyoffset: (\d+)/i)'` length=`echo ${auth1_fms} | perl -ne 'print $1 if(/x-radiko-keylength: (\d+)/i)'` partialkey=`/usr/local/bin/wget -q -O - ${playerurl} 2>/dev/null | \ /opt/local/bin/swfextract -b 14 /dev/stdin -o /dev/stdout | \ dd bs=1 skip=${offset} count=${length} 2> /dev/null | \ /opt/local/bin/base64` if [ $? -ne 0 -o ! "${partialkey}" ]; then echo "failed auth1 process" 1>&2 exit 1 fi # # access auth2_fms # auth2_fms=`/usr/local/bin/wget -q \ --header="pragma: no-cache" \ --header="X-Radiko-App: pc_1" \ --header="X-Radiko-App-Version: 2.0.1" \ --header="X-Radiko-User: test-stream" \ --header="X-Radiko-Device: pc" \ --header="X-Radiko-Authtoken: ${authtoken}" \ --header="X-Radiko-Partialkey: ${partialkey}" \ --post-data='\r\n' \ --no-check-certificate \ https://radiko.jp/v2/api/auth2_fms \ -O -` if [ $? -ne 0 -o ! "${auth2_fms}" ]; then echo "failed auth2 process" 1>&2 exit 1 fi ### echo "authentication success" 1>&2 areaid=`echo ${auth2_fms} | perl -ne 'print $1 if(/^([^,]+),/i)'` ### echo "areaid: ${areaid}" 1>&2 echo "${playerurl}" "${authtoken}"
3.スクリプトの実行方法  ⇒ 面倒なので省略 ⇒ 「radiko録音(Mac)」、「radiko録音その2(Mac)」、「radiko録音その3(Mac)」    あたりを参照してください。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この記事のトラックバックURL:
※言及リンクのないトラックバックは受信されません。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。