NSURLSessionでGoogleImageSearchAPIを使う(iOS, Objective-C)

自分用備忘録です. NSURLSessionを使ってJSONを取得する方法をやったので,今回はGoogle Image Search APIをObjective-Cで使ってみたいと思います. このAPIをJavascript, Pythonで触ったことがあるのでAPIについては割愛. 今回の目標はあるクエリ(orangeとした)で検索して1ページ目全8件の画像を取得し,それぞれのURLを,

@property (nonatomic, strong) NSMutableArray *imageURLs;

こいつに格納する.その後格納された件数を出力する,というものです.あまり楽しくはないか. 前回のポストとほとんど同じで,このAPI用に何か特別な処理をする,ということはない. コードはこんな感じ.

NSString *keyword = @"orange";

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
NSString *urlBaseString = @"http://ajax.googleapis.com/ajax/services/search/images?v=1.0&hl=ja&rsz=large&start=0&q=%@";
NSString *urlString = [NSString stringWithFormat:urlBaseString, keyword];
NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil  ];

NSURLSessionDataTask *jsonData = [session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    if (!error) {
        NSHTTPURLResponse *httpResp = (NSHTTPURLResponse *) response;
        if (httpResp.statusCode == 200) {
            NSLog(@"success!");
            NSError *jsonError;

            NSDictionary *rawJSON = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&jsonError];

            NSMutableArray *imageURLsFound = [[NSMutableArray alloc]init];

            if (!jsonError) {
                NSArray *results = rawJSON[@"responseData"][@"results"];
                for (NSDictionary *result in results) {
                    NSURL *imageURL = [NSURL URLWithString:result[@"url"]];
                    [imageURLsFound addObject:imageURL];
                }
                self.imageURLs = imageURLsFound;

                dispatch_async(dispatch_get_main_queue(), ^{
                    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
                    NSLog(@"%lu", _imageURLs.count);
                });
            }
        }
    }
}];
[jsonData resume];

個人的に気になるのは以下の二つ.まずこれ.

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

これをYES, NOで切り替えてるのだけどもなんなんだろうこれは. 名前的に上のネットワーク使用中の出すか出さないかだと思うんだが,と思ったらその通りだった. 気になる方は是非消して実行してみてほしい.
次にこれ.

dispatch_async(dispatch_get_main_queue(), ^{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    NSLog(@"%lu", _imageURLs.count);
});

dispatch_asyncで非同期処理の終わりを意味するのでしょうか. とりあえず書いておいて,JSON解析後の処理をここに書くのがよろしいのではないでしょうか. そんな感じ.全くわかってないけど,一歩一歩ってやつだよね.

NSURLSessionでGoogleImageSearchAPIを使う(iOS, Objective-C)」への3件のフィードバック

    • すみません,swiftは書いたことがありません.
      基本的にはHTTPリクエストを送るモジュールがあり,それを利用する流れになるかと思われます.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中