hogehoge foobar Blog Style Beta

Web,Mac,Linux,JavaScript,Perl,PHP,RegExp,Git,Vim,Redmineなど技術的なことのメモや、ちょっと便利そうなものの紹介をしています。

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」から行うことができます。

Google APIs Console

cURL で試してみる

PHP標準の「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」のAPIPHPcURLで使うサンプル - 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