AJAX Search API をYAJLで使ってみます。 2010/06/07


アプリ経由でgoogleさんの検索結果が欲しいなと思いました。
JSONで取得することにして、簡単だー、と思っていたら、Objective-CでどうJSONって扱うのだろうというところでとまどいました。


こちらの記事を読んでYAJLを使ってみることに決定。

使用しているライブラリは、

ここまではいいのですが、Objctive-Cをよく理解できていない僕は、悩むわけでした。

なんとか、必要な情報をとるためのコードをこさえました。
参考

yajl-objcをとりこんだあとは、
これを忘れずに、
#import "YAJL.h"


Objective-Cってなかなか柔軟であることに気がつきました。
(いまさらですが...)

YAJLDocumentベースで作成してます。

コード
NSString *urlString = @"http://ajax.googleapis.com/ajax/services/search/web?q=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%A1%E3%83%A22&v=1.0&rsz=large&hl=ja";

NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [NSData dataWithContentsOfURL:url];

NSError *error = nil;
YAJLDocument *document = [[YAJLDocument alloc] initWithData:data parserOptions:YAJLDecoderCurrentTypeDict error:&error];

NSLog(@"Root: %@", document.root);
NSLog(@"==================================");
NSLog(@"responseStatus==>[%@]", [document.root objectForKey:@"responseStatus"]);// ステータス200ならOK
id cursor = [[document.root objectForKey:@"responseData"] objectForKey:@"cursor"];// カーソル
{
NSLog(@"型を調べてみると==>[%@]", [cursor class]);
for (id o in cursor) {
NSLog(@" 型==>%@", [o class]);
}
}
id results = [[document.root objectForKey:@"responseData"] objectForKey:@"results"];// 検索結果

NSLog(@"型を調べてみると==>[%@]", [results class]);
for (id o in results ) {
NSLog(@" 型==>%@", [o class]);
NSLog(@" %@", [o objectForKey:@"cacheUrl"]);
NSLog(@" %@", [o objectForKey:@"content"]);
NSLog(@" %@", [o objectForKey:@"titleNoFormatting"]);
NSLog(@" %@", [o objectForKey:@"url"]);
}
[document release];


あとは型でチェックするコードを追加すればまあまあいけるかな。どうでしょうか。

: