Twitterが採用したことで一気にURL短縮サービスのシェアを奪い取ったbit.ly 。
Twitterのような短いメッセージを投稿するサービスでは、如何に余計な情報を含めないかが鍵となるわけですが、URLは元来非常に長いものが多く、それだけでTwitterの制限を超える場合もあったりします。
便利に使えるbit.lyなどのURL短縮サービスですが、元のURLが変換されているが故に、その先のサイトの情報がわからず、ユーザー心理としては不安を覚えることもあったりします。
bit.lyのサイトへ行けば、短縮前のURLやサイト情報がわかったりもするのですが、ここではbit.lyのAPIを利用して、短縮されたURL情報からダイレクトに元のURLを引っ張るためのPHPスクリプトを書いてみました。
bit.lyのAPI利用の前に
bit.lyのAPIを利用するためには、ユーザー登録が必要です。
サイト自体は英語ですが、「Sign Up」のメニューから簡単にユーザー登録できますので、利用する場合は事前に登録しておきましょう。
ユーザー登録が完了し、サイトへログインすると右上に「Account」メニューがあります。
そこから、APIを利用する際に必要なAPI KEYを入手できます。
APIの利用法の詳細は、下記に情報があります。
bit.lyを使ってURLを短縮する
まずは、コマンドラインから入力したURL情報を、bit.lyで短縮するPHPスクリプトからです。
PEARのHTTP/Clientを利用して書いています。
<?php
require_once "HTTP/Client.php";
$page = "shorten?version=2.0.1&format=xml&login=hoge&apiKey=YourAPIKey&longUrl=" . trim($argv[1]);
$client = new HTTP_Client();
$client->get("http://api.bit.ly/". $page );
$response = $client->currentResponse();
$body = mb_convert_encoding($response['body'], "EUC-JP","auto");
$xml = new SimpleXMLElement($body);
echo $xml->results->nodeKeyVal->shortUrl . "\n";
?>
$page変数内のloginとapiKeyパラメータは、自分で取得したユーザー名とAPI KEYを入力しましょう。
最後につけているlongUrlが、短縮する対象のURLで標準入力からの情報をセットしています。
また、結果はXMLで受け取っていますが、その他にjson形式で受け取ることも可能です。
API利用時の認証は、API KEYを用いる以外にユーザー名とログインパスワードを用いたBasic認証を利用する方法もあります。(後述)
利用法は、下記の通りです。
$ php bitly-s.php http://ameblo.jp/itboy/ http://bit.ly/FPBm6
bit.lyで短縮したURLの元ソースを表示する
今度は短縮したURLを元に戻すPHPスクリプトです。
先ほどとは違い、認証時にBasic認証を使っています。(意味は特にありません)
<?php
require_once "HTTP/Client.php";
$username = "hoge";
$password = "foo";
$shortURL = trim($argv[1]);
$page = "expand?version=2.0.1&format=xml&shortUrl=" . $shortURL;
$basic = array('Authorization'=>'Basic '.base64_encode($username.':'.$password));
$client = new HTTP_Client(null, $basic);
$client->get("http://api.bit.ly/". $page );
$response = $client->currentResponse();
$body = mb_convert_encoding($response['body'], "EUC-JP","auto");
$xml = new SimpleXMLElement($body);
$hash = preg_replace("/^\//", "", parse_url($shortURL, PHP_URL_PATH));
echo $xml->results->$hash->longUrl . "\n";
?>
返ってくるXMLオブジェクトのノード名の一部にbit.lyのURLのハッシュ情報が含まれているため、短縮したURL情報からそれを取り出しています。
使い方は、下記の通り。
$ php bitly-e.php http://bit.ly/FPBm6 http://ameblo.jp/itboy/
短縮URLが含まれる情報から元のサイト情報を引っ張ってきたい、と言う場合に利用してみてはいかがでしょうか。
