Я пытаюсь использовать Diffbot для анализа некоторых URL-адресов в соответствующей части статьи. У них есть «API-интерфейс статьи», который позволяет вам одновременно отправлять по одной ссылке и получать ее обратно, но для скорости я бы предпочел использовать Batch API, который в основном позволяет вам отправлять кучу запросов API статьи в один большой запрос и получите один большой ответ, а не один за раз.Как отправить массив JSON в этот API?
Вот что Batch API описаны в их документации (что странно за входа стены):
Я подчиняясь статьи 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 вы должны отправить (POST) кучу этих запросов как массив JSON. Я смущен, как бы я это сделал.
EDIT: Я работал еще немного на нем, и добились определенного прогресса, но я получаю ошибку 400 назад. Я не могу понять, что я делаю неправильно, но я должен идти по правильному пути. Я передаю параметры в запросе POST с моим токеном и моим массивом JSON, но он все равно не сработает.
[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 Code = -1011 "Ожидаемый код состояния в (200-299), получил 400" UserInfo = 0xc2ee4d0 {NSLocalizedRecoverySuggestion =, AFNetworkingOperationFailingURLRequestErrorKey = {URL:
И после этого это всего лишь все URL-адреса, которые я отправил.
EDIT 2: Добавлено изображение API выше.
EDIT 3: ток, unworking код:
[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);
}];
Чтобы произвести ряд вещей, в формате JSON, положить вещи в NSArray, а затем использовать NSJSONSerialization для преобразования в объект NSData. Но обратите внимание, что вещи в NSArray должны быть строками, числами, словарями или другими массивами. ** См. Json.org для синтаксиса, который должен привести. ** Что касается того, как должны выглядеть отдельные запросы, это зависит от людей на другом конце. Вероятно, NSDictionary (который JSON вызывает «объект»). –
Doug, в вызове 'dataWithJSONObject', после этого проверьте' error'. И NSLog 'DiffbotRequestsJSONString', и посмотрим, посмотрим, выглядит ли это правильно. –
Вы должны делать POST, а не GET. – SK9