WebAPI

基本APIと、補助APIに分けて解説します。
基本APIは、番組や予約データの登録、変更、削除に関連するものです。
補助APIはそれ以外の機能です。

WebAPI使用方法

基本API
GetTable
AddReserve
RemoveReserve
AddAutoReserve
RemoveAutoReserve
SetUserEpg

補助API
ResetReserveTuner
GetRecordFolderFree
GetLog
ClearLog
ClearResult
UpdateEpg
CancelUpdateEpg
RemoveFile
GetTunersState
ShowServer
CloseServer
UpdateRecordStatus
AddTsFileInfo
StartHls
StopHls
OpenChatServer
GetChat

WebAPI使用方法

WebAPIは、GETメソッドで呼び出してください。
http://(アドレス):20001/webapi/(API名)?(パラメータ名1)=(パラメータ値1)&(パラメータ名2)=(パラメータ値2)&・・・

例: GetTable APIを使って、eventテーブルからid=1のタイトルを取得します。
http://localhost:20001/webapi/GetTable?sql=select title from event where id=1

取得したデータは、次のJSON形式で戻ってきます。

code        エラーコード 0: 正常終了、0以外:エラー
message   エラー内容
data1       ここに取得したデータが入る

まずcodeを確認します。
0以外ならエラーで、messageにエラーメッセージが入ります。
0なら成功で、data1からデータを取得してください。

基本API

GetTable

引数
sql: SQLのselect文

戻り値
data1: テーブルのデータ

説明
データベーステーブルのデータをSQL文を使用して取得します。
テーブルの内容は、データベース定義を参照してください。

戻り値は、2次元配列になっています。

SQL文で文字列を指定する場合は、「'」をエスケープしてください。
LIKE文を使用する場合は、上記に加えて「%」「_」をエスケープする必要があります。

AddReserve

引数
id: 予約ID(新規の場合は-1か指定しないこと、それ以外の場合は、そのIDの予約を変更)
title: タイトル
start: 開始時間(.netのDateTime値)
duration: 録画時間(秒単位)
eid: 番組ID
status: ステータス
fsid: フルサービスID
tuner: チューナ名

戻り値
data1: 予約ID

説明
予約を新規追加、変更します。

引数はすべて設定する必要はありません。
新規予約の場合、最低fsidとeidだけ指定しても予約できます。
この場合、fsidとeidが指す番組が新規予約されます。

変更する場合も同じで、idを指定して、他は変更するパラメータのみ指定できます。
この場合、指定しなかったパラメータは元のデータのままになります。

RemoveReserve

引数
id: 予約ID

戻り値
なし

説明
予約を削除します。

AddAutoReserve

引数
id: 自動予約ID(新規の場合は-1か指定しないこと、それ以外の場合は、そのIDの自動予約を変更)
sql: 検索SQL文
option: 検索項目(Tvmaid本体では使用されません。スクリプト側で使うデータです)
status: ステータス
title: タイトル
folder: フォルダ名

戻り値
data1: 自動予約

説明
自動予約を追加、変更します。

sqlパラメータにセットするSQL文は、Tvmaid本体で実行されます。
慎重に指定する必要があります。

RemoveAutoReserve

引数
id: 自動予約ID

戻り値
なし

説明
自動予約を削除します。

SetUserEpg

引数
id: 番組表ID(数値で指定)
fsid: 登録するサービス(fsidをカンマで区切って指定)

戻り値
なし

説明
ユーザ番組表の設定です。

補助API

ResetReserveTuner

引数
なし

戻り値
なし

説明
予約チューナの再割り当てを行います。

GetRecordFolderFree

引数
なし

戻り値
data1: ドライブの空き容量(バイト単位)

説明
録画フォルダのあるドライブの空き容量を取得します。

GetLog

引数
sql: SQLのselect文

戻り値
data1: テーブルのデータ

説明
ログを取得します。
データベーステーブルのデータをSQL文を使用して取得します。
テーブルの内容は、データベース定義を参照してください。

戻り値は、2次元配列になっています。

SQL文で文字列を指定する場合は、「'」をエスケープしてください。
LIKE文を使用する場合は、上記に加えて「%」「_」をエスケープする必要があります。

ClearLog

引数
なし

戻り値
なし

説明
ログをクリアします。

ClearResult

引数
なし

戻り値
なし

説明
録画結果の情報をクリアします。
ファイルは削除しません。

UpdateEpg

引数
なし

戻り値
なし

説明
番組表更新を開始します。

CancelUpdateEpg

引数
なし

戻り値
なし

説明
番組表更新を中止します。

RemoveFile

引数
id: 録画結果ID

戻り値
なし

説明
録画ファイルを削除します(ゴミ箱に移動)。

GetTunersState

引数
なし

戻り値
data1: チューナの状態
 2次元配列で、data1[i][0]にチューナ名、data1[i][1]にチューナの状態を表す数値が入っています(「i」はチューナ数分あります)。

 チューナの状態:
 0: 視聴中
 1: 録画中
 2: 録画一時停止中
 3: 停止(TVTestが起動していない)
 4: 不明
 5: 番組表更新中

