以前に「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_loginとx_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";
[参考記事]