Как использовать API поиска Faroo в какао

Я никогда не использую веб-API и не знаю, что я могу прочитать об этом. Я прочитал документ FAROO Return Values, но я не понимаю, как я могу получить массив результатов (или словарь) в какао. Пожалуйста, кто-нибудь даст мне пример или учебное пособие о том, как использовать Faroo API (или другой веб-API) в target-c.

Спасибо.

2 ответа

Решение

Чтобы использовать веб-API и API FAROO, в частности, я использую NSURLConnection класс и NSURLConnectionDelegate протокол:

- (IBAction)search:(id)sender {

    NSString* requestString = [NSString stringWithFormat:@"http://www.faroo.com/api?q=%@&start=1&length=10&l=ru&src=news&f=xml&YOUR_API_KEY",[searchField stringValue]];
   // NSLog(@"str %@",requestString);

    NSURL* requestUrl = [NSURL URLWithString:requestString];
    NSURLRequest* searchRequest = [NSURLRequest requestWithURL:requestUrl cachePolicy:NSURLRequestReloadRevalidatingCacheData timeoutInterval:60];

    [self performSelectorOnMainThread:@selector(startConnectionWithRequest:) withObject:searchRequest waitUntilDone:NO];
}

- (void)startConnectionWithRequest:(NSURLRequest*)request {
    NSURLConnection* connection = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES];
    if (connection) {
      //update GUI and do something...
        theData = [NSMutableData data];

    }
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    NSLog(@"Receive data");
    [theData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
        NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
        NSLog(@"Http status code %ld",(long)[httpResponse statusCode]);
    }

}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSLog(@"Finish");
    //do something with data and update GUI
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSAlert* searchFailedAlert = [NSAlert alertWithError:error];
    [searchFailedAlert runModal];
}

Еще один способ сделать это - объявить отсутствующий метод самостоятельно как категорию рассматриваемого класса. Это заставит компилятор перестать жаловаться на то, что он не находит метод, хотя, конечно, вам все равно понадобится проверка времени выполнения, которую вы уже делаете, чтобы избежать фактического вызова метода. Вы можете также захотеть обернуть такое объявление с помощью макросов доступности, чтобы оно было проигнорировано, как только вы перейдете к использованию 10.5/10.6 SDK, и вы не получите другую жалобу компилятора. Это будет выглядеть примерно так:

#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_4 //ignore when compiling with the 10.5 SDK or higher
@interface NSPropertyListSerialization(MissingMethods)

+ (NSData *)dataWithPropertyList:(id)plist format:(NSPropertyListFormat)format options:(NSPropertyListWriteOptions)opt error:(NSError **)error;

@end
#endif
Другие вопросы по тегам