SimpleHttpClient に JSON と XML のフィルタを追加しました
以前作った SimpleHttpClient ですが、ダウロード後のデータを BSJSONAdditions や KissXML に引き渡し、適宜オブジェクトを作成して返すようにしました。
WSSE に対応した際と同じくドメイン毎にフィルタを設定できるので、reader.livedoor.com から取得したデータは JSON フィルタを通す、b.hatena.ne.jp から取得したデータは XML フィルタを通す・・・という使い方が可能です。
具体的には、下記のように設定を行ないます。
SimpleHttpClient *client = [[[SimpleHttpClient alloc] initWithDelegate:self] autorelease]; [client setFilter:SimpleHttpClientFilterJSON forHost:@"reader.livedoor.com" ]; [client setFilter:SimpleHttpClientFilterXML forHost:@"b.hatena.ne.jp" ];
もし、http://reader.livedoor.com/api/subs に対してリクエストを送ったのであれば、フィルタ済みのデータを受け取るには下記のようにします。
- (void)simpleHttpClientOperationDidFinishLoading:(SimpleHttpClientOperation *)operation filteredData:(id)data { _subs = (NSArray *)[data retain]; }
http://reader.livedoor.com/api/subs は、Array 型の JSON を返すので NSArray * にキャストします。
data は autorelease 済みであり、simpleHttpClientOperationDidFinishLoading:filteredData: メッセージは、サブスレッドの中で呼ばれるので、retain しておかないと、サブスレッド終了時に NSAutoreleasePool に release されてしまいます。