AFNetwrokingを使用してHTTP通信を繰り返し行い、JSONデータを取り出したい
日本語版のDBpediaのサイトから情報を取り出すために、API取得URLを書いています。
例えば、地球温暖化に関するWikipediaのページから関連する文字列(例:温室効果ガス)を取得したら、再度その関連する文字列についてクエリでの検索を行い、関連する文字列(温室効果ガスに関連する文字列)を取得する、またその関連する文字列についてクエリでの検索を行い、、、という繰り返し処理を行い、階層関係を考慮して配列に格納していきたいのです。
しかしながら、それがうまく実装することができません。。。
なんでも良いのでアドバイス、よろしくお願いいたします!!!
↓現在困っているのが、以下のプログラムの行のあたりで、
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject){
なぜか5回分のループを行いたいのに0からカウントを始めたいのに、いきなり3階層目,4階層目,と数字が飛んでカウントされてしまいます。
↓作成中のプログラム
__block NSString *topic = @"地球温暖化";
for(int layerNum=0; layerNum<5; layerNum++) {
NSLog(@"%d回目の探索", layerNum+1);
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
[manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/json", @"sparql-results+json", @"text/json", @"text/html", @"text/xml", nil]];
//NSLog(@"%d--------------", layerNum);
//通信成功時の処理
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject){
//NSLog(@"Response : %@", [operation responseString]);
NSLog(@"----------------------------%d階層目 はじまり", layerNum+1);//なぞ
NSData *json = responseObject;
NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:json options:NSJSONReadingAllowFragments error:nil];
//NSLog(@"output array : %@", [jsonDic description]);
NSArray *bindings = [jsonDic st_arrayForPath:@"results.bindings"];
NSLog(@"探索topic : %@", topic);
NSMutableArray *mArray1 = [NSMutableArray array];
[allValuesArray enumerateObjectsUsingBlock:^(NSString *valueString, NSUInteger idx, BOOL *stop) {
NSLog(@"%lu: %@", (unsigned long)idx, valueString);//数字:値 がずらーっと出力される
//ある層で選定キーワードが見つかった数mだけ配列をm個生成させる
for (int j=0; j<[shouldLearnKeywords count]; j++) {
if([valueString caseInsensitiveCompare:shouldLearnKeywords[j]] == NSOrderedSame){
NSLog(@" 同じのが見つかった: %d.%@", j, valueString);//選定キーワードが配列allValuesArrayから見つかったらはく
[mArray1 addObject:shouldLearnKeywords[j]];
}
}
}];
//取り出したキーワード
NSInteger size = [mArray1 count];
NSLog(@"取り出されたキーワードの数:%ld", size);
for(int j=0; j<[mArray1 count]; j++){
NSLog(@"%d階層 探索候補:%d %@", layerNum+1, j,mArray1[j]);
}
//取り出されたキーワードを選定した配列から削除
[shouldLearnKeywords removeObjectsInArray:mArray1];
NSInteger size1 = [shouldLearnKeywords count];
NSLog(@"のこりのキーワードの数:%ld", size1);
for(int j=0; j<[shouldLearnKeywords count]; j++){
NSLog(@"残りのキーワード:%@",shouldLearnKeywords[j]);
}
NSLog(@"----------------------------%d階層目 おわり", layerNum+1);//なぞ
//topic変更
topic = shouldLearnKeywords[0];
NSLog(@"topic : %@", topic);
//通信失敗時の処理
}failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Response %@", [operation responseString]);
NSLog(@"Error : %@", error);
}];
[operation start];
}