★★★【「図解表現」の技術が身につく本 竹内元一著 PHP文庫】
|
【題名】「図解表現」の技術が身につく本―すぐに使えるビジュアル資料作成のノウハウ満載 (PHP文庫) 【作者】竹内 元一 【制作】PHP研究所 【価格】¥ 520¥ 1,900 【発売】2003-10-02 【ASIN】4569660673 【データ取得日】Sat Oct 13 21:21:04 2007 |
インターネットTVガイドや
テレビ王国で利用可能な
iEPGを利用したテレビ予約の仕組みです。
出来るだけ簡単な実装を心がけています。
クライアント側は、WebブラウザでiEPG情報をダウンロードする。
例えば、インターネットTVガイドでは
番組表の[iEPG]のマークをクリックすることで、
下記のようなデータがダウンロード出来る。
Content-type: application/x-tv-program-info; charset=shift_jis version: 1 station: TVQ year: 2003 month: 11 date: 09 start: 05:00 end: 06:00 program-title: 演歌◇健康
上記のデータにより、(一部の情報を補ってあげれば)録画予約設定に
必要な情報が得られることが分かる。
あとは、この情報を自動的にサーバ側に登録する仕組みを作れば良い。
よって、クライアントサイドで、上記のmime情報を自動的に
処理するスクリプトをブラウザ側に登録する。
下記のスクリプトは/usr/local/bin/iepg.shとして置いておく。
#!/bin/sh # iepg.sh 2003.11.09 Hisaaki Shibata<shibata@luky.org> # nkf -e $1 |mail -s iEPG icommand@server.uriuri.com
いかにも「そのまんま」なスクリプトである(^^;
Subject:やメールの送信先は、適宜変更する必要がある。
次に、
Content-type: application/x-tv-program-infoのデータをダウンロードするときに
このスクリプトが自動的に起動するようにする必要がある。
galeonの場合は、~/.galeon/mimeTypes.xmlに
<mimeitem name="application/x-tv-program-info" action="2" helper="/usr/local/bin/iepg.sh" helperNeedsTerminal="0" helperTakesUrl="0" alwaysUse="1"/>
などと記述すれば良い。
mailの送信先を自分のアドレスにしてみて、テストをすると良いでしょう。
尚、上記を見て気づかれたと思うが、iEPGのフォーマットさえ守れば、
人間がメールを送っても同じ事が出来る。
同じチャネルで連続して録画したいときなどは、独自にメールを作成して
送ればいいでしょう。
サーバ側は、クライアント側から送信されたメールを処理して、
しかるべき時刻に録画コマンドを起動する処理をおこなう必要がある。
/etc/aliasesに下記のような記述を追加し、root権限でnewaliasコマンドを実行する。
icommand: "|/usr/local/bin/icommand.sh"
つまり、icommand@server.uriuri.com宛のメールが届くと、
そのメールの内容をicommand.shの標準入力に流し込んで起動すると言う設定である。
/usr/local/bin/icommand.shの内容を下記に示す。
#!/bin/sh
# icommand.sh 2003.11.09 Hisaaki Shibata<shibata@luky.org>
#
nkf -e $1 |sed 's/:/ /g'|awk '
/station KBC/ {channel=1;bc="KBC";}
/station NHK総合/ {channel=3;bc="NHK";}
/station RKB/ {channel=4;bc="RKB";}
/station NHK教育/ {channel=6;bc="NHKedu";}
/station TNC/ {channel=9;bc="TNC";}
/station TVQ/ {channel=19;bc="TVQ";}
/station FBS/ {channel=37;bc="FBS";}
/year / {year=$2;}
/month / {month=$2;}
/date / {date=$2;}
/start / {startH=$2;startM=$3;}
/end / {endH=$2;endM=$3;}
END {if (endH >= startH) {
len = (endH * 60 + endM - startH * 60 - startM) * 60 - 10;
}else {
len = ((24 + endH) * 60 + endM - startH * 60 - startM) * 60 - 10;
}
printf("echo /usr/local/bin/va1000cap.sh %d %d \
/var/tmp/%s-%4d-%02d-%02d_%02d%02d\ > \
/tmp/%4d-%02d-%02d_%02d%02d.shn\
at -f /tmp/%4d-%02d-%02d_%02d%02d.sh\
%02d%02d %4d-%02d-%02d\n,\
channel,len,\
bc,year,month,date,startH,startM,\
year,month,date,startH,startM,\
year,month,date,startH,startM,\
startH,startM,year,month,date);
}
'|sh
上記のスクリプトは、
この例は、福岡市の場合であり、テレビ局名とチェンネル番号は、
各地域毎に作り直す必要がある。
それにしても、こてこての泥臭さである(^^;
さて、上記スクリプトでさらに起動されているva1000cap.shの内容を下記に示す。
#! /bin/sh # va1000cap.shby Hisaaki Shibata <shibata@luky.org>. NAME=va1000cap.sh DATE=`date +%Y%m%d%H%M` /usr/sbin/alsactl -f /home/shibata/asound.state restore /usr/bin/v4lctl setchannel $1 /usr/bin/ffmpeg -f avi -vcodec msmpeg4v2 -hq -acodec mp3 -y -b 1200 -ab 128 -r 30 -s 384x288 -cropbottom 6 -cropleft 4 -cropright 4 -ar 22050 -ac 2 -t $2 $3-c$1-$DATE.avi exit 0
出力AVIファイル名の指定などに冗長なところがあるが、指定した時刻と、
実際に動作した時刻を比較するためのものであり、必要に応じていじっていただきたい。
また、この程度のスクリプトであれば、別途作成せず、
直接icommand.shで記載しても良いと思う。







柴田(ひ)アンテナ