我正在尝试使用Diffbot将一些 URL 解析到相关的文章部分。他们有一个“Article API”,允许您一次提交一个链接并接收它,但为了速度,我更喜欢使用Batch API,它基本上允许您将一堆 Article API 请求提交到一个大请求中并得到一个大的回应,而不是一次一个。
以下是他们的文档中描述的 Batch API(奇怪的是在登录墙后面):
我这样提交给 Article API:
NSURLRequest *request = [[AFDiffbotClient sharedClient]
requestWithMethod:@"GET"
path:[NSString stringWithFormat:@"article?token=MYTOKEN&fields=url,text,title&url=%@", URL]
parameters:nil];
它运行良好。AFDiffbotClient
是一个单例,结合起来AFNetworking
可以帮助我更轻松地请求,而 URL 参数只是我正在查看的文章的 URL。(也许我可以在不手动创建 URL 的情况下做到这一点,如果有人可以提供提示,则可以加分。)
但是,使用 Batch API,您应该以 JSON 数组的形式提交(POST)这些请求。我很困惑我将如何去做这件事。
编辑:我在这方面做了更多工作,并取得了一些进展,但我收到了 400 错误。我不知道我做错了什么,但我必须走在正确的道路上。我正在使用我的令牌和我的 JSON 数组在 POST 请求中传递参数,但它仍然无法正常工作。
[AFDiffbotClient sharedClient].operationQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount;
NSMutableArray *DiffbotRequests = [[NSMutableArray alloc] init];
for (NSDictionary *URLAndID in URLsAndIDs) {
NSString *articleURL = [URLAndID objectForKey:@"URL"];
NSDictionary *request = @{@"token": @"TOKEN",
@"fields": @"text,title,url",
@"url": articleURL};
[DiffbotRequests addObject:request];
}
NSError *error;
NSData *DiffbotRequestsJSONData = [NSJSONSerialization dataWithJSONObject:DiffbotRequests options:kNilOptions error:&error];
NSString *DiffbotRequestsJSONString = [[NSString alloc] initWithData:DiffbotRequestsJSONData encoding:NSUTF8StringEncoding];
NSDictionary *parameters = @{@"token": @"TOKEN",
@"batch": DiffbotRequestsJSONString};
[[AFDiffbotClient sharedClient] getPath:@"batch" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
}];
这是我得到的回复:
错误域 = AFNetworkingErrorDomain 代码 = -1011 “预期状态代码在 (200-299),得到 400” UserInfo = 0xc2ee4d0 {NSLocalizedRecoverySuggestion =,AFNetworkingOperationFailingURLRequestErrorKey = { URL:
之后就是我提交的所有 URL。
编辑 2:添加了上面 API 的图像。
编辑 3:当前无效的代码:
[AFDiffbotClient sharedClient].operationQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount;
NSMutableArray *DiffbotRequests = [[NSMutableArray alloc] init];
for (NSDictionary *URLAndID in URLsAndIDs) {
NSString *articleURL = [URLAndID objectForKey:@"URL"];
NSDictionary *request = @{@"token": @"TOKEN",
@"fields": @"text,title,url",
@"url": articleURL};
[DiffbotRequests addObject:request];
}
NSError *error;
NSData *DiffbotRequestsJSONData = [NSJSONSerialization dataWithJSONObject:DiffbotRequests options:NSJSONWritingPrettyPrinted error:&error];
NSString *DiffbotRequestsJSONString = [[NSString alloc] initWithData:DiffbotRequestsJSONData encoding:NSUTF8StringEncoding];
NSDictionary *parameters = @{@"token": @"TOKEN",
@"batch": DiffbotRequestsJSONString};
[[AFDiffbotClient sharedClient] setParameterEncoding:AFJSONParameterEncoding];
[[AFDiffbotClient sharedClient] postPath:@"batch" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
}];