Clear Read APIにアクセスして、リンクから記事のテキストを抽出しています。APIは、このURLにパラメーターを入力することで機能http://api.thequeue.org/v1/clear?url=&format=
します。URLの後に入力しhttp://www.nytimes.com/2013/03/25/business/global/cyprus-and-europe-officials-agree-on-outlines-of-a-bailout.html?hp&_r=0
たり、フォーマットの後に入力したりできますjson
。
次に、JSONをステータスコード、、の形式で返し、記事のタイトル、そのURL、および抽出された記事のテキストitem
内に返します。item
次のコードを使用して、AFNetworkingおよびAFHTTPClient(AFClearReadClientとしてサブクラス化)を介してこれとインターフェイスしようとしています。
私のAFClearReadClientクラス:
#import "AFClearReadClient.h"
#import "AFJSONRequestOperation.h"
@implementation AFClearReadClient
+ (AFClearReadClient *)sharedClient {
static AFClearReadClient *sharedClient = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedClient = [[AFClearReadClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://api.thequeue.org/v1/clear?url=&format="]];
});
return sharedClient;
}
- (id)initWithBaseURL:(NSURL *)url {
if (self = [super initWithBaseURL:url]) {
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
[self setDefaultHeader:@"Accept" value:@"application/json"];
}
return self;
}
そして私のルートviewcontrollerで以下:
- (void)addArticlesToQueueFromList:(NSDictionary *)articles {
// Restrict amount of operations that can occur at once
[[AFClearReadClient sharedClient].operationQueue setMaxConcurrentOperationCount:5];
// Create an array to hold all of our requests to make
NSMutableArray *requestOperations = [[NSMutableArray alloc] init];
for (NSString *key in articles) {
// Create the request from the article's URL and the request parameters
NSString *articleURL = [[articles objectForKey:key] objectForKey:@"resolved_url"];
NSDictionary *requestParameters = @{@"url": articleURL,
@"format": @"json"};
NSMutableURLRequest *request = [[AFClearReadClient sharedClient] requestWithMethod:@"GET" path:nil parameters:requestParameters];
// Create the request operation and specify behaviour on success and failure
AFHTTPRequestOperation *requestOperation = [[AFClearReadClient sharedClient] HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) {
// Get the item NSDictionary from the JSON responseObject
NSDictionary *item = [responseObject objectForKey:@"item"];
// Get the values needed to create an article
NSString *title = [item objectForKey:@"title"];
NSString *URL = [item objectForKey:@"link"];
NSString *body = [item objectForKey:@"description"];
// Create and add the article to our list of articles
Article *article = [[Article alloc] initWithTitle:title URL:URL body:body];
[self.articles insertObject:article atIndex:0];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Request operation error");
}];
// Save the request operation in an NSArray so all can be enqueued later
[requestOperations addObject:requestOperation];
}
// Enqueue the request operations
[[AFClearReadClient sharedClient] enqueueBatchOfHTTPRequestOperations:requestOperations progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) {
NSLog(@"Processing...");
[self.tableView reloadData];
} completionBlock:^(NSArray *operations) {
NSLog(@"Done!");
}];
}
しかし、実行するたびに、テーブルビューにデータが入力されることを期待していました(RootViewControllerのarticles配列からセルを取得します)が、代わりにコンソールに次の情報が表示されます。
2013-03-25 11:31:35.470 [19020:c07] Processing...
2013-03-25 11:31:35.471 [19020:c07] Request operation error
2013-03-25 11:31:35.476 [19020:c07] Processing...
2013-03-25 11:31:35.476 [19020:c07] Request operation error
2013-03-25 11:31:35.477 [19020:c07] Processing...
2013-03-25 11:31:35.477 [19020:c07] Request operation error
2013-03-25 11:31:35.480 [19020:c07] Processing...
2013-03-25 11:31:35.480 [19020:c07] Request operation error
2013-03-25 11:31:35.481 [19020:c07] Processing...
2013-03-25 11:31:35.482 [19020:c07] Request operation error
2013-03-25 11:31:35.488 [19020:c07] Done!
正確には何が問題になっていますか?私はこれについて熟考しましたが、何が悪いのか理解できないようです。NSURLConnectionを一度に1つずつ使用した場合(私がやりたいことにはほとんど効率的ではありません)、それは機能しましたが、AFNetworkingで何かを台無しにしているようです。
それは私のrequestParameters
変数と関係がありますか?Clear Read APIへのリクエストを間違って行っていますか?