Twitter 検索結果のJSONデータのパースのメモ
Twitter API のSearch へ投げかけて検索かけた結果を取得、保存したいのだけれど
JSONデータのパース等が難しくかなりつまづいたのでメモ。
□参考にした記事
[iOS]NSJSONReadingMutableLeavesの挙動が謎すぎる - l4
http://kozy.heteml.jp/l4l/2012/10/iosnsjsonreadingmutableleaves.html
iPhone アプリ研究会 NSJSONSerialization使ってみた
http://appteam.blog114.fc2.com/blog-entry-227.html
[iOS]jsonデータを読み込む | モリ☆ログ
http://monoko.sakura.ne.jp/blog/archives/1598
twitterの検索を行い、 結果のJSONをparseする(NSJSONSerialization) - 未来・実装・ほげほげ
http://d.hatena.ne.jp/tototti+dev/20121124/1353768359
STILL WORKING - Objective-CでJSONをパースする
http://stillworking.blog.fc2.com/blog-entry-36.html
Twitterドキュメント/検索関連のAPI
http://wiki.tmd45.jp/wiki.cgi?page=Twitter%A5%C9%A5%AD%A5%E5%A5%E1%A5%F3%A5%C8%2F%B8%A1%BA%F7%B4%D8%CF%A2%A4%CEAPI
例えば取得してきたJSONデータの例
{ "search_metadata" = { "completed_in" = "0.028"; count = 15; "max_id" = 370105375313231872; "max_id_str" = 370105375313231872; "next_results" = "?max_id=370105309399756799&q=2ch&include_entities=1"; query = 2ch; "refresh_url" = "?since_id=370105375313231872&q=2ch&include_entities=1"; "since_id" = 0; "since_id_str" = 0; }; statuses = ( { 省略(ここに検索結果の様々情報。text要素やuser要素など) }; },
↑のようなJSONデータをとってきてます。
これが1件分。検索なので15件取ってきました。
(search_metadataは私は必要ないので無視しました)
その中から、text要素、user要素の中(screen_name,profile_image_url)
を個別に取得出来ませんでした。
そこでなんとか
NSError *jsonError; NSString *jstr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSData *json_data = [jstr dataUsingEncoding:NSUnicodeStringEncoding]; NSDictionary *searchDictinary = [NSJSONSerialization JSONObjectWithData:json_data options:NSJSONReadingAllowFragments error:&jsonError]; for (NSDictionary *tweet in [searchDictinary objectForKey:@"statuses"]) { NSArray* allkeys = [tweet allKeys]; NSLog(@"%@",allkeys); int tempcount = 0; //15件分取得 if(tempcount < 15){ [tweetTextArray addObject:[tweet objectForKey:@"text"]]; NSDictionary *user = [tweet objectForKey:@"user"]; [userNameArray addObject:[user objectForKey:@"screen_name"]]; [tweetIconArray addObject:[user objectForKey:@"profile_image_url"]]; tempcount += 1; } }
のように記述して
NSDictionary objectForKeyでまずstatuses部分を取得。
そこからまた objectForKeyでそれぞれの要素を取得しました。
格納していく部分の記述がかなり汚いですが・・・一応取得、格納出来ました。