ガラポンTV開発者向けページ

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

1.APIの利用申請

API仕様書をご希望の方はこちらから利用申請をお願いいたします。

2.APIの説明

APIには以下の2種類があります。

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

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>                
        <h2>ガラポンTVログイン</h2><br />
        ガラポンIDとパスワードを入力してください。<br />
<form action="sample_gtvlogin.php" method="post">
  <table border="1">
    <tr>
      <td>ガラポンID</td>
      <td><input type="text" name="user"></td>
    </tr>
    <tr>
      <td>パスワード</td>
      <td><input type="password" name="hirapasswd"></td>
    </tr>  
  </table>
<input type="submit" value="ログイン">
</form>
    </body>
</html>

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
        <?php
//以下の部分はログイン認証処理
        $user = $_POST["user"];
        $hirapasswd = $_POST["hirapasswd"];

        //MD5値の取得
        $md5passwd = md5($hirapasswd);
        $authresult = gtvauth($user, $md5passwd);
        $authresultlist = preg_split("/\n/", $authresult);
        global $ipaddr, $gtvsession, $gtvid;
        $ipaddr = $authresultlist[0];
        $gtvsession = $authresultlist[1];
            if ($ipaddr==null or $gtvsession == null) {
                //echo "認証false<br />";
                exit("ログインに失敗しました。<br />ブラウザの「戻る」でログインからやり直してください。");
            }
       
        setcookie('ipaddr', $ipaddr, time() + 60 * 60 * 24, "/");
        setcookie('gtvsession', $gtvsession, time() + 60 * 60 * 24, "/");
        setcookie('gid',$user,time() + 60 * 60 * 24, "/");

        print ("<br /><br />ガラポンTVにログインしました。 <br />");
        print ("ipaddr:$ipaddr<br />");
        print ("gtvsession:$gtvsession <br />");

function gtvauth($user, $md5passwd) {
    //curlにてガラポン認証用サーバーへPOST命令を実行
    $ch = curl_init("http://hogehoge.garapon.info/getgtvaddress");
    curl_setopt($ch, CURLOPT_URL, "http://hogehoge.garapon.info/getgtvaddress");
    curl_setopt($ch, CURLOPT_POST, TRUE);

    $post = "user=$user&md5passwd=$md5passwd";

    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    $result = curl_exec($ch);
    $list = preg_split("/\n/", $result);

    //ガラポンWEB認証サーバーへのPOST実行
    curl_close($ch);

    if (preg_match("/success/i", $list[0])) {
        $ipaddr = $list[1];
        //IPアドレス単体を取得したいため、ipaddrの不要記述部分削除
        $ipaddr = str_replace("ipaddr;", "", $ipaddr);

    } else {
        exit("ログインに失敗しました。<br />IDかパスワードが正しくありません。<br />ブラウザの「戻る」でログインからやり直してください。");
    }

    //ガラポンTV端末(=IPアドレス)へのcurlのリクエスト用URLを生成
    $requrl = "http://{$ipaddr}/gapi/gtvlogin";

    $ch = curl_init($requrl);
    curl_setopt($ch, CURLOPT_URL, $requrl);
    curl_setopt($ch, CURLOPT_POST, TRUE);

    //postするデータ
    $post = "LoginID=$user&Password=$md5passwd";

    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    //ガラポンTV端末へのログインPOST実行
    $tanmastsu_result = curl_exec($ch);
    curl_close($ch);

    if (preg_match("/success/i", $tanmastsu_result)) {
        $gtvsession = substr($tanmastsu_result, 35);
        return "$ipaddr\n$gtvsession";
    } else {
        exit("端末へのログインに失敗しました。<br />端末の状態をご確認の上、再度、ログインからやり直してください。");
    }
}      
       
        ?>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>ガラポンTVサンプルプログラム</title>
    </head>
<body>
    <h2>ガラポンTV LAB</h2>
        これらの機能は全て<a href="http://garapon.tv/developer">ガラポンTV API</a>で実現しています。<br /><br /><br />
   
        <h3>■gtvid(番組ID)を入力すると当該番組の字幕を全出力</h3>
        <form action="sample_dump_jimaku.php" method="post">
            <table border="1">
                <tr>
                    <td>gtvid</td>
                    <td><input type="text" name="gtvid"></td>
                </tr>
            </table>
            <input type="submit" value="送信">
        </form>
        <br /><br />        
    </body>
</html>

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
    <?php

print ("<h2>入力されたgtvidのEPG情報と字幕データを一覧出力します。</h2><br />");

$gtvid = $_POST["gtvid"];
print ("gtvid=$gtvid<br />");
//ユーザー側のCOOKIEに格納したセッションIDとIPアドレス
$ipaddr = $_COOKIE['ipaddr'];
$gtvsession = $_COOKIE['gtvsession'];


//epgデータ取得関数を呼び出し
$epgdata = getepg($gtvid, $gtvsession, $ipaddr);

if($epgdata[0]!="1;success"){
    print("番組情報取得でエラーが発生しました。");
    exit;
}

if($epgdata[1]==""){
    print("該当の番組が見つかりません。");
    exit;
}

                $epgdata[1] = str_replace("date;", "", $epgdata[1]);
                $epgdata[2] = str_replace("duration;", "", $epgdata[2]);
                $epgdata[3] = str_replace("broadcasting;", "", $epgdata[3]);
                $epgdata[4] = str_replace("program;", "", $epgdata[4]);
                $epgdata[5] = str_replace("description;", "", $epgdata[5]);

//返却されたepgデータを表示
print("<a href=\"http://garapon.info/play/$gtvid\" target=_blank>
          $epgdata[4]</a><br />"
);
print("<a href=\"http://garapon.info/play/$gtvid\" target=_blank>
          <img src=\"http://{$ipaddr}/thumbs/$gtvid\"></a><br />"
);
print("※注:サムネイル画像は、ガラポンTVと同一LAN内の端末からアクセスしている場合表示されません。(API改修検討中)<br /><br />");          

print("放送日時:$epgdata[1]<br />");
print("番組尺:$epgdata[2]<br />");
print("放送局名:$epgdata[3]<br />");
print("番組詳細:$epgdata[5]<br /><hr /><br />");          
         
//番組内テキスト(字幕)検索用のgetするデータの生成
$get = "gtvid=$gtvid&gtvsession=$gtvsession";

//curlのリクエスト用URLを生成
$requrl = "http://{$ipaddr}/gapi/getjimakudata?$get";

$ch = curl_init($requrl);
curl_setopt($ch, CURLOPT_URL, $requrl);
curl_setopt($ch, CURLOPT_HTTPGET, TRUE); //明示的にPOSTからGETにリクエストを変更する
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);

curl_close($ch);

//print ("戻り値を配列に入れ替え<br />");
$jimakudata = preg_split("/\n/", $result);

if ($jimakudata[0]=="1;success"){
 
}else{
    print("該当の番組に字幕データはありませんでした。");
    exit;
}

for ($i=2; $i<count($jimakudata)-1;$i++){
$HH= substr($jimakudata[$i],0,2);
$MM= substr($jimakudata[$i],3,2);
$SS= substr($jimakudata[$i],6,2);
$zimakutxt= substr($jimakudata[$i],9);
$starttime= $HH*3600+$MM*60+$SS-7;//開始秒数は実際の開始位置よりも7秒前に設定。

if($starttime <0){
    $starttime =0;
}
print(" <a href=\"http://garapon.info/play/$gtvid:{$starttime}\" target=_blank>$HH:$MM:$SS</a> {$zimakutxt}<br />");
}


function getepg($gtvid, $gtvsession, $ipaddr) {
    //EPGデータ取得用にGETするデータの生成
    $get = "gtvid=$gtvid" . "&" . "gtvsession=$gtvsession";

    //curlのリクエスト用URLを生成
    $requrl = "http://{$ipaddr}/gapi/getepgdata?$get";

    $ch = curl_init($requrl);
    curl_setopt($ch, CURLOPT_URL, $requrl);
    curl_setopt($ch, CURLOPT_HTTPGET, TRUE); //明示的にPOSTからGETにリクエストを変更する
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    $result = curl_exec($ch);
   
    curl_close($ch);

    $epgdata = preg_split("/\n/", $result);
    return $epgdata;
}
?>

 

ガラポンTV API v.2(JSONレスポンス)の場合のサンプルコード

http://{$ipaddr}/gapi/v2/search?gtvsession=$gtvsession

というGETによるセッションID付のURLに対し、POSTで各種パラメータを送信してください。
(例:n=100&key=$searchepgword)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
           $post = "n=100&key=$searchepgword";

           //curlのリクエスト用URLを生成
           $requrl = "http://{$ipaddr}/gapi/v2/search?gtvsession=$gtvsession";

           $ch = curl_init($requrl);
           curl_setopt($ch, CURLOPT_URL, $requrl);
           curl_setopt($ch, CURLOPT_POST, TRUE);
           curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
           curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
           curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

           $result = curl_exec($ch);
           curl_close($ch);

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

・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にて動作確認済み。