Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

goo.glのAPI提供が開始されたので試してみた

via. Googleの短縮URL「goo.gl」がAPIの提供を開始 - F.Ko-Jiの「一秒後は未来」

なんだか、以前ちょろっと物議を醸しだしたServices_ShortURL_Googlを思い出します。。。
とりあえず、URLの短縮・展開だけのコードを書いてみました。

  • 短縮時は、短縮するURLをJSONデータとし、Content-Typeを指定してPOST
  • 展開時は、短縮されたURLをQUERY_STRINGに付けてGET

で良いようです。

<?php
require_once 'HTTP/Request2.php';

define('API_KEY', '[api key]');
define('SERVICE_URL', 'https://www.googleapis.com/urlshortener/v1/url');

define('TARGET_URL', 'http://d.hatena.ne.jp/shimooka/');

/**
 * shorten
 */
$req = new HTTP_Request2();
$req->setUrl(SERVICE_URL . '?key=' . API_KEY);
$req->setMethod(HTTP_Request2::METHOD_POST);
$req->setBody(json_encode(array('longUrl' => TARGET_URL)));
$req->setHeader('Content-Type', 'application/json');
$req->setConfig(array('ssl_verify_peer' => false));
try {
    $res = $req->send();
    if ($res->getStatus() !== 200) {
        throw new Exception('request failed status : ' . $res->getStatus());
    }
    $json = json_decode($res->getBody());
    $shortened_url = $json->id;
    var_dump($shortened_url);
} catch (Exception $e) {
    var_dump($e);
}

/**
 * expand
 */
$req = new HTTP_Request2();
$req->setUrl(SERVICE_URL . '?shortUrl=' . $shortened_url);
$req->setConfig(array('ssl_verify_peer' => false));
try {
    $res = $req->send();
    if ($res->getStatus() !== 200) {
        throw new Exception('request failed status : ' . $res->getStatus());
    }
    $json = json_decode($res->getBody());
    $long_url = $json->status === 'OK' ? $json->longUrl : 'maybe ' . $json->status;
    var_dump($long_url);
} catch (Exception $e) {
    var_dump($e);
}

APIキーはGoogleAPIs Consoleから取得できます。APIキーを使わず、OAuthによる認証も使えるようですが、APIキーの利用が推奨されています。また、リクエスト制限は、1日100万クエリのようです。
で、


APIs Consoleの「URL Shortener API」の欄にある「Activate」ボタンをクリックして取得してください。

に引っかかってしばらく悩んだのは秘密です X-(

追記(2011/01/12 10:55)

このAPIを利用するPEARパッケージ Services_ShortURL_Googl ver.0.2.0βを公開しました。