****************************************
***** ptTimer 用リモート予約ツール *****
****************************************

このプログラムはWebブラウザを通じて、ptTimerの番組情報や予約一覧にアクセス
する為のものです。番組表を通じて予約を追加したり、予約一覧でエラーになって
いる予約が無いか確認したり、自動検索予約のキーワードを追加したり変更したり
削除したりする事ができます。

プログラムは簡易的な HTTP サーバーとして動作し、ptTimer のプログラム情報や
番組情報へアクセスする為の Web API を実装しています。

HTTP サーバー機能は本当に簡易的な物である為、html や css, js と一般的な画像
ファイル(jpeg, png, gif)しか取り扱えません。
アクセスログは起動した時のカレントディレクトリに作成されます。アクセスログ
のフォーマットは某プログラムを真似ています。

プログラム起動後、設定ダイアログが表示されるので、HTTP サーバーとして使う
待受けポート番号や ptTimer の場所、認証用のユーザー名とパスワードを入力して
下さい。
コンテンツの場所はアーカイブを丸ごと解凍したならばそのままで良いはずです。


※※※※※ 0.1.2.0 では 0.4.3.0 以降の ptTimer が必要です ※※※※※


Web ブラウザから利用するには、上記で設定したユーザー名とパスワードの入力が
必要です。最後にアクセスした時から 10 以上経ってアクセスする場合には、再度
パスワードの入力が必要な場合があります。

インターネット経由でアクセスする為にはルータでの設定が必要ですが、それらは
各自の責任において行って下さい。
また、この HTTP サーバーは SSL による暗号通信には対応していません。
(今後対応する予定もありません。)
ユーザー名、パスワードに関してはダイジェスト認証方式により行っていますので
SSL ではない通信でも問題無いと思います。

同梱のコンテンツは一応動作の確認は行っていますが、あくまでもサンプルという
扱いでお願いします。コンテンツ側による動作不良や機能追加などは各自で行って
下さい(基本HTMLとJavaScriptですので簡単かと思います)。

また、付属コンテンツの改変再配布に関しては、このプログラム専用ということで
あれば自由に行う事ができます。
但し、付属ライブラリである jQuery と thinkbox に関しては、そのライブラリの
ライセンスに従って下さい。


動作確認済のブラウザは以下のとおりです。
    IE6-8, Firefox 3.6-5.0, Safari 5.0-5.1, Chrome v12, Opera 9.6-11.11
    iOS 4.3/5.0のMobile Safari, Android 2.2と3.xのMobile Safari
(IE6 および 7 での番組表の表示は表示完了までにかなり時間が掛かります。)


・ 2 枚差しについて

ptTimer の 2 枚差し対応に合わせて、このプログラムも起動オプションで -2 を
追加する事で、対象を 2 枚目用の ptTimer とする事ができます。
※ 1 枚目とは別の待受けポート番号に設定しなければ動作しません。


・ bondriver_rptmr.dll について

当リモート予約ツール経由で他のPCでTvTestを起動して番組を見る事ができます。
bondriver_rptmr.dll と同じディレクトリにある bondriver_rptmr.ini の設定に
従って動作します。当リモート予約ツールの設定値と bondriver_rptmr.ini での
設定値を合わせて下さい。

接続の安定性はリモート予約ツールを動かしているPC、TvTest を動かしているPC
それぞれの負荷状態及び使用するネットワークの通信状態に依ります。
すぐに接続が切れてしまう場合は、bondriver_rptmr.ini の SENDSIZE の値を調整
してみて下さい。(無線LANを利用している場合は SENDSIZE の値を調整しても安定
しない可能性があります)
TCP接続よりUDP接続の方がドロップは多くなりますが、接続が切れる事はほぼ無く
なります。UDP接続時はSENDSIZEの値がUDPでの最大値を越えて設定されている場合
でも、UDPでの最大値が設定されているとして処理されます。

チャンネルスキャンが上手く行かない場合は、bondriver_ptmr.dll 用のチャンネル
ファイルがそのまま使用できますので、bondriver_ptmr.ch2 をコピーして来た後、
bondriver_rptmr.ch2 にファイル名を変更してお使い下さい。

一つのリモート予約ツールは一つの bondriver_rptmr.dll としか通信できません。
別のリモート予約ツールと接続を切替たい場合は、dll と ini を別の名前にコピー
して、ini の内容を別のリモート予約ツールの設定値に合わせる事で行えます。
(TvTest からはドライバの切替えで行って下さい)

