そういえば音泉の録音用にスクリプト書いたけど

公開してませんでした。

追記:スクリプト修正しました。

いやー、我ながら気合い入ったスクリプトですね。rubyの部分は適当ですけど。あ、opensslとwgetとrubyが必要なのでご注意を。

引数なしで実行すると本日更新分を順に録音するか聞いてきます。”q” と打ってエンターキーを押すと終了、”n” だと次の番組。

a オプション
最新更新分じゃなくても録音。
y オプション
昨日更新分を録音。
v オプション
verbose モード。wgetの様子が見えたり一時ファイルを消すか聞いてきます。
w オプション
週番号指定して録音。0から6までで0が日曜日。
#!/bin/bash -e
# onsen.sh Ver. 0.8.4 (2013.02.02)
# recording tool for onsen.ag
# require openssl, wget and ruby

# target date
GOTDATE=`date +%y%m%d`
# precode of POST data
PRECODE=onsen`date +%w%d%H`
# POST data
PDATA="code=`echo $PRECODE | openssl dgst -md5 | sed -e 's/(stdin)= //'`\&file%5Fname=regular%5F"
# week number
REGXMLNUM=`date +%w`
# onsen URL
URL="http://onsen.ag/getXML.php?`date +%s`000"
# tmp file
TMPFILE="/var/tmp/tmp.$$"

AFLAG=FALSE
WGETOPTION=-q
RMOPTION=
OPT=
while getopts ayvw: OPT
do
  case $OPT in
    a) AFLAG=TRUE
       ;; # with all programs on GOTDATE
    y) GOTDATE=`TZ=JST+15 date +%y%m%d`
       REGXMLNUM=`TZ=JST+15 date +%w`
       ;; # yesterday
    v) WGETOPTION=
       RMOPTION=-i
       ;; # verbose mode
    w) REGXMLNUM=$OPTARG
       ;; # indicate week number
    \?) echo "Usage: `basename $0` [-avy] [-w weeknumber]" 1>&2
        exit 1
        ;;
  esac
done
shift `expr $OPTIND - 1`

# download regular XML file
wget ${WGETOPTION} --post-data="${PDATA}${REGXMLNUM}" ${URL} -O ${TMPFILE}

# number of program
PROGNUM=`grep -c '<title>' ${TMPFILE} | cut -d ":" -f2`
#echo "番組数: $PROGNUM"
# index number
i=1
while test ${PROGNUM} -gt 0
do
  PROGNUM=`expr ${PROGNUM} - 1`
  ISNEW=`cat ${TMPFILE} | ruby -rrexml/document -e "puts REXML::Document.new(ARGF).elements[\"data/regular/program/isNew[${i}]\"].text"`
  if test ${AFLAG} = TRUE -a ${ISNEW} = 0 ; then
    ISNEW=1
  fi
  TITLE=`cat ${TMPFILE} | ruby -rrexml/document -e "puts REXML::Document.new(ARGF).elements[\"data/regular/program/title[${i}]\"].text"`
  NUM=`cat ${TMPFILE} | ruby -rrexml/document -e "puts REXML::Document.new(ARGF).elements[\"data/regular/program/number[${i}]\"].text"`
  UPDATE=`cat ${TMPFILE} | ruby -rrexml/document -e "puts REXML::Document.new(ARGF).elements[\"data/regular/program/update[${i}]\"].text" | tr '/' '月' | sed -e 's/$/日配信/'`
  MP3FILE=`cat ${TMPFILE} | ruby -rrexml/document -e "puts REXML::Document.new(ARGF).elements[\"data/regular/program/fileUrlIphone[${i}]\"].text"`
  i=`expr ${i} + 1`
  if test ${ISNEW} != 1 ; then
    continue
  fi
  # Question
  echo -n "Record \"${TITLE} 第${NUM}回(${UPDATE}).mp3\"?[Yes/no/quit] "
  read ANSWER
  case `echo "$ANSWER" | tr [A-Z] [a-z]` in
  no | n ) ANSWER=no
           continue
           ;;
  quit | q ) break
             ;;
  * ) ANSWER=yes
      ;;
  esac

  wget ${WGETOPTION} -O "${TITLE} 第${NUM}回(${UPDATE}).mp3" ${MP3FILE}
done

rm ${RMOPTION} ${TMPFILE}
exit 0

参考

Webラジオ 質問掲示板 兼 ハヤテのごとく!応援同盟 雑談掲示板

広告