Facebook подключает пакетные запросы и проблему с ошибкой FQL - PullRequest
4 голосов
/ 18 марта 2011

Я занимаюсь разработкой приложения для iPhone на iOS с поддержкой FB.

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

Интересно, есть ли способ использовать пакетные запросы в iOS SDK?

и другая проблема с несколькими запросами FQL. Следующий запрос работает только для одного друга! странно.

SELECT eid FROM event_member WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me() LIMIT 2)

возвращает ошибку The operation couldn’t be completed. (facebookErrDomain error 1.) Согласно этому примеру Facebook он должен был работать.

1 Ответ

14 голосов
/ 31 марта 2011

Вы можете выполнять пакетные запросы с помощью iOS iOS SDK Facebook, но вам нужно подготовить запросы JSON самостоятельно. Вот пример:

  • Сначала создайте строку массива JSON, содержащую 2 запроса JSON (см. http://developers.facebook.com/docs/api/batch).. Вы можете использовать предпочитаемый JSON API для создания этих строк.
  • Во-вторых, создайте словарь параметров с ключом "batch", сопоставленным со строкой запросов JSON.
  • Затем отправьте запрос. Обратите внимание, что вам нужно поместить что-то в requestWithGraphPath. Я просто поставил «я» (этот запрос НЕ рассматривается). Вы также ДОЛЖНЫ отправить его как метод POST http.
  • Наконец, дождитесь ответа массива в запросе: didLoad.

-(void) prepareMyBatchRequest {
    NSString *jsonRequest1 = @"{ \"method\": \"GET\", \"relative_url\": \"me/friends\" }";
    NSString *jsonRequest2 = @"{ \"method\": \"GET\", \"relative_url\": \"me/albums\" }";
    NSString *jsonRequestsArray = [NSString stringWithFormat:@"[ %@, %@ ]", jsonRequest1, jsonRequest2];
    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObject:jsonRequestsArray forKey:@"batch"];
    [facebook requestWithGraphPath:@"me" andParams:params andHttpMethod:@"POST" andDelegate:self];
}

- (void)request:(FBRequest *)request didLoad:(id)result {
    NSArray *allResponses = result;
    for ( int i=0; i < [allResponses count]; i++ ) {
        NSDictionary *response = [allResponses objectAtIndex:i];
        int httpCode = [[response objectForKey:@"code"] intValue];
        NSString *jsonResponse = [response objectForKey:@"body"];
        if ( httpCode != 200 ) {
            NSLog( @"Facebook request error: code: %d  message: %@", httpCode, jsonResponse );
        } else {
            NSLog( @"Facebook response: %@", jsonResponse );
        }
    }
}

Относительно вашего другого вопроса, я не знаю (попробуйте задать другие вопросы в отдельных постах, чтобы было легче следить).

...