RD-XS41のネットdeナビを解析

東芝のHDD/DVDレコーダーRD-XS41はLAN接続したPCのWebブラウザから録画予約の確認、削除、登録などが行えるネットdeナビという機能がある。これをザウルスSL-C760wgetコマンドから使えたら何かと便利だろうと思って調べてみた。
録画予約の登録はPOSTでクエリ送信しなければならないんだけど、SL-C760標準のwget 1.7はPOSTに対応していないので、Soon Hot, Soon Cold.で公開されているザウルス用 wget 1.10.2をインストールしておく。
あとはネットdeナビでのやりとりを、Internet ExplorerのプロキシにBlackJumboDogを指定してトレース表示を見るとか、FirefoxLive HTTP headersアドオンで見るとかで解析。

録るナビのメニュー内で使われるディレクトリ名を取得する

/program/b_proginfo.htm を取得し、フレーム「main」が示すアドレスのディレクトリ名を取得する。以後、全てこのディレクトリ下にあるページを取得するものとする。(以後の例ではディレクトリ名が「/program/196/」であることを前提に記述する)
RD-XS41IPアドレスが192.168.0.150、本体ユーザー名がTOSHIBA、本体パスワードがTOSHIBAの場合(以後の例も同様)、以下のようにwgetコマンドを入力する。

/opt/QtPalmtop/bin/wget --http-user=TOSHIBA --http-passwd=TOSHIBA\
 http://192.168.0.150/program/b_proginfo.htm

予約一覧を取得する

program.htm を取得する。予約詳細が必要な場合は、a hrefタグで囲まれた予約名に対応するアドレスを取得する。アドレスの末尾に付いている番号は予約番号から1を引いたものに相当する模様。

/opt/QtPalmtop/bin/wget --http-user=TOSHIBA --http-passwd=TOSHIBA\
 http://192.168.0.150/program/196/program.htm

予約詳細のクッキーを取得する

予約の詳細表示、削除、登録にはクッキーが必要となるので、予約一覧で得られた予約名に対応するアドレスからページを取得する。以下の例ではクッキーはcookies.txtに保存される。

/opt/QtPalmtop/bin/wget --http-user=TOSHIBA --http-passwd=TOSHIBA\
 --save-cookies cookies.txt http://192.168.0.150/program/196/b_proginfo.htm?0

予約詳細を取得する

クッキーを指定して、proginfo.htm を取得する。以下の例ではクッキーにcookies.txtを指定している。

/opt/QtPalmtop/bin/wget --http-user=TOSHIBA --http-passwd=TOSHIBA\
 --load-cookies cookies.txt http://192.168.0.150/program/196/proginfo.htm

予約の削除を行う

クッキーを指定して、delete.htm を取得する。以下の例ではクッキーにcookies.txtを指定している。取得した delete.htm の「msg=」に続く文字列が「正しく削除されました。」ならば正常に削除できたことを示す。

/opt/QtPalmtop/bin/wget --http-user=TOSHIBA --http-passwd=TOSHIBA\
 --load-cookies cookies.txt http://192.168.0.150/program/196/delete.htm

予約の登録を行う

クッキーを指定し、予約内容のパラメータをPOSTで送信して、entry.htm を取得する。entry.htm の「msg=」に続く文字列が「正しく登録されました。」ならば正常に登録できたことを示す。

/opt/QtPalmtop/bin/wget --http-user=TOSHIBA --http-passwd=TOSHIBA\
 --load-cookies cookies.txt --post-data "bExec=ON&title_name=&genre=10&\
channel=12&date=2007%2F07%2F07%28%93y%29&start_hour=10&start_minute=57&\
end_hour=11&end_minute=57&disc=0&vrate=9200&amode=2&gcode_name=&dvdr=4&\
aspect=1&bVPerform=0&bAutoChapter=0&detail=&dtv_sid=0&dtv_nid=0&net_link=0&\
end_form=0" http://192.168.0.150/program/196/entry.htm

POSTで送信するパラメータは「&」で区切り、末尾に「&end_form=0」を指定する。各パラメータの意味は以下の通り。

  • bExec(実行:ON…チェック有り、OFF…チェック無し)
  • title_name(予約名:シフトJIS文字列で指定する。各バイトを%xxの16進数2桁で指定しても良い。)
  • genre(ジャンル:0〜9…RDのジャンル設定内容、10…ジャンルなし)
  • channel(CH:1〜62…CH 1〜CH 62、101〜115…BS1〜BS15、201〜203…Line1〜Line3)
  • date(録画年月日:1〜7…毎 日曜日〜毎 土曜日、8〜10…毎 月〜木、毎 月〜金、毎 月〜土、11…毎日、YYYY/DD/MM(曜)…年月日(曜)で指定、曜は日〜土をシフトJIS、(曜)は省略可)
  • start_hour(開始:0〜23…時)
  • start_minute(開始:0〜59…分)
  • end_hour(終了:0〜23…時)
  • end_minute(終了:0〜59…分)
  • disc(記録先:0…HDD、1…DVD、2…AB面)
  • vrate(画質:1…SP 4.4/4.6、2…LP 2.0/2.2、4…ジャスト、1400〜9200…MN 1.4〜MN 9.2)
  • amode(音質:1…M1、2…M2、3…L-PCM)
  • gcode_name(Gコード
  • dvdr(DVD互換モード:1…切、4…主音声、5…副音声)
  • aspect(DVD-Video記録時画面比:1…4:3固定、2…16:9固定)
  • bVPerform(高レート節約:0…切、1…入)
  • bAutoChapter(無音部分・自動チャプター分割:0…切、1…入)
  • detail(番組説明:シフトJIS文字列で指定、改行コードは%0D%0Aを使用)
  • dtv_sid(デジタルチューナー内蔵テレビ連動用?:常に0を指定)
  • dtv_nid(デジタルチューナー内蔵テレビ連動用?:常に0を指定)
  • net_link(不明:常に0を指定)