はじめに

ガラポンではAPIを公開しており、開発者様は、ガラポンTVに蓄積された放送番組関連情報を使った様々なサービスの開発が可能です。
あなたも、ガラポンTVのAPIを利用したマッシュアップサービスを作ってみませんか?
録画された大量のテレビ番組データには、あなたの発想次第で無限大の可能性があります。

1.API仕様書

1)ガラポンWeb認証API
ガラポンIDとパスワードを入力すると、ガラポンTV端末のIPアドレスを返却するAPIです。

[ガラポンWEB認証API仕様書をダウンロードする]

2)ガラポンTVAPI
ガラポンTV端末に対して、日付別・ジャンル別に放送番組の一覧を取得したり、特定の単語で番組表データや番組情報内テキストを検索したり、番組情報を表示し、番組を再生したりすることができます。

[ガラポンTV伍・四・参号機API仕様書(API仕様書Ver.3)をダウンロードする]

[ガラポンTV弐号機API仕様書(API仕様書Ver.2)をダウンロードする※公開終了しました]

※ガラポンTV六号機API仕様書については、公共性や有用性があるとガラポン社が判断した場合に限り個別に開示しております。

2.APIの利用申請

ガラポンAPIの利用にはお申込みが必要です。
ガラポンAPIは「ガラポンTV保有者全員が無料で利用できるサービスにおいて利用する場合」に限り無料で提供されます(該当サービスの公開中のみ無料)。
その他の場合は月額2万円(税別)となります。

■API利用申し込みの手順
1)ガラポンAPI利用申込書をダウンロードして必要事項を記入する

[ガラポンAPI利用申込書をダウンロードする]

※お申込みには[ガラポンAPI利用規約]に同意いただく必要があります。

2)記入済みガラポンAPI利用申込書をガラポン社まで送付する

3)ガラポンAPI利用申込書がガラポン社に到着次第、開発用デベロッパーIDをご連絡します。
デベロッパーIDがあればガラポンTVのAPIを利用して開発が可能となります。
別途、請求書が郵送されますので、期日までのお振込みをお願いいたします。

3.サンプルプログラムとソースコード

[サンプルプログラムを確認する]

当サンプルプログラムはPHPの動作するレンタルサーバー上に下記の3ファイルを置いて動作させています。
ログイン画面(sample_index.html)にガラポンIDとパスワードを入力してガラポンTV端末にログイン後、任意のGTVID(番組ID)を入力すると、番組の詳細情報と番組内テキスト情報一覧を出力いたします。
(※ガラポンTV所有者が自分の保有するガラポンTV端末にアクセスして利用する形態です。サンプルプログラムの確認のためには、ご自身でガラポンTV参・四・伍号機を所有し利用中である必要があります。)

sample_index.html
:ガラポンIDとパスワードの入力画面です。入力された2つの値をPOSTでsample_gtvlogin.phpに渡します。

<h1>ガラポンTV LAB</h1>
<h2>ガラポンTVログイン</h2>
ガラポンIDとパスワードを入力してください。

<form action="sample_gtvlogin.php" method="post">ガラポンID:<input name="user" type="text" />

パスワード:<input name="raw_password" type="password" />

<input type="submit" value="ログイン" />

</form>

sample_gtvlogin.php
:ガラポンIDとパスワードを引数として呼び出され、ガラポンWEB認証と端末認証を行い、HTML部分を出力します。

<!--?php define("DEV_ID", "hogehogehogehoge"); //デベロッパーIDはAPI申請して発行されたものをお使いください define("COOKIE_EXPIRE", time() + 60 * 60 * 24 * 7); //クッキーの有効期限(1週間) $user_id = $_POST["user"]; $raw_password = $_POST["raw_password"]; $md5_password = md5($raw_password); //ガラポンWEBの認証APIに接続してガラポンTV端末にアクセスするための必要な情報を取得する $gtvinfo = get_gtvinfo($user_id, $md5_password); $logininfo = array(); if ( $gtvinfo["result"] ) { //ガラポンWEBとの認証に成功したら     if ( isset($gtvinfo["ipaddr"]) && isset($gtvinfo["apiver"]) ) {         $logininfo = login_to_gtv($gtvinfo["ipaddr"], $gtvinfo["apiver"], $user_id, $md5_password); //ガラポンTV端末のAPIでログイン     } } $login_message = ""; if ( $gtvinfo["result"] ) {     if( isset($logininfo["gtvsession"]) && $logininfo["gtvsession"] != "" ) {         $login_message = "ガラポンTVに接続しました。";     } else {         $login_message = "ガラポンTV端末へのログインに失敗しました。";     } } else {     $login_message = "ガラポンWEBへのログインに失敗しました。"; } /*  * HTTPでPOSTデータを送信する関数  */ function http_post_request($url, $post, $con_timeout=10, $action_timeout=120) {          $curl_handle = curl_init($url);     curl_setopt($curl_handle, CURLOPT_URL, $url);     curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $post);     curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, FALSE);     curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);     curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, $con_timeout);     curl_setopt($curl_handle, CURLOPT_TIMEOUT, $action_timeout);     $result = curl_exec($curl_handle);     curl_close($curl_handle);          return $result; } /*  * ガラポンWEBの認証APIに接続してガラポンTV端末にアクセスするための必要な情報を取得する関数   */ function get_gtvinfo ($userid, $md5passwd) {     $gtvinfo = array();     $gtvinfo["result"] = FALSE; //ガラポンWEB認証の成否     $url = "http://hogehoge.garapon.info/getgtvaddress"; //URLはAPI仕様書記載のURLに修正してください     $post  = "user=".$userid;     $post .= "&md5passwd=".$md5passwd;     $post .= "&dev_id=".DEV_ID;          $result = http_post_request($url, $post); //ガラポンWEB認証のAPIをコール          if ( !$result ) {         return $gtvinfo;     }          $list = preg_split("/\n/", $result); //ガラポンWEB認証の結果は改行区切り          if ( isset($list[0]) && preg_match("/0;success/", $list[0]) ) {       //ガラポン認証サーバ(ガラポンWEB)へのログイン成功の場合                 //サーバから見たガラポンTVのIPアドレス         if ( isset($list[1]) ) {             list($null, $gtvinfo["ipaddr"]) = explode(";", $list[1]);         }             //ガラポンTVのプライベートIPアドレス         if ( isset($list[2]) ) {             list($null, $gtvinfo["pipaddr"]) = explode(";", $list[2]);         }           //ガラポンTVのグローバルIPアドレス         if ( isset($list[3]) ) {             list($null, $gtvinfo["gipaddr"]) = explode(";", $list[3]);         }              //ガラポンTVのアクセスポート         if ( isset($list[4]) ) {             list($null, $gtvinfo["port"]) = explode(";", $list[4]);         }                 //TSデータ再生ポート         if ( isset($list[5]) ) {             list($null, $gtvinfo["tsport"]) = explode(";", $list[5]);         }              //端末のバージョン(弐号機か伍・四・参号機かの判定)         $gtvver = "";         if ( isset($list[6]) ) {             list($null, $gtvver_str) = explode(";", $list[6]);             if ( preg_match("/^GTV2/", $gtvver_str) > 0 ) {<br ?--> $gtvinfo["gtvver"] = 2;
} else if ( preg_match("/^GTV3/", $gtvver_str) &gt; 0 ) {
$gtvinfo["gtvver"] = 3;
} else if ( preg_match("/^GTV4/", $gtvver_str) &gt; 0 ) {
$gtvinfo["gtvver"] = 4;
} else if ( preg_match("/^GTV5/", $gtvver_str) &gt; 0 ) {
$gtvinfo["gtvver"] = 5;
}
}

//APIバージョンの判定
if ( $gtvinfo["gtvver"] == 2 ) {
$gtvinfo["apiver"] = "v2"; //弐号機のAPIバージョン
} else if ( $gtvinfo["gtvver"] == 3 || $gtvinfo["gtvver"] == 4 || $gtvinfo["gtvver"] == 5 ) {
$gtvinfo["apiver"] = "v3"; //伍・四・参号機用のAPIバージョン
}

//サーバから見たガラポンTVのIPアドレスは必ずグローバルなのでポート番号をつける
if ( isset($gtvinfo["ipaddr"]) &amp;&amp; isset($gtvinfo["port"]) ) {
$gtvinfo["ipaddr"] .= ":".$gtvinfo["port"];
}

//利用者から見たガラポンTVのIPアドレス
//リモートアドレスとグローバルIPアドレスが一緒であれば宅内利用
if ( isset($gtvinfo["gipaddr"]) &amp;&amp; $gtvinfo["gipaddr"] == $_SERVER["REMOTE_ADDR"] &amp;&amp; isset($gtvinfo["pipaddr"]) ) {
$gtvinfo["cipaddr"] .= $gtvinfo["pipaddr"];
} else if ( isset($gtvinfo["gipaddr"]) &amp;&amp; $gtvinfo["gipaddr"] != $_SERVER["REMOTE_ADDR"] &amp;&amp; isset($gtvinfo["port"]) ) { //宅外からの利用
$gtvinfo["cipaddr"] .= $gtvinfo["gipaddr"].":".$gtvinfo["port"];
}

//各値をクッキーにセットしておく(次のAPIコールの時に利用)
foreach ( $gtvinfo as $key =&gt; $val ) {
setcookie($key, $val, COOKIE_EXPIRE, "/");
}

$gtvinfo["result"] = TRUE;
}

return $gtvinfo;
}

/*
* ガラポンTV端末のAPIを使ってログインする関数
*/

function login_to_gtv($ipaddr, $apiver, $userid, $md5passwd ) {

$url = "http://".$ipaddr."/gapi/".$apiver."/auth?dev_id=".DEV_ID;
$post = "type=login";
$post .= "&amp;loginid=".$userid;
$post .= "&amp;md5pswd=".$md5passwd;

$login_result = http_post_request($url, $post);
$logininfo = json_decode($login_result, TRUE);

//クッキーにガラポンTVのAPIを次にコールするときに必要な情報をセットしておく
if( isset($logininfo["gtvsession"]) ) {
setcookie('gtvsession', $logininfo['gtvsession'], COOKIE_EXPIRE, "/");
}

return $logininfo;
}
?&gt;
<h1>ガラポンTV LAB</h1>
これらの機能は全て<a href="http://garapon.tv/developer">ガラポンTV API</a>で実現しています。
<h3>GTVID(番組ID)を入力すると当該番組の字幕を全出力</h3>
<form action="sample_bangumi_data.php" method="post">番組ID:<input name="gtvid" type="textbox" />

<input type="submit" value="送信" />

</form><!--?php } else { ?-->
<a href="sample_index.html">戻る</a>
<!--?php }?-->

sample_bangumi_data.php
:gtvidを引数として呼び出され、番組情報と番組内テキストデータを一覧出力します。

<!--?php define("DEV_ID", "hogehogehogehoge"); //デベロッパーIDはAPI申請して発行されたものをお使いください $gtvid = ""; if ( isset($_POST["gtvid"]) ) {     $gtvid = $_POST["gtvid"]; } $programdata = FALSE; if ( $gtvid != "" && isset($_COOKIE["ipaddr"]) && isset($_COOKIE["apiver"]) && isset($_COOKIE["gtvsession"]) ) {     $programdata = get_program_data($gtvid, $_COOKIE["ipaddr"], $_COOKIE["apiver"], $_COOKIE["gtvsession"]); } $thumbnail = ""; if ( isset($_COOKIE["cipaddr"]) && $gtvid ) {     $thumbnail = "http://".$_COOKIE["cipaddr"]."/thumbs/".$gtvid; } /*  * ガラポンTV端末のAPIをコールして指定した番組IDの番組情報を取得する関数  */ function get_program_data ( $gtvid, $ipaddr, $apiver, $gtvsession ) {          //番組検索APIのURL     $url = "http://".$ipaddr."/gapi/".$apiver."/search?gtvsession=".$gtvsession."&dev_id=".DEV_ID;     $post  = "gtvid=".$gtvid;          $data = http_post_request($url, $post);          if ( !$data ) {         return FALSE;     }          $programdata = json_decode($data, TRUE);          return $programdata; } /*  * HTTPでPOSTデータを送信する関数 */ function http_post_request($url, $post, $con_timeout=10, $action_timeout=120) {     $curl_handle = curl_init($url);     curl_setopt($curl_handle, CURLOPT_URL, $url);     curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $post);     curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, FALSE);     curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);     curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, $con_timeout);     curl_setopt($curl_handle, CURLOPT_TIMEOUT, $action_timeout);     $result = curl_exec($curl_handle);     curl_close($curl_handle);     return $result; } ?-->
<h1>ガラポンTV LAB</h1>
これらの機能は全て<a href="http://garapon.tv/developer">ガラポンTV API</a>で実現しています。

番組情報の取得に失敗しました。

<a href="sample_index.html">戻る</a>
<!--?php }?-->
<h4><a href="http://site.garapon.tv/social_gtvid_view?gtvid=&lt;?php echo $gtvid;?&gt;">
<!--?php echo $programdata["program"][0]["title"];?-->
</a></h4>
<!--?php if ( $thumbnail != "" ) {?-->
<img src="&lt;?php echo $thumbnail; ?&gt;" alt="" />
<!--?php }?-->
<table border="1">
<tbody>
<tr>
<th width="100">放送日時</th>
<td></td>
</tr>
<tr>
<th>番組尺</th>
<td></td>
</tr>
<tr>
<th>放送局</th>
<td></td>
</tr>
<tr>
<th>番組説明</th>
<td></td>
</tr>
</tbody>
</table>
<h4>番組字幕</h4>
<!--?php if ( $programdata["program"][0]["caption_hit"] > 0 ) { ?-->
<!--?php foreach  ( $programdata["program"][0]["caption"] as $caption ) {         list($cap_h, $cap_m, $cap_s) = explode(":", $caption["caption_time"]);         $caption_sec = $cap_h*60*60 + $cap_m*60 + $cap_s - 7; //7秒前から再生開始     ?-->

<a href="http://site.garapon.tv/g?g=&lt;?php echo $gtvid;?&gt;&amp;t=&lt;?php echo $caption_sec;?&gt;">
[<!--?php echo $caption["caption_time"];?-->]</a>
<!--?php echo $caption["caption_text"];?-->

<!--?php }?-->
<!--?php }?-->

<!--?php }?-->

当プログラムの動作環境やライセンスについて

・PHPバージョン:PHP5
・php.iniで「extension=php_curl.dll」を有効にしている必要があります。
・上記のプログラムコードの利用については、修正BSDライセンスに従うものとします。無保証、改変自由、再配布自由。初期開発者情報の表示不要。
・FreeBSD 7.1-RELEASE-p16 i386、Apache/1.3.42 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8eにて動作確認済み。

4.API活用サイトのご紹介

ガラポンTVサイト:ガラポン社運営のテレビ番組のレビューサイト。お気に入り管理や複数の検索単語を定期的に検索するバッチ検索、視聴履歴管理などが行えます。

g256:ガラポン社とは無関係の個人開発者g256様運営によるガラポンTV独自UIサイト。ニコニコ実況連携や、番組表表示、倍速再生などに対応しております。

ガランチュ:ガラポン社とは無関係の個人開発者makoto_kw様開発のガラポンTV iPadアプリ。番組を視聴しながら他の番組を探せたりします。ソースコードも公開中です。

GaraponMate:ガラポン社とは無関係の個人開発者gae様作成のAndroidアプリ。ブラウザ起動→ログイン→番組検索までをアプリ立ち上げだけで短縮化。とっても便利です。

Kodiful life:ガラポンTVをリモコンで操作してテレビで視聴するサービスです。

・俺ポン(iOS|Android):倍速再生や自動お気に入り登録、検索での除外キーワード設定など、俺が欲しい機能が詰まったアプリです。

・ガラコン:自動お気に入り登録やピンポイント番組検索などの機能があるブラウザ上で使うサービスです。※現在、サービス終了したそうです。

アニチェッカー:深夜アニメのリンク集です。クリックすると該当の番組がガラポンTVで再生できます。