Google URL Shortener API (goo.gl) をPHPからアクセスしてみる
Googleの短縮URLサービス「Goo.gl」のAPIとなる、「Google URL Shortener API」が使えるようになっていたので、PHPからアクセスしてみました。
「cURL」と「PEAR::HTTP_Request2」で試してみました。
事前準備 - APIキーを取得する
「Google URL Shortener API」を使用するには、APIキーが必要になるので、事前に発行しておきます。
APIキーの発行は「Google APIs Console」から行うことができます。
cURL で試してみる
Googleの短縮URL「goo.gl」のAPIをPHPのcURLで使うサンプル - F.Ko-Jiの「一秒後は未来」 がとても参考になりました。
HTTPヘッダに「Content-type: application/json」をセット
「Google URL Shortener API」へのPOSTは、JSON形式で行う必要があるので、HTTPヘッダに「Content-type: application/json」をセットします。
cURLでのHTTPヘッダのセットには「curl_setopt」に「CURLOPT_HTTPHEADER」を指定して行います。
<?php //設定する HTTP ヘッダフィールドの配列 curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
POSTするデータをJSON形式でセット
HTTPヘッダに「Content-type: application/json」をセットしたので、POSTするデータもJSON形式で渡すようにします。
cURLでのPOSTデータのセットには「curl_setopt」に「CURLOPT_POSTFIELDS」を指定して行います。
<?php //短縮させたいURL $long_url = 'http://example.com/'; // 〜 省略 〜 //POSTで送信するすべてのデータ curl_setopt($curl, CURLOPT_POSTFIELDS, '{"longUrl":"' . $long_url . '"}');$
cURLでのサンプルコード(全体)
cURLでのサンプルコードになります。
<?php $api_url = 'https://www.googleapis.com/urlshortener/v1/url'; $api_key = '[your API Key]'; $long_url = 'http://example.com/'; //cURL セッションを初期化 $curl = curl_init("$api_url?key=$api_key"); //設定する HTTP ヘッダフィールドの配列 curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json')); //HTTP POST をするように設定 curl_setopt($curl, CURLOPT_POST, 1); //POSTで送信するすべてのデータ curl_setopt($curl, CURLOPT_POSTFIELDS, '{"longUrl":"' . $long_url . '"}');$ //curl_exec() の返り値を 文字列で返すように設定 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //cURL セッションを実行(レスポンスを文字列で取得) $res = curl_exec($curl); //cURL セッションを閉じる curl_close($curl); echo $res;
PEAR::HTTP_Request2 で試してみる
PEARの「HTTP_Request2」を使用する方法です。
goo.glのAPI提供が開始されたので試してみた - Do You PHP はてな がとても参考になりました。
「HTTP_Request2」をインストール
「HTTP_Request2」がインストールされていない場合は、インストールしておきます。
「HTTP_Request2」を使用するには「Net_URL2」も必要になるので、合わせてインストールしておきます。
$ sudo pear install channel://pear.php.net/Net_URL2-0.3.0 $ sudo pear install channel://pear.php.net/HTTP_Request2-0.4.1
「ssl_verify_peer」をoffにする
HTTP_Request2のデフォルトではクライアント証明書が要求される設定になっているので、これをoffにします。
設定には「HTTP_Request2::setConfig」の「ssl_verify_peer」に「false」を設定します。
<?php // ssl_verify_peer を falseにする。 // ※HTTP_Request2 はデフォルトで true になっている。 $request->setConfig('ssl_verify_peer', false);
POSTデータはJSON形式にして「setBody」でセット
HTTP_Request2でPOSTデータをセットする場合、通常は「addPostParameter」を使用しますが、今回はJSONをセットする必要があるため、「setBody」を使用します。
「setBody」にセットする値は、連想配列を「json_encode」に渡した返り値になります。
<?php // POSTパラメータをセット // 配列を json_encode して渡す $request->setBody(json_encode(array('longUrl' => $long_url)));
PEAR::HTTP_Request2 でのサンプルコード(全体)
PEAR::HTTP_Request2 でのサンプルコードになります。
cURLのコードには入れていなかった、例外処理やHTTPステータスコードのチェック、レスポンスデータのJSONエンコードなどを追加しています。
<?php require_once 'HTTP/Request2.php'; define('HTTP_STATUS_OK', 200); $api_url = 'https://www.googleapis.com/urlshortener/v1/url'; $api_key = '[your API Key]'; $long_url = 'http://example.com/'; try { $request = new HTTP_Request2(); $request->setUrl($api_url .'?key=' . $api_key); // 送信方法をPOSTに設定 $request->setMethod(HTTP_Request2::METHOD_POST); // ssl_verify_peer を falseにする。 // ※HTTP_Request2 はデフォルトで true になっている。 $request->setConfig('ssl_verify_peer', false); // 設定する HTTP ヘッダフィールドの配列 // JSONで渡すように指定する。 $request->setHeader('Content-type', 'application/json'); // POSTパラメータをセット // 配列を json_encode して渡す $request->setBody(json_encode(array('longUrl' => $long_url))); //POST $response = $request->send(); if ($response->getStatus() !== HTTP_STATUS_OK) { throw new Exception('http request failed : ' . $res->getStatus()); } //レスポンスをJSONにデコードして取得 $json = json_decode($response->getBody()); //goo.glの短縮URLを取得 $short_url = $json->id; echo $short_url; } catch (HTTP_Request2_Exception $e) { die($e->getMessage()); } catch (Exception $e) { die($e->getMessage()); }
今回参考にしたページ
Getting Started - Google URL Shortener API - Google Code
http://code.google.com/intl/ja/apis/urlshortener/v1/getting_started.html
Googleの短縮URL「goo.gl」のAPIをPHPのcURLで使うサンプル - F.Ko-Jiの「一秒後は未来」
http://blog.fkoji.com/2011/01291723.html
素晴らしき哉、人生! Mac OS 10.5にpearをインストール
http://www.o-hiro.net/blog/2008/04/mac_os_105pear.html
PEAR HTTP_Request2 を使いたい - Cocoron’s memo
http://d.hatena.ne.jp/o0cocoron0o/20101207/1291671073
goo.glのAPI提供が開始されたので試してみた - Do You PHP はてな
http://d.hatena.ne.jp/shimooka/20110111/1294722343