Cocoa/CocoaTouchからRemember The Milk APIを使ってみる(その4:レスポンスの解析)

なんか順番メチャクチャじゃないですかこのシリーズ。
えーと、RTM APIのレスポンスはデフォルトではXML
http://www.rememberthemilk.com/services/api/response.rest.rtm
呼び出しのときにパラメータにformat=jsonを含めるとJSONで返してくれるそうです。
http://www.rememberthemilk.com/services/api/response.json.rtm

NSXMLParserを引っ張り出して、このXMLをNSDictionaryに変換してやることにした。
要素名が複数形のsで終わったらNSArrayという乱暴な手段をとったコード。

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
	attributes:(NSDictionary *)attributeDict {
	
	NSMutableDictionary *parentElement = [elementPath lastObject];
	NSMutableDictionary *currentElement = [NSMutableDictionary dictionary];
	
	// am i root?
	if (!parentElement) {
		self.response = currentElement;
		self.elementPath = [NSMutableArray array];
	}
	
	[currentElement setObject:elementName forKey:@"_elementName"];
	if (attributeDict)
		[currentElement setObject:attributeDict forKey:@"_attribute"];
	
	// have i an array?
	if ([elementName hasSuffix:@"s"]) {
		[currentElement setObject:[NSMutableArray array] forKey:@"_array"];
	}
	
	// am i in array?
	NSMutableArray *currentArray = [parentElement objectForKey:@"_array"];
	if (currentArray) {
		[currentArray addObject:currentElement];
	} else {
		[parentElement setObject:currentElement forKey:elementName];
	}
	[elementPath addObject:currentElement];
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
	NSMutableDictionary *currentElement = [elementPath lastObject];
	NSMutableString *currentContent = [currentElement objectForKey:@"_content"];
	if (!currentContent) {
		currentContent = [NSMutableString string];
		[currentElement setObject:currentContent forKey:@"_content"];
	}
	[currentContent appendString:string];
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
	
	[elementPath removeLastObject];
}

で、APIを叩く→レスポンスをNSDictionaryで返す、をやってくれるクラスを作った。未来の俺はもっとマシなコードを書くように。
http://homepage.mac.com/k_natori/Temp/RTMConnector.zip