Моя цель — сделать приложение (iOS), в котором пользователь может ввести любую комбинацию букв, а Yahoo предложит несколько акций, наиболее подходящих для этого поиска.
Мой вопрос на самом деле связан с более старым вопросом, здесь: API поиска биржевого тикера< /а>
И ответил, выполнив следующее: http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=k&callback=YAHOO.Finance.SymbolSuggest.ssCallback
Вы получаете это:
YAHOO.Finance.SymbolSuggest.ssCallback({"ResultSet":{"Query":"k","Result":[{"symbol":"K","name":"Kellogg Company","exch":" NYQ","type":"S","exchDisp":"NYSE","typeDisp":"Капитал"},{"символ":"KO","name":"Компания Coca-Cola"," exch":"NYQ","type":"S","exchDisp":"NYSE","typeDisp":"Капитал"},{"символ":"KRA","name":"Kraton Performance Polymers Inc. .","exch":"NYQ","type":"S","exchDisp":"NYSE","typeDisp":"Капитал"},{"symbol":"KMI","name":" Kinder Morgan, Inc.","exch":"NYQ","type":"S","exchDisp":"NYSE","typeDisp":"Капитал"},{"symbol":"KEY"," name":"KeyCorp.","exch":"NYQ","type":"S","exchDisp":"NYSE","typeDisp":"Equity"},{"symbol":"KMB", "name":"Kimberly-Clark Corporation","exch":"NYQ","type":"S","exchDisp":"NYSE","typeDisp":"Капитал"},{"symbol":" KRFT","name":"Kraft Foods Group, Inc.","exch":"NMS","type":"S","exchDisp":"NASDAQ","typeDisp":"Капитал"},{ «symbol»: «KORS», «name»: «Michael Kors Holdings Limited», «exch»: «NYQ», «type»: «S», «exchDisp»: «NYSE», «typeDisp»: «Капитал» },{"символ":"GMCR ","name":"Keurig Green Mountain, Inc.","exch":"NMS","type":"S","exchDisp":"NASDAQ","typeDisp":"Капитал"},{" символ":"KLAC","название":"KLA-Tencor Corporation","обмен":"NMS","тип":"S","exchDisp":"NASDAQ","typeDisp":"Капитал"} ]}})
Но это недопустимый формат JSON. Первая часть возвращаемых данных:
YAHOO.Finance.SymbolSuggest.ssCallback(
И я не знаю, что с этим делать. Когда я делаю это:
NSDictionary *root = [NSJSONSerialization JSONObjectWithData: data
options:NSJSONReadingAllowFragments error: &parsingError];
NSLog(@"root: %@", root);
Корень нулевой. В обычном объекте json я использую options:kNilOptions, но изменился после попытки найти решения Google.
Сообщение об ошибке следующее:
Error Domain = NSCocoaErrorDomain Code = 3840 «Операция не может быть завершена. (Ошибка Cocoa 3840.)» (Недопустимое значение вокруг символа 0.) UserInfo = 0x7ff5637375f0 {NSDebugDescription = Недопустимое значение вокруг символа 0.}
Что я должен делать? Пожалуйста, будьте явными. Я действительно гуглил как сумасшедший, но я не понимаю. Спасибо!
Мой полный код:
- (void)createSearchObj: (NSString*)searchStr {
NSString *searchString = [NSString stringWithFormat: @"http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=%@&callback=YAHOO.Finance.SymbolSuggest.ssCallback", searchStr];
NSLog(@"searchString: %@", searchString);
NSURL *url = [NSURL URLWithString:searchString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^
(NSData *data, NSURLResponse *response, NSError *error)
{
NSLog(@"ERROR: %@", error);
NSLog(@"DATA: %@", data);
NSError *parsingError = error;
/*
NSDictionary *root =
[NSJSONSerialization JSONObjectWithData:
data options:kNilOptions error: &parsingError];
*/
NSDictionary *root =
[NSJSONSerialization JSONObjectWithData:
data options:NSJSONReadingAllowFragments error: &parsingError];
NSLog(@"root: %@", root);
if (!parsingError) {
dispatch_async(dispatch_get_main_queue(), ^{
NSDictionary *dict = [root objectForKey:@"ResultSet"];
NSLog(@"dict: %@", dict);
});
} else {
NSLog(@"Could not parse json: %@", parsingError);
}
}];
[task resume];
[self.view endEditing:YES];
}