■普段使っているブルーレイレコーダーはメーカーがリモート予約サービスというものを運用していて、PCのブラウザからワンクリックで予約に落とせたりするのですが、繰り返し予約などができないので、いまひとつな感じと、インターネットにアクセスするのでセキュリティ的にもすこし心配。録画情報は個人情報の一種でもあることから、そうした情報を外部に抽出されるのもあまり気持ち良いものではない。
だったら作ってしまえばいい。いつものように。
レコーダーにはウェブサーバー機能があって、ウェブページから操作することもできます。なら、そのインターフェースを使えばいい。CURLを使います。
基本的にWebから操作するシーケンスを追いかければいいはずですが、ログイン認証が複雑で、Javascriptを使ってフォームページを生成していたりして、あんまり単純ではありませんでした。結局はWiresharkでWebブラウザとの通信をモニタして裏を取りながらシーケンスを詰めていきました。難関だったのはログイン認証の中でパスワードにレコーダーから発行されるソルトを追加してmd5で暗号化したものをbase64エンコーディングするシーケンスがある部分で、Javascriptのスクリプトを移植することも考えたのですが、PHPのmd5関数とbase64関数で代替できました。
ほかにはユーザーエージェントの文字列を設定しておかないとエラーで返されたり、リファラを省略してはダメだったりとチェックが厳しくなっていました。外部アプリによる自動運転を防ごうとしていたのか、セキュリティを強化しようとしたのか、あるいばブラウザの制約を絞って確実に動作できる環境を作ろうとしたのかは不明。
とりあえず指定したチャンネルと時間帯で録画予約を投入できるプロトタイプができたところ。CURLで次々ページを呼び出すだけになっています。ブルーレイレコーダーのIPアドレスやパスワードを埋め込んでいるので公開できるような恰好になっていませんが、さらに加えて使いやすくするためにAPIを整備したり、「テレビ王国」のiEPGフォーマットに対応させたり、さらにiEPGアドレスをブラウザの右クリックで連携できるようにしたりと作りこむ箇所は多々あるかなと。リビングに入り込むものは単体で閉じることはなくて、幾つかの製品を横断的にまとめるパッケージになるようです。