※ この機能をインターネット経由で利用する事は絶対に行わないで下さい。
   同じプロバイダを使っている他のユーザーの迷惑になりますし、プロバイダや
   バックボーン回線に多大な負荷を掛ける事になります。
   また、使い方によっては著作権法に違反する可能性があります。


・ Web API について

実装している Web API は以下のものとなります。
引数はすべて GET メソッドで指定して下さい。
ここで使用するパラメータの共通説明がリスト最後にあります。

01.  /api/liveCheck
    ptTimer が起動中かどうかを確認する API
    引数: 無し
    戻り値: 2値
        1=起動中, 0=起動していない

02.  /api/eventSearch
    番組を検索する API
    引数: 以下のとおり
        keyword:   検索キーワード
        sid:       サービスID
        genre:     ジャンルコード
        zonetime:  開始時刻帯
        mode:      モード指定(1=タイトル以外も検索, 0=タイトルのみで検索)
    戻り値: JSON 形式
        [[サービスID, イベントID, 開始時刻, 長さ, チャンネル名, タイトル, 予約済情報], ...]

03a. /api/channelList
    チャンネルリストを取得する API
    引数: 以下のとおり
        mode:      0=地上デジタル, 1=BS, 2=CS
    戻り値: JSON 形式
        {サービスID: [チャンネル名, チャンネル番号], ...}

03b. /api/channelList2
    チャンネルリストを取得する API
    引数: 以下のとおり
        mode:      0=地上デジタル, 1=BS, 2=CS
    戻り値: JSON 形式
        [[サービスID, チャンネル名, チャンネル番号], ...]
    ※ 03a.との違いは戻り値のJSON形式のみ

04.  /api/eventList
    指定したサービスIDの番組一覧を検索する API
    引数: 以下のとおり
        sid:       サービスID
        day:       今日から数えて何日目かを指定(0=今日)
        outline:   戻り値に番組概要を含めるかを指定(1=含める, 0=空文字列)
        detail:    戻り値に番組詳細を含めるかを指定(1=含める, 0=空文字列)
    戻り値: JSON 形式
        [[横位置,  縦位置, 横幅, 高さ, 開始時刻, 終了時刻, 予約済情報, タイトル, 番組概要, ジャンル, 番組詳細]], ...]
    ※ 横位置:     基本的に0。マルチ構成の場合は120の1/2や1/3, 2/3となる
    ※ 縦位置:     当日の5:00からの分数換算に2を掛けた値
    ※ 横幅:       基本的に120。マルチ構成の場合は120の1/2や1/3となる
    ※ 高さ:       番組の長さを分数換算し2を掛けた値

05.  /api/eventDetail
    番組の情報を取得する API
        sid:       サービスID
        eid:       イベントID
    戻り値: JSON 形式
        [サービスID, イベントID, 開始時刻, 終了時刻, 予約済情報, チャンネル名, タイトル, 番組概要, ジャンル, 番組詳細]

06. /api/programList
    録画予約一覧を取得する API
    引数: 無し
    戻り値: JSON 形式
        [[プログラムID, サービスID, イベントID, 開始時刻, 長さ, チャンネル名, タイトル, 毎週指定, サービス指定, 優先度, ステータス]], ...]

07. /api/programRegist
    録画予約を登録する API
    引数: 以下のとおり
        num:       プログラムID(時間指定予約の場合のみ。追加の場合は0を指定)
        sid:       サービスID
        eid:       イベントID(時間指定予約の場合は0を指定)
        begin:     開始時刻(時間指定予約の場合のみ)
        length:    録画時間(時間指定予約の場合のみ。秒単位)
        priority:  優先度
        selected:  サービス指定
        repeat:    毎週指定(時間指定予約の場合のみ)
        title:     仮タイトル(時間指定予約の場合のみ)
        ticket:    取得したワンタイムチケットの値
    戻り値: 2値
        1=成功, 0=失敗

08.  /api/programDelete
    録画予約を削除する API
    引数: 以下のとおり
        num:       プログラムID(時間指定予約の場合のみ)
        sid:       サービスID
        eid:       イベントID(時間指定予約の場合は0を指定)
        ticket:    取得したワンタイムチケットの値
    戻り値: 2値
        1=成功, 0=失敗

09.  /api/autoprogList
    自動検索予約一覧を取得する API
    引数: 無し
    戻り値: JSON 形式
        [[自動予約ID, サービスID, チャンネル名, 検索キーワード, ジャンル, 開始時間帯, 自動予約フラグ]], ...]

10.  /api/autoprogRegist
    自動検索予約を登録する API
    引数: 以下のとおり
        num:       自動予約ID
        keyword:   検索キーワード
        sid:       サービスID
        genre:     ジャンルコード
        zonetime:  開始時刻帯
        mode:      自動予約フラグ
        ticket:    取得したワンタイムチケットの値
    戻り値: 2値
        1=成功, 0=失敗

11.  /api/autoprogDelete
    自動検索予約を削除する API
    引数: 以下のとおり
        num:       自動予約ID
        ticket:    取得したワンタイムチケットの値
    戻り値: 2値
        1=成功, 0=失敗

12.  /api/onetimeTicket
    登録や削除を行う時に必要なワンタイムチケットを取得する API
    引数: 無し
    戻り値: 文字列
        ワンタイムチケットの値(取得後5秒間のみ有効。再利用は不可)

※ サービスID:     それぞれのチャンネルに割り当てられたID
                   但し、検索系では以下の値を独自に追加
                   0xffff=地上デジタルのすべて, 0=BSのすべて, 0x10000=CSのすべて
※ イベントID:     それぞれのチャンネルが割り当てた番組のID
                   但し、録画予約では以下の値を独自に追加
                   0=時間指定予約
※ 開始/終了時刻:  番組の開始時刻/終了時刻
                   1970/01/01 00:00:00 からの秒数(俗に言うUNIXタイム)
※ 長さ:           番組の長さ(秒数)
※ ジャンル:       ARIB で規定されているジャンルコード
                   0=ニュース/報道, 1=スポーツ, 2=情報/ワイドショー, 3=ドラマ,
                   4=音楽, 5=バラエティ, 6=映画, 7=アニメ/特撮,
                   8=ドキュメンタリー/教養, 9=劇場/公演, 10=趣味/教育, 11=福祉,
                   12=予備, 13=予備, 14=拡張, 15=その他
※ 開始時刻帯:     以下の値
                   -1=すべて, 0=午前, 1=午後, 2=5〜11時, 3=11〜17時, 4=17〜23時, 5=23〜5時,
                   6=0〜4時, 7=4〜8時, 8=8〜12時, 9=12〜16時, 10=16〜20時, 12=20〜24時,
                   13=日曜日, 14=月曜日, 15=火曜日, 16=水曜日, 17=木曜日, 18=金曜日, 19=土曜日,
                   20=平日, 21=土日
※ 予約済情報:     0=未予約、1=予約済み、2=録画開始、3=録画中、4=無効化済み
※ プログラムID:   録画予約情報内で唯一無二なID
※ サービス指定:   録画する時にそのサービスのみ録画するかどうかを指定
                   0=全サービス録画, 1=指定したサービスのみ録画
※ 毎週指定:       時間指定予約での毎週繰り返しするかどうかを指定
                   1=次週も同じ予約をする, 0=この一回のみ
※ 優先度:         同一時刻での録画開始の優先度(通常は1)。開始順位を上げる場合はこの値を1増やす
※ ステータス:     番組予約一覧での状態を示す文字列(ptTimerの録画予約一覧の状態と同様)
※ 自動予約ID:     自動検索予約情報内で唯一無二なID
※ 自動予約フラグ: サービス指定の有り無しとタイトル以外も検索するしないをビット合成した値
                   0=タイトルのみ検索+サービス指定無し, 1=タイトルのみ検索+サービス指定有り
                   2=タイトル以外も検索+サービス指定無し, 3=タイトル以外も検索+サービス指定有り


・ 履歴

0.2.1.0  : bondriver_rptmr.dllへの通信をUDP接続でも行えるようにした
0.2.0.0  : 他のPCから専用のBonDriverを使って放送されている番組を見る機能を追加(対象はTvTestのみ)
           (「bondriver_rptmr.dll について」を参照)
0.1.4.0  : ptTimer 0.5.0.0以降で追加されたマスターモードに対応
0.1.3.0  : 自動検索一覧や番組検索での検索結果をptTimer.iniでのFINDCHOICEONLYの設定に従う様に修正
0.1.2.0  : 検索で除外ワードを示す半角のマイナスが全角変換されて機能しなくなるのを修正
           同様にARIB記号である[HV]や[無](の[])も全角変換しない様に修正
           ptTimer 0.4.3.0で追加された番組検索・自動検索予約での地デジ・BS・CSのすべてから検索に対応
0.1.1.0  : 即録機能の実装方法を変更
           ChromeやAndroid3.xでチャンネル順が勝手に変更される為、新しいAPI(/api/channelList2)を追加
           サンプルのコードをAndroid3.xに対応した
0.1.0.0  : とりあえずの公開版


bondriver_rptmr.dll

0.0.1.0  : 最初の公開版


