読者です 読者をやめる 読者になる 読者になる

CORDEA blog

Programming及びFedora21等のLinux OSのことが多めです。

AFNetworking+OnoでXMLを取ってきてパースする

Objective-C

調べたらいっぱい出てくるんですけど、若干やり方変わったようなのでメモ。

何も考えずAFXMLParserとか使うとNSXMLParserが返ってくるので若干その後の処理が面倒になりそうな様子。

#import "XMLParser.h"
#import <AFNetworking/AFNetworking.h>
#import <AFOnoResponseSerializer/AFOnoResponseSerializer.h>
#import <Ono/Ono.h>

@implementation XMLParser

// method: 1
- (void) parseXMLUsingAFNetworkingAndOnoFirst: (NSString *)url {
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFOnoResponseSerializer XMLResponseSerializer];
    
    [manager
     GET:url
     parameters:nil
     success:^(AFHTTPRequestOperation *operation, ONOXMLDocument *responseDocument) {
         // ONOXMLDocument
         NSLog(@"responseDocument: %@", [responseDocument class]);
         // ref. https://github.com/AFNetworking/AFOnoResponseSerializer
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         NSLog(@"failure: %@", error);
     }];
}

// method: 2
- (void) parseXMLUsingAFNetworkingAndOnoSecond: (NSString *)url {
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    
    [manager
     GET:url
     parameters:nil
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
         // _NSInlineData
         NSLog(@"responseObject: %@", [operation.responseData class]);
         // HTMLDocumentWithDataとか適当に
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         NSLog(@"failure: %@", error);
     }];
}

// NSXMLParser使う場合
- (void) parseXMLUsingAFNetworking: (NSString *)url {
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
    
    [manager
     GET:url
     parameters:nil
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
         // NSXMLParser
         NSLog(@"responseObject: %@", [responseObject class]);
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         NSLog(@"failure: %@", error);
     }];
}

@end

どうでも良いがobj-cのシンタックスハイライトが微妙すぎて笑える。
久々にブログ書いて疲れたので大した説明もなしで終わり。