Objective-CのJSON Frameworkを使ってTwitterの情報等を取得する方法

Google CodeでObjective-C用のJSON Frameworkが公開されているので、これを使ってTwitter等のJSONフィードを利用する方法をメモしておく(以下の内容は基本的にスタンフォード大学iPhoneアプリ開発講座で学んだ事である)。

なお、上記のフレームワークのインストール方法、基本的な使用方法に関しては、以下のブログに詳しく書かれている。


ステップ1: TwitterAPIドキュメントから取得したいJSON情報のURLを調べる
まずTwitterの情報を取得してくる場合であるが、例えばあるユーザのつぶやきをJSONフォーマットで取得する場合、以下のようなURLで取得する事が可能である(ユーザtomuteのつぶやきを取得する場合)。
参照:http://apiwiki.twitter.com/Twitter-API-Documentation

http://twitter.com/statuses/user_timeline/tomute.json


ステップ2: JSONフレームワークを利用してJSON情報を利用する
取得したいJSON情報のURLが分かったら、以下のようなコードでJSON情報の取得、及び解析が可能である。

NSString *urlString =
        @"http://twitter.com/statuses/user_timeline/tomute.json";
NSURL *url = [NSURL URLWithString:urlString];
NSString *jsonString = [NSString stringWithContentsOfURL:url
                                 encoding:NSUTF8StringEncoding
                                 error:nil];
// JSONフレームワークによってNSStringクラスの拡張が行われており、
// JSONValueというメソッドが追加されている。このメソッドを呼ぶ事で
// JSON情報のパースが行われる。
NSArray *jsonArray = [jsonString JSONValue];
for (NSDictionary *dic in jsonArray) {
    // つぶやきとつぶやいた時刻をダンプ
    NSLog([dic objectForKey:@"text"]);
    NSLog([dic objectForKey:@"created_at"]);
}

注意するポイントとしては、JSONValueメソッドの戻り値は、NSArrayではなくNSDictionaryの事もあり、これはJSONの内容に依存するという点である。例えば、http://twitter.com/users/show/tomute.jsonというURLだと、指定したユーザの情報を取得する事が出来るのだが、こちらの場合にはNSDictionaryが返って来る。


なお、Twitterの情報ではなくFlickrの写真を取得したい場合には、基本的には上記のURL指定箇所を変更するだけで良い。例えば特定のタグが振られた写真を取得する場合には、以下のようなURLを指定する。

http://api.flickr.com/services/rest/?method=flickr.photos.search&
api_key=@"APIKEY"&tags=@"Trip"&per_page=10&format=json&nojsoncallback=1

参照:Flickr Services


【おまけ】
英語のブログであるが、以下のブログにはこのJSON Frameworkを使う方法がより詳しく書かれてる。