如何移动到使用iOS SDK的Facebook JSON响应中的下一页?
在Facebook iOS SDK中,我可以请求这样的查询:
[_facebook requestWithGraphPath:@"me/feed" andDelegate:self];
但是,例如,Facebook通常会给出一个有限的JSON响应,例如,用于请求移动到更早的date的URL。 所以在JSON响应中,我会有:
data = ( /*things here... status updates, photos, etc...*/ ); paging = { next = "https://graph.facebook.com/me/feed?sdk=ios&sdk_version=2&access_token= <something>&until=2010-12-04"; previous = "https://graph.facebook.com/me/feed?sdk=ios&sdk_version=2&access_token=<something>&since=<something>"; };
我想知道的是…如何去以前的url? SDK是否提供了一个接口来执行此操作?
编辑:如果可能的话,我真的想用Graph API来回答,因为Facebook目前不推荐使用REST API。
奖金:如果任何人可以解释由Facebook返回的时间格式。 我以2010-09-13T00%3A25%3A16%2B0000
为例。
所有你需要添加一个方法到Facebook的子类或它自己
- (void)requestWithURLString:(NSString *)fullURL andHttpMethod:(NSString *)httpMethod andDelegate:(id <FBRequestDelegate>)delegate { [self openUrl:fullURL params:nil httpMethod:httpMethod delegate:delegate]; }
PS第二个参数“httpMethod”可能总是@“GET”,你可以省略它
随着Facebook的iOS SDK版本3 ,原来的答案不再适用于当前版本。
我不得不做一些挖掘,因为新版本并没有使这个更容易。 我发现了一个如何在FBGraphObjectPagingLoader类中完成这个工作的例子,新的SDK提供了这个类来帮助完成这个工作。 这是令人难以置信的难看,但我认为这是“推荐”的方法,因为这是他们使用的。
这里是我的代码的轻微修改(最初发现在FBGraphObjectPagingLoader的followNextLink方法中 )
FBRequest *request = [[[FBRequest alloc] initWithSession:FBSession.activeSession graphPath:nil] autorelease]; FBRequestConnection *connection = [[[FBRequestConnection alloc] init] autorelease]; [connection addRequest:request completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { // Do some stuff }]; // Override the URL using the one passed back in 'next'. NSURL *url = [NSURL URLWithString:urlString]; NSMutableURLRequest* urlRequest = [NSMutableURLRequest requestWithURL:url]; connection.urlRequest = urlRequest; [connection start];
如果你愿意的话,你当然可以修改他们的库并把它封装在类中。
你可以做这样的事情:
[appDelegate.fb requestWithGraphPath:@"me/home" andParams:[NSMutableDictionary dictionaryWithObject:@"2011-01-27T04%3A48%3A50%2B0000" forKey:@"since"] andDelegate:self];
请注意,在Feed的paging
部分中, next
和previous
URL仅有一个查询参数( until
和since
)不同。 您可以使用从中获取的值来获取结果的下一页和上一页。
希望这可以帮助!
是的,你可以通过调用api中的函数来获得结果我使用下面的代码来获得你的情况下的用户状态,你可以使用stream.get方法,你可以在这里find它http://developers.facebook.com/docs/reference /rest/stream.get/
NSMutableDictionary * params = [[NSMutableDictionary alloc] init]; [params setValue:[NSString stringWithFormat:@"%@", appDelegate.user_id] forKey:@"uid"]; [params setValue:@"150" forKey:@"limit"]; [params setValue:@"results" forKey:@"callback"]; [_facebook requestWithMethodName: @"status.get" andParams: params andHttpMethod: @"POST" andDelegate: self];
你可以使用这个代码为你的目的。
至less就date格式而言,它是RFC 3339格式的变体。 据我所知,iOS没有这种types的预定义的格式化程序。
我创build了一个date格式化程序并保留它(它们的创build速度很奇怪),所以我可以在处理FB数据时轻松地转换它们。
NSDateFormatter * sRFC3339DateFormatter = nil; NSLocale * enUSPOSIXLocale; sRFC3339DateFormatter = [[NSDateFormatter alloc] init]; enUSPOSIXLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]; [sRFC3339DateFormatter setLocale:enUSPOSIXLocale]; [sRFC3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ssZ"]; [sRFC3339DateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
一旦你有这样一个格式化程序,你可以很容易地来回转换。
NSDate* myDate = nil; myDate = [sRFC3339DateFormatter dateFromString:@"2011-01-27T04%3A48%3A50%2B0000"];
把URL分解成一个string字典是非常简单的NSURL方法。