説明
チューナの状態を取得します。

ShowServer

引数
tuner: チューナ名
fsid: サービスのfsid

戻り値
なし

説明
TVTestを視聴モードで起動します。
メイドバー用のAPIです。

CloseServer

引数
tuner: チューナ名

戻り値
なし

説明
TVTestを閉じます。
メイドバー用のAPIです。

UpdateRecordStatus

引数
なし

戻り値
なし

説明
録画ファイルの状態(ファイルが削除されているかどうか)を更新します。
RemoveFile APIを使用して削除した場合は自動的に更新されますが、エクスプローラ等で削除しても反映されません。
その場合は、このAPIで更新します。

AddTsFileInfo

引数
なし

戻り値
なし

説明
TSファイル登録を開始します。
録画フォルダ内のTSファイル(*.ts)をrecordテーブルに登録します。
途中で中止できません。

StartHls

引数
stream: ストリームID
ready: セグメントファイル待ち数
mode: 画質モード(low、middle、higt)
type: 「live」または「record」

以下の引数は、type=liveのとき指定します。
tuner: チューナ名
fsid: サービスのfsid

以下の引数は、type=recordのとき指定します。
id: 録画ID
start: 録画ストリーミング開始位置(秒単位)

戻り値
なし

説明
HLSエンコードを開始します。ライブ、録画ストリーミング両方で使います。
HLSストリーミングを行うには、このAPIでエンコードを開始した後、「/hls-playlist?stream=ストリームID」のURLをブラウザのvideoタグにセットします。
このAPIが戻る前にvideoタグをセットしてはいけません。セグメントファイルが作成されていないため再生に失敗します。

ストリームIDは、スクリプト側で適当に決めます。
デフォルトのスクリプトでは時刻の数値を指定していますが、文字列でも構いません。
同じストリームIDで再度StartHlsを呼び出すと、実行中のエンコードを停止して、新たにエンコードを開始します。
ストリームIDを共有し、2つのブラウザでHLSを行わないほうがいいです。
サービスを切り替えたり、ストリーミング開始位置が変更されたことを知ることができないので、一方はストリーミングが停止してしまいます。

引数readyは、指定された数のセグメントファイルが作成されるまで待ってから戻ります。
これに0を指定しないほうがいいです。すぐに「/hls-playlist」をvideoタグにセットすると、大抵のブラウザで失敗します。
デフォルトでは1です。iOSでは2がいいようです。

30秒間「/hls-playlist」にアクセスが無い場合は、エンコードが停止します。ブラウザのvideoタグに「/hls-playlist」を指定してあれば、ブラウザが数秒おきにアクセスするので停止しません。

StopHls

引数
stream: ストリームID

戻り値
なし

説明
指定されたストリームIDのエンコードを停止します。

OpenChatServer

引数
type: 数値で指定。1=ニコニコ実況ライブ, 2=ニコニコ実況過去ログ
id: 接続ID
fsid: サービスのfsid

以下の引数は、ニコニコ実況過去ログの場合に指定します。
start: 番組開始時刻
end: 番組終了時刻

戻り値
なし

説明
実況コメントサーバに接続します。このAPIを呼び出した後、GetChat APIでコメントを取得します。

接続IDは、スクリプト側で適当に決めます。
デフォルトのスクリプトでは時刻の数値を指定していますが、文字列でも構いません。
接続IDを開放するAPIはありません。60秒以上GetChatを呼び出さないと、その接続IDは無効になります。

ニコニコ実況過去ログの場合、引数startとendを、unix時刻(秒単位)で指定してください。コメントを取得する過去ログを特定するのに必要です。

引数typeが数値指定なのは、複数のコメント取得元を組み合わせ指定できるようにする(予定だった)ためです。

GetChat

引数
id: 接続ID
max: 最大コメント取得数
time: 取得コメント最終時刻

戻り値
data1: コメントのリスト

説明
実況コメントを取得します。
最初の1回目のGetChatは、0個のコメントが返ります。2回目のGetChatで1回目との間のコメントを取得します。同様に3回目は、2回目との間のコメントを取得します。

引数timeは、過去ログサーバの場合に使用し、1回目のAPIで取得開始時刻を設定し、2回目以降で指定時刻までのコメントを取得できます。unix時刻(秒単位)で指定してください。
ライブの場合はこの引数を使いませんが、0を指定してください。ライブでは、常に前回取得時から現時刻までのコメントを取得します。
取得数は、引数maxまでに制限されるので、その間のすべてのコメントが取得できるとはかぎりません。
引数maxに0を指定して呼び出すことで、取得開始位置をリセットできます。

戻り値は2次元配列で、{ time:コメント時刻, text:コメントテキスト }のリストが返ります。
コメント時刻は、unix時刻(秒単位)です。
現在のところ、時刻とテキストしか取得できません。

このAPIは、なるべく時間間隔を空けて使用してください。
コメントサーバに負荷がかかってしまうと、サービスが終了してしまうかもしれません。