xCode - Mashape API - Unirest

Мне нужна помощь от тебя. Я нашел API на MaShape для Metascore, но я просто не могу заставить его работать. Я использовал Cocoapod для загрузки инфраструктуры Unirest и скопировал вставленный фрагмент кода из Mashape

NSDictionary* headers = @{@"X-Mashape-Authorization": @"wZrjWIiAsqdSLGIh3DQzrKoZ5Y3wlo6E"};
NSDictionary* parameters = @{@"title": @"The Elder Scrolls V: Skyrim", @"platform": 1, };

UNIHttpJsonResponse* response = [[UNIRest post:^(UNIBodyRequest* request) {
  [request setUrl:@"https://byroredux-metacritic.p.mashape.com/find/game"];

  [request setHeaders:headers];
  [request setParameters:parameters];
}] asJson];

Это дало мне кучу ошибок, и я исправил это так:

NSDictionary* headers = @{@"X-Mashape-Authorization": @"wZrjWIiAsqdSLGIh3DQzrKoZ5Y3wlo6E"};
    NSDictionary* parameters = @{@"title": @"The Elder Scrolls V: Skyrim", @"platform": @"1", };

    UNIHTTPJsonResponse* response = [[UNIRest post:^(UNISimpleRequest* request) {
        [request setUrl:@"https://byroredux-metacritic.p.mashape.com/find/game"];

        [request setHeaders:headers];
        [request setParameters:parameters];
    }] asJson];

но всякий раз, когда я иду и отлаживаю код и заглядываю внутрь ответа, он пуст, как будто API не работает. Ребята, скажите, что я делаю не так?

Спасибо

1 ответ

Решение

Ваш (фиксированный) фрагмент кода выглядит хорошо (первый действительно был ошибочным), и вы должны быть в состоянии напечатать результат следующим образом:

UNIHTTPJsonResponse *response = [[UNIRest post:^(UNISimpleRequest *request) {
    [request setUrl:@"https://byroredux-metacritic.p.mashape.com/find/game"];

    [request setHeaders:headers];
    [request setParameters:parameters];
}] asJson];

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:response.rawBody
                                                         options:kNilOptions
                                                           error:nil];
NSLog(@"Response status: %ld\n%@", (long) response.code, json);

Но вместо того, чтобы делать синхронный вызов, я бы также предложил вам переключиться на асинхронный способ, а также проверить наличие ошибок во время процесса и анализа JSON:

[[UNIRest post:^(UNISimpleRequest *request) {
    [request setUrl:@"https://byroredux-metacritic.p.mashape.com/find/game"];
    [request setHeaders:headers];
    [request setParameters:parameters];
}] asJsonAsync:^(UNIHTTPJsonResponse* response, NSError *error) {
    if (error) {
        // Do something with the error
    }

    NSError *jsonError;
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:response.rawBody
                                                         options:kNilOptions
                                                           error:&jsonError];
    if (jsonError) {
        // Do something with the error
    }

    NSLog(@"Async response status: %ld\n%@", (long) response.code, json);

    // Unirest also provides you this which prevents you from doing the parsing
    NSLog(@"%@", response.body.JSONObject);
}];
Другие вопросы по тегам