SimpleHttpClient に JSON と XML のフィルタを追加しました

以前作った SimpleHttpClient ですが、ダウロード後のデータを BSJSONAdditionsKissXML に引き渡し、適宜オブジェクトを作成して返すようにしました。

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 されてしまいます。

SimpleHttpClient 残作業

  • テストコードをリファクタリングする(テストコードに重複が多数あるため)
  • NSOperationQueue を外部から受け取るようにする(SimpleHttpClient 以外でもスレッドを使うため)
  • HTML 用のフィルタを作る(HTML でも XPath 使いたい!)