AJAX Search API をYAJLで使ってみます。
2010/06/07
googleapi
iphone
json
objective-c
アプリ経由で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];
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];
あとは型でチェックするコードを追加すればまあまあいけるかな。どうでしょうか。
: