hakeの日記

Windows環境でプログラミングの勉強をしています。

ネットラジオを簡単に聞く

qshdlgスクリプトの勉強
7月1日の日記に書いたとおりZPlayerのプレイリストからの再生が上手くいかない(ぴろさんのkino2 0.4.2p20でもダメだった)ので、yaktyさんのqshdlgを使ってGUIな環境でリストからURLを選択してmplayerを直接起動するような簡単なランチャープログラムを書いてみました。

追記7月27日の日記で少し改良したものを置きました)

qshdlgをインストールして、下記のスクリプトEUCコードで/home/QtPalmtop/bin/netradioとして保存、chmod +x、適当にホーム画面設定アイコン登録します。URLリストは、/home/zaurus/Documents/netradio.lstに書いておきます。
ブラウザにOperaを使用している場合はネットラジオのページの再生ボタン等をペンで長押ししてメニューからCopy link Addressを選択すればURLがクリップボードにコピーされるので、これをペーストするだけで比較的簡単に登録できると思います。

http://……/xxx.asx
mms://……/xxx.wma
mms://……/xxx.mp3
http://……/xxx.asf

URLを選択してOKで再生開始、stop選択で停止です。一回で停止しない場合はしつこくstop選択です。mplayerの再生停止の方法が良くわからないのでプロセスをkillしてますけど、もっとスマートな方法はないものか。。。
(追加)HKさんにコメントいただいたkillallを使用する方法だと停止失敗しないみたいです。スクリプト修正しました。
(さらに追加)asxファイルからmms://〜を抜き出すのが面倒なのでHKさんのようにwget使って自動でさせるようにしました。


LinuZau ToolBox - qshdlg
http://tbox.jpn.org/wiki/linuzau/wiki.cgi?qshdlg

#!/bin/sh

export QSHDLG_APP=netradio

INPUT=/var/spool/qshdlg/input_$QSHDLG_APP
OUTPUT=/var/spool/qshdlg/output_$QSHDLG_APP
CONTROL=/var/spool/qshdlg/control_$QSHDLG_APP

LIST=/home/zaurus/Documents/netradio.lst
MPLAYER=/home/QtPalmtop/bin/mplayer
TMPFILE=/home/zaurus/Documents/netradio_$$


qshdlg custom -C message -A -f lcfont -t "netradio" -c eucJP -M &

while [ ! -p $CONTROL ]
do
done


echo "URLリスト表示" > $OUTPUT
echo 'item(QString)' "stop" > $CONTROL
while read URL
do
   echo 'item(QString)' "$URL" > $CONTROL
done < $LIST
echo 'showSelect()' > $CONTROL

while read RET < $INPUT
do
  case "$RET" in
    "stop")
         echo "停止します" > $OUTPUT
         killall mplayer
         ;;
    *)
#        echo "ret=$RET" > $OUTPUT
         ASX=`echo $RET | grep -e "\.asx$"`
#        echo "asx=$ASX" > $OUTPUT
         if  [ "$ASX" ]; then
            echo "ASXファイルを取得します" > $OUTPUT
            wget -O $TMPFILE $ASX
            MMS=`cat $TMPFILE | grep "HREF" | sed -e 's/^..*"\(..*\)"..*$/\1/'`
#           echo "mms=$MMS" > $OUTPUT
            echo "$MMS を再生します" > $OUTPUT
            rm $TMPFILE
            $MPLAYER $MMS &
         else
            echo "$RET を再生します" > $OUTPUT
            $MPLAYER $RET &
         fi
         ;;
  esac
done