bit.lyのREST APIを使って短縮URLを作成する方法(改訂版)


以前に「bit.lyのREST APIを使って短縮URLを作成する方法 - Tomute’s Notes」という記事を書いたのだが、その後APIのバージョンが3.0に上がったため、内容が若干古くなっていた。そこで、bit.lyのREST APIバージョン3.0の使い方を以下に記載したいと思う(以前のバージョン2.0のAPIも、まだ引き続き使える)。


[準備]
その1:APIキーの取得
bit.lyのREST APIを利用するにはAPIキーが必須のため、そのAPIキーを取得する。取得方法は非常に簡単で、bit.lyのユーザアカウントを作成するだけでOKである(アカウントの作成はコチラから)。
アカウント作成後にAPIキーの表示ページに行くと、APIキーが表示されるのでそれを利用する。


その2:JSONパーサーのダウンロード
bit.lyのREST APIはデフォルトではJSON形式でレスポンスを返すため(XML形式も選択可)、JSONパーサーを利用するのが良い。今回はjson-frameworkを利用する。json-frameworkの使い方に関しては以下を参考にどうぞ。


その3:URLエンコード用のメソッドを用意する
bit.lyのREST APIで短縮するURLは、事前にURLエンコードされている必要がある。NSStringクラスのstringByAddingPercentEscapesUsingEncodingメソッドは不完全なため、カテゴリによってNSStringにURLエンコード用のメソッドを追加する。追加するメソッドは以下のブログを参考にする。

以上で準備は完了。


[利用方法]
その1:基本パターン
短縮URLを作成する具体的な方法は以下のような形である。

NSString *userName = @"tomute";
NSString *apiKey = @"your_api_key";
NSString *longURL = @"http://longurl.com";    // 短縮したいURL
NSString *baseURLString = @"http://api.bit.ly/v3/shorten?&login=%@&apiKey=%@&longUrl=%@";

// URLをエンコードする(カテゴリによってNSStringに追加したメソッドを使用)
NSString *encodedLongURL = [longURL stringByURLEncoding:NSUTF8StringEncoding];

// bit.lyのAPIをコールするためのURLを作成する
NSString *urlString = [NSString stringWithFormat:baseURLString, userName, apiKey, encodedLongURL];
NSURL *url = [NSURL URLWithString:urlString];

// bit.lyのAPIをコールする
NSString *jsonResult = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

// 取得したJSONフォーマットのデータをjson-frameworkを使ってパースする
NSDictionary *dic = [jsonResult JSONValue];
	
// 短縮されたURLを取り出す
if ([[dic objectForKey:@"status_code"] intValue] == 200) {
    NSString *shortenURL = [[dic objectForKey:@"data"] objectForKey:@"url"];
    NSLog(@"%@", shorten);
}


その2:簡易パターン
bit.lyのAPIはデフォルトではJSONフォーマットのデータを返すのだが、シンプルなテキストフォーマットのデータを返すようにする事も出来る。やり方は非常に簡単で、bit.lyのAPIをコールするURLの最後に&format=txtを付けるだけである。

NSString *userName = @"tomute";
NSString *apiKey = @"your_api_key";
NSString *longURL = @"http://longurl.com";    // 短縮したいURL
NSString *baseURLString = @"http://api.bit.ly/v3/shorten?&login=%@&apiKey=%@&longUrl=%@&format=txt";

NSString *encodedLongURL = [longURL stringByURLEncoding:NSUTF8StringEncoding];

NSString *urlString = [NSString stringWithFormat:baseURLString, userName, apiKey, encodedLongURL];
NSURL *url = [NSURL URLWithString:urlString];

// bit.lyのAPIをコールする
NSString *shortenURL = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@", shortenURL);

上記のように、シンプルに短縮されたURLのみが返ってくるので、JSONのパース等は不要である。ただし、エラーが発生した場合に、エラーの原因などが分からないという欠点がある。


その3:ユーザのbit.lyアカウントを使用する
bit.lyのアカウントを作成してURLの短縮を行うと、その短縮したURLが何回クリックされたか等のトラッキングが可能となる。
iPhoneアプリでURLを短縮した場合でも、ユーザがそのURLをトラッキングしたいと思う事も想定されるが、bit.lyのAPIはそのような事を可能にする。
あらかじめユーザに、ユーザのbit.lyのユーザ名とAPIキーをiPhoneアプリ上で入力しておいてもらえば、あとはそれらをx_loginx_apiKeyというパラメータで渡すだけである。

NSString *customerUserName = @"customer_user_name"
NSString *customerApiKey = @"customer_api_key";
NSString *baseURLString = @"http://api.bit.ly/v3/shorten?&login=%@&apiKey=%@&longUrl=%@&x_login=%@&x_apiKey=%@";

NSString *urlString = [NSString stringWithFormat:baseURLString, userName, apiKey, encodedLongURL, customerUserName, customerApiKey];

なお、TwitterクライアントのEchofon等はこのような機能をサポートしている。


その4:j.mpを使う
最後に、bit.lyはj.mpという更に短い短縮URLサービスもやっているのだが、こちらのURLを生成したい場合には、URLの最後に&domain=j.mpを付ければ良い。

NSString *baseURLString = @"http://api.bit.ly/v3/shorten?&login=%@&apiKey=%@&longUrl=%@&domain=j.mp";


[参考記事]