2013-04-04 1 views
2

я использовал FQL запрос, чтобы получить список друзей в то время:Анализировать извлекаться Facebook другу подробности данных

-(void)fetchSaveUserFriendDetails 
{ 
NSString* query = [NSString stringWithFormat:@"SELECT uid,name,birthday_date FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())"]; 

// Set up the query parameter 
    NSDictionary *queryParam = [NSDictionary dictionaryWithObjectsAndKeys: 
            query, @"q", nil]; 
// Make the API request that uses FQL 
    [FBRequestConnection startWithGraphPath:@"/fql" 
            parameters:queryParam 
            HTTPMethod:@"GET" 
           completionHandler:^(FBRequestConnection *connection, 
                id result, 
                NSError *error) { 
    if (!error) 
    { 
     NSLog(@"result is %@",result); 

     NSArray *resultData = [result objectForKey:@"data"]; 
     if ([resultData count] > 0) { 
     for (NSUInteger i=0; i<[resultData count] ; i++) { 
      [self.friendsDetailsArray addObject:[resultData objectAtIndex:i]]; 
      NSLog(@"friend details are %@",friendsDetailsArray); 
    } 
    } 
} 

     }]; 
//Save friends to database stuff 
.................. 
} 

я получаю ниже вывод:

enter image description here

Я ушел через официальную документацию Facebook Developers запросов FQL, но я не могу выяснить, как разбирать данные.

Я попытался ниже способ синтаксического анализа полученных данных:

NSString *jsonString = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding]; 
NSDictionary *jsonValue = [jsonString JSONValue]; 
NSArray *values = [jsonValue objectForKey:@"friendinfo"]; 

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

-JSONValue failed. Error is: Unexpected end of input

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Я пытаюсь проанализировать все полученные данные (в конечном счете, формат JSON) и сохранить все данные друзей Facebook в моей базе данных. Вся реализация поиска и сохранения в db-часть выполняется в действии кнопки Facebook Sync.

Определенную помощь нужна любая помощь очень аплодировал, спасибо :)

+0

Какую службу баз данных вы используете? Например, если вы используете Parse, есть готовый метод, который делает это для вас. – jakenberg

+0

@ jsksma2 Я использую базу данных sqlite, мне нужно получить индивидуальную информацию о друзьях Facebook отдельно от того, что получено в формате json, как показано на снимке экрана моего сообщения, а затем сохранить эти данные в базе данных. –

ответ

5

Обновление:

- (void)request:(FBRequest *)request didLoad:(id)result { 
     if ([result isKindOfClass:[NSArray class]] && ([result count] > 0)) { 
      result = [result objectAtIndex:0]; 
     } 
     friends = [[NSMutableArray alloc] initWithCapacity:1]; 
     NSArray *resultData = [result objectForKey:@"data"]; 
     if ([resultData count] > 0) { 
      for (NSUInteger i=0; i<[resultData count] && i < 25; i++) { 
       [friends addObject:[resultData objectAtIndex:i]]; 
      } 
      [friends retain]; 
      [tblInviteFriends reloadData];    
     } else { 
       UIAlertView *alt=[[UIAlertView alloc]initWithTitle:@"No Friends" message:@"You have no friends." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 
       [alt show]; 
       [alt release]; 
     } 
} 

и отображать эти данные в cellForRowAtIndexPath как сильфон ...

cell.textLabel.text = [[friends objectAtIndex:indexPath.row] objectForKey:@"name"] 

yourDataArray определяет как NSMutableArray и использовать его в UITableView для отображения данных

я надеюсь, что это полезно игрушка вы ...

+0

Простите, Парас, я думаю, что беспокою вас много, я не понимаю, что, черт возьми, со мной не так, раньше я использовал объект графа для извлечения сведений о друзьях и сохранения в базу данных, но это занимает время, когда он нажимает на сервер Facebook столько раз, сколько количество друзей, поэтому мне нужно идти на запрос FQL, который выбирает всех друзей за раз, а затем хранит базу данных. Так что я могу получить данные друзей, это хорошо, но мне нужно разобрать данные, код, который вы дали, не работал. Я думаю, что проблема заключается в «результате» "имеет идентификатор типа, но мы присваиваем его как данные. –

+0

@EshwarChaitanya попробуйте fql.query вместо: @ "/ fql" –

+0

также попробуйте мой код, который я сейчас обновляю .. попробуйте, это сработает .. –

0

Я не уверен, если вы имеете в виду, используя SQLite или Core Data специально, но независимо от того, что вам нужно сериализовать эти данные каким-то образом. Существует много методов & библиотек, которые вы можете использовать. Мой личный фаворит - использовать Mantle в качестве базовой линии для моих собственных моделей.

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

[FBRequestConnection startWithGraphPath:@"/fql" 
          parameters:queryParam 
          HTTPMethod:@"GET" 
         completionHandler:^(FBRequestConnection *connection, 
              id result, 
              NSError *error) { 
          if (!error) { 
           NSMutableArray *users = [NSMutableArray array]; 
           for (NSDictionary *userInfo in result) { 
            User *user = [User modelWithRemoteDictionary:userInfo]; 
            [users addObject:user]; 
           } 
          } 
         }]; 

Хорошо, поэтому сломать это. Вы используете быструю переписку с объектом результата, чтобы получить каждый словарь по отдельности. Затем вы сериализуете этот словарь в объект User, для которого вы создали модель. Mantle предоставляет modelWithRemoteDictionary:, который действительно просто сериализует словарь против клавиш, в которых вы предварительно настроили частный метод в своей модели User, которая затем устанавливает их в общедоступные свойства той же модели User. Наконец, каждый объект добавляется в массив.

Вы конечный продукт - это массив, который вы можете использовать, чтобы делать все, что хотите.

Надеюсь, это поможет!

EDIT:

Пропустив модель:

[FBRequestConnection startWithGraphPath:@"/fql" 
          parameters:queryParam 
          HTTPMethod:@"GET" 
         completionHandler:^(FBRequestConnection *connection, 
              id result, 
              NSError *error) { 
          if (!error) { 
           self.users = [NSMutableArray array]; 
           for (NSDictionary *userInfo in result) { 
            [self.users addObject:userInfo]; 
           } 
          } 
         }]; 

Для примеров-ради, позволяет использовать cellForRowAtIndexPath: для отображения, как вы будете использовать этот массив позже:

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Allocate, and set the cell... 

    NSDictionary *userDict = self.users[indexPath.row]; 

    cell.name = userDict[@"facebook_name"]; 
    cell.username = userDict[@"facebook_username"]; 
    cell.birthday = userDict[@"facebook_birthday"]; 
} 
+0

Извините, но нам действительно нужно model class (User), просто хочу назначить извлеченный вывод json с именем, id, датой рождения для моих строк. –

+0

Вы можете это сделать. Я добавил в образец, потому что без него вы копаете себе дыру. Если позже вы решите, что хотите добавить объект в словарь, получив больше информации FB, вам нужно пройти через различные вызовы, идентичные этому, и выписать дополнительную строку кода для использования данных. Если вы по-прежнему настаиваете на том, чтобы не использовать модель по какой-либо причине, отключите использование объекта 'User' с помощью' NSDictionary', установите его для ключей и добавьте его в массив. – jakenberg

+0

Простите, пожалуйста, объясните это четко, я не могу получить вас на самом деле, у меня есть facebookID, facebookName, facebookBirthday и т. Д., Теперь я хочу разбить данные json и соответствующим образом присвоить эти значения, вы можете увидеть на снимке экрана моего post, данные извлекаются в JSON. Фактически я попытался импортировать файл JSON.h и попытался присвоить это: NSMutableDictionary * dataDictionary = [result JSONValue]; а затем назначается моим строкам следующим образом: self.facebookID = [dataDictionary objectForKey: @ "uid"]; self.facebookName = [dataDictionary objectForKey: @ "name"] и т. д., но это не работает. –

 Смежные вопросы

  • Нет связанных вопросов^_^