ガラポン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>vsession=$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にて動作確認済み。



