解析检索到的Facebook好友相关内容
我已经为了在一次检索的朋友列表中使用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
..................
}
我得到下面的输出:
我已经通过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
UPDATE-INFO
我试图解析所有检索到的数据(最终是JSON格式)并将所有Facebook好友详细信息保存到我的数据库中。所有执行检索和保存到数据库部分都是在Facebook Sync按钮操作中完成的。
需要一些帮助,任何帮助是极大的赞赏,感谢:)
更新:
- (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
数据显示
我希望这是有益的玩具,你...
对不起,Paras,我想我很烦恼你,我不明白我到底是怎么了,早些时候我用图形对象来获取好友的详细资料并保存到数据库,但是因为它碰到Facebook服务器的时间比朋友的数量多很多,所以我需要去一次获取所有朋友的FQL查询,然后存储到数据库。所以我能够获取好友数据,这就是好的,但我需要解析数据,你提供的代码没有工作。我认为问题是“结果“是id类型的,但我们将其分配为数据。 – 2013-04-05 07:45:12
@EshwarChaitanya尝试fql.query而不是:@“/ fql” – 2013-04-05 07:52:18
也尝试我的代码,我现在更新..尝试它会工作.. – 2013-04-05 07:54:14
我不知道你指的是使用SQLite或核心数据明确,但无论如何,你需要以某种方式序列化此数据。您可以使用许多方法&库。我个人最喜欢的是将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
模型的公共属性。最后,每个对象都被添加到一个数组中。
你最终的产品就是那个数组,你可以用它来做任何你想做的事情。
我希望这有助于!
编辑:
跳过模式:
[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"];
}
对不起,但是我们确实需要一个模型类(用户),只是想分配检索的JSON输出与名称,ID,出生日期到我的字符串 – 2013-04-04 07:39:02
你可以这样做。我在模型片中添加了,因为没有它,你正在挖一个洞。如果您稍后决定要通过获取更多FB信息来将对象添加到字典中,则必须通过与此相同的各种调用,并写出额外的代码行以使用数据。 如果你仍然坚持不使用模型出于某种原因,然后将'User'对象与'NSDictionary'一起使用,将其设置为键的对象,并将其添加到数组中。 – jakenberg 2013-04-04 07:46:43
请原谅,请你清楚解释一下,我实际上无法得到你我有facebookid,facebookName,facebookBirthday等字符串,现在我想拆分json数据并相应地分配这些值,你可以在屏幕截图中看到我的在JSON中正在提取数据。实际上,我尝试导入JSON.h文件,并试图分配此:NSMutableDictionary * dataDictionary = [result JSONValue];然后分配给我的字符串,如下所示:self.facebookID = [dataDictionary objectForKey:@“uid”]; self.facebookName = [dataDictionary objectForKey:@“name”] etc.but但它不起作用 – 2013-04-04 07:56:57
你正在使用什么样的数据库服务?例如,如果您碰巧使用了Parse,则有一种预先构建的方法可以为您执行此类事情。 – jakenberg 2013-04-04 07:04:42
@ jsksma2我正在使用sqlite数据库,我需要单独从我的文章的屏幕截图中显示的json格式检索到的Facebook朋友详细信息中,然后将这些详细信息保存在数据库中 – 2013-04-04 07:13:55