--- 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)」
あたりを参照してください。
2011-03-22 02:11
nice!(0)
コメント(0)
トラックバック(0)
共通テーマ:日記・雑感
コメント 0