goo.gl (Google)
Googleが提供する短縮URLです。動作が安定していること、統計を確認できる機能もあり、Bit.lyと並んでスタンダードなAPIと言えるでしょう。
準備(APIキーの入手)
Googleの場合、まずはAPIキーを取得する必要があります。デベロッパー・コンソールの画面にアクセスして下さい。左上にある「プロジェクトを作成」というボタンをクリックします。
プロジェクト名を入力し、「作成」をクリックして下さい。特に理由がない限り、プロジェクトIDの欄を変更する必要はありません。しばらく待つと、プロジェクトが作成されます。
プロジェクトが作成されたら、左側メニューにある「API」という項目をクリックして下さい。Googleが提供するAPIの一覧が表示されます。
検索フォームに「URL Shortener API」と入力し、ヒットした「URL Shortener API」という項目名をクリックして下さい。
「URL Shortener API」の専用画面に移動します。「APIを有効にする」というボタンをクリックして下さい。これで、このプロジェクトで「URL Shortener API」を利用できるようになります。
左側メニューの「認証情報」をクリックして下さい。アプリケーションを管理する画面に移動するので、「新しいキーを作成」というボタンをクリックして下さい。このAPIの利用に認証は必要ありません。
アプリケーションを作成します。今回はウェブ上で利用するので「ブラウザ キー」をクリックして下さい。
続いて、どのホストのウェブページから、このアプリケーションを利用できるかを設定します。最初はエラーの原因を極力排除するため、許可対象リファラーの設定は空白(どのウェブページからも利用可)で、そのまま「作成」をクリックして下さい。ここは、サービスが本稼働になる時に設定しましょうか。
戻った画面に、作成されたキーの情報が掲載されています。「ブラウザ アプリケーションのキー」という項目の中の「APIキー」を確認して下さい。これを利用します。
短縮URLの作成方法
リクエスト方法
Googleの場合、取得したAPIキーをkey
プロパティの値にして、エンドポイントにリクエストを送ります。
POST https://www.googleapis.com/urlshortener/v1/url?key={API Key}
リクエストの内容はJSON形式で送ります。短縮したい元のURLアドレスは、longUrl
プロパティの値として指定して下さい。
JSON
{ "longUrl": "https://syncer.jp/" }
取得できるJSON
リクエストに成功すると、下記のJSONデータを取得できます。その中のid
プロパティの値に、作成された短縮URLがあります。
JSON
{"kind": "urlshortener#url","id": "http://goo.gl/8ltvm5","longUrl": "http://syncer.jp/how-to-make-shoten-url"}
サンプルプログラム
下記はGoogleの短縮URLを仕様したサンプルプログラムです。APIキーを設定して、起動してみて下さい。
PHP
<?php
// APIキーの設定
$api_key = '' ;
// 元のURL
$before_url = 'https://syncer.jp/how-to-make-shoten-url' ;
// GETメソッドで指定がある場合は上書き
if( isset( $_GET['url'] ) && !empty( $_GET['url'] ) ) {
$before_url = $_GET['url'] ;
}
// cURLを利用してリクエスト
$curl = curl_init() ;
curl_setopt( $curl, CURLOPT_URL , 'https://www.googleapis.com/urlshortener/v1/url?key=' . $api_key ) ;
curl_setopt( $curl, CURLOPT_HTTPHEADER, array( 'Content-type: application/json' ) ) ; // JSONの送信
curl_setopt( $curl, CURLOPT_CUSTOMREQUEST , 'POST' ) ; // POSTメソッド
curl_setopt( $curl, CURLOPT_POSTFIELDS, json_encode( array( 'longUrl' => $before_url ) ) ) ; // 送信するJSONデータ
curl_setopt( $curl, CURLOPT_HEADER, 1 ) ; // ヘッダーを取得する
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false ) ; // 証明書の検証を行わない
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true ) ; // curl_execの結果を文字列で返す
curl_setopt( $curl, CURLOPT_TIMEOUT, 15 ) ; // タイムアウトの秒数
curl_setopt( $curl, CURLOPT_FOLLOWLOCATION , true ) ; // リダイレクト先を追跡するか?
curl_setopt( $curl, CURLOPT_MAXREDIRS, 5 ) ; // 追跡する回数
$res1 = curl_exec( $curl ) ;
$res2 = curl_getinfo( $curl ) ;
curl_close( $curl ) ;
// 取得したデータ
$json = substr( $res1, $res2['header_size'] ) ; // 取得したデータ(JSONなど)
$header = substr( $res1, 0, $res2['header_size'] ) ; // レスポンスヘッダー (検証に利用したい場合にどうぞ)
// 取得したJSONをオブジェクトに変換
$obj = json_decode( $json ) ;
// URLを表示用に整形 (検証用)
foreach( array( 'before_url', ) as $variable_name ) {
${ $variable_name } = htmlspecialchars( ${ $variable_name } , ENT_QUOTES , 'UTF-8' ) ;
}
// HTML用
$html = '' ;
// 出力
$html .= '<h2>実行結果</h2>' ;
// 成功時
if( isset( $obj->id ) && !empty( $obj->id ) ) {
// 取得した短縮URL
$shorten_url = $obj->id ;
// 出力
$html .= '<dl>' ;
$html .= '<dt>オリジナルURL</dt>' ;
$html .= '<dd><a href="' . $before_url . '" target="_blank">' . $before_url . '</a></dd>' ;
$html .= '<dt>短縮したURL</dt>' ;
$html .= '<dd><a href="' . $shorten_url . '" target="_blank">' . $shorten_url . '</a></dd>' ;
$html .= '</dl>' ;
// 失敗時
} else {
$html .= '<p><mark>短縮URLを作成できませんでした…。</mark></p>';
}
// 取得したデータ
$html .= '<h2>取得したデータ</h2>' ;
$html .= '<h3>JSONの内容</h3>' ;
$html .= '<textarea>' ;
$html .= ( ($json!='') ? $json : '取得できませんでした…。' ) ;
$html .= '</textarea>' ;
$html .= '<h3>レスポンスヘッダーの内容</h3>' ;
$html .= '<textarea>' ;
$html .= ( $header ? $header : '取得できませんでした…。' ) ;
$html .= '</textarea>' ;
// URLの入力
$html .= '<h2>URLの指定</h2>' ;
$html .= '<form>' ;
$html .= '<p><input name="url" placeholder="https://syncer.jp" value="' . $before_url . '"></p>' ;
$html .= '<p><button>SHORTEN !!</button></p>' ;
$html .= '</form>' ;
// ブラウザに[$html]の内容を出力
// 運用時はHTMLのヘッダーとフッターを付けましょう。
echo $html ;