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

1.API仕様書

ガラポンTVには以下のAPIがあります。

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

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

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

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

[ガラポンTV弐号機API仕様書(API仕様書Ver.2)をダウンロードする]

2.APIの利用申請

APIを使うためにはデベロッパーIDが必須となります。デベロッパーIDは開発者がガラポン株式会社に申請して発行します。
[こちら]から利用申請をお願いいたします。

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

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

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

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

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>ガラポンTV LAB</h1>
<h2>ガラポンTVログイン</h2>
ガラポンIDとパスワードを入力してください。

<form action="sample_gtvlogin.php" method="post">
    ガラポンID:<input type="text" name="user" /><br>
    パスワード:<input type="password" name="raw_password" /><br>
    <input type="submit" value="ログイン" />
</form>

</body>
</html>

 

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 ) {
                $gtvinfo["gtvver"] = 2;
            } else if ( preg_match("/^GTV3/", $gtvver_str) > 0 ) {
                $gtvinfo["gtvver"] = 3;
            } else if ( preg_match("/^GTV4/", $gtvver_str) > 0 ) {
                $gtvinfo["gtvver"] = 4;
            }
        }
       
        //APIバージョンの判定
        if ( $gtvinfo["gtvver"] == 2 ) {
            $gtvinfo["apiver"] = "v2"; //弐号機のAPIバージョン
        } else if ( $gtvinfo["gtvver"] == 3 || $gtvinfo["gtvver"] == 4 ) {
            $gtvinfo["apiver"] = "v3"; //四・参号機用のAPIバージョン
        }

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

        //各値をクッキーにセットしておく(次のAPIコールの時に利用)
        foreach ( $gtvinfo as $key => $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 .= "&loginid=".$userid;
    $post .= "&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;
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>ガラポンTV LAB</h1>
<p>これらの機能は全て<a href="http://garapon.tv/developer">ガラポンTV API</a>で実現しています。</p>

<p><?php echo $login_message; ?></p>

<?php if ( $logininfo["status"] == "1" ) {?>
<h3>GTVID(番組ID)を入力すると当該番組の字幕を全出力</h3>
<form action="sample_bangumi_data.php" method="post">
番組ID:<input type="textbox" name="gtvid" /><br>
<input type="submit" value="送信" />
</form>
<?php } else { ?>
<a href="sample_index.html">戻る</a>
<?php }?>
</body>
</html>

 

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;
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>ガラポンTV LAB</h1>
<p>これらの機能は全て<a href="http://garapon.tv/developer">ガラポンTV API</a>で実現しています。</p>

<?php if ( !$programdata ) {?>
<p>番組情報の取得に失敗しました。</p>
<a href="sample_index.html">戻る</a>
<?php }?>

<?php if ( $programdata["status"] == "1" ) {?>
<h4>
    <a href="http://site.garapon.tv/social_gtvid_view?gtvid=<?php echo $gtvid;?>">
        <?php echo $programdata["program"][0]["title"];?>
    </a>
</h4>
<?php if ( $thumbnail != "" ) {?>
<img src="<?php echo $thumbnail; ?>" />
<?php }?>
<table border="1">
    <tr><th width="100">放送日時</th><td><?php echo $programdata["program"][0]["startdate"];?></td>
    <tr><th>番組尺</th><td><?php echo $programdata["program"][0]["duration"];?></td>
    <tr><th>放送局</th><td><?php echo $programdata["program"][0]["bc"];?></td>
    <tr><th>番組説明</th><td><?php echo $programdata["program"][0]["description"];?></td>
</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秒前から再生開始
    ?>
        <p>
            <a href="http://site.garapon.tv/g?g=<?php echo $gtvid;?>&t=<?php echo $caption_sec;?>">
            [<?php echo $caption["caption_time"];?>]</a>
            <?php echo $caption["caption_text"];?>
        </p>
    <?php }?>
<?php }?>

<?php }?>
</body>
</html>

 

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

・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で再生できます。