如何使用iOS SDK转到Facebook JSON响应的下一页?

时间:2011-01-27 05:07:09

标签: ios facebook facebook-graph-api facebook-ios-sdk

在Facebook iOS SDK中,我可以要求这样的查询:

[_facebook requestWithGraphPath:@"me/feed" andDelegate:self];
但是,例如,Facebook通常会使用URL来提供有限的JSON响应,以用于请求转移到更早的日期。所以在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>";
    };

我想知道的是......我如何转到以前的网址? SDK是否提供了执行此操作的界面?

编辑:如果可能,我实际上想要使用Graph API回答,因为Facebook目前正在弃用REST API。

奖励:如果有人能解释Facebook返回的时间格式。我以2010-09-13T00%3A25%3A16%2B0000为例。

5 个答案:

答案 0 :(得分:7)

您需要为Facebook子类或其自身添加方法所需的一切

- (void)requestWithURLString:(NSString *)fullURL
               andHttpMethod:(NSString *)httpMethod
                 andDelegate:(id <FBRequestDelegate>)delegate {
    [self openUrl:fullURL params:nil httpMethod:httpMethod delegate:delegate];
}

ps第二个参数“httpMethod”可能总是@“GET”你可以省略它

答案 1 :(得分:6)

使用 Facebook的iOS SDK版本3 ,原来的答案不再适用于当前版本。

我不得不做一些挖掘,因为新版本不会让这更容易。我找到了一个示例,说明如何在新SDK提供的FBGraphObjectPagingLoader类中完成此操作,以帮助对表执行此操作。这是非常难看的,但我认为这是“推荐”的方法,因为它是他们使用的。

这是我对其代码的轻微修改(最初在FBGraphObjectPagingLoader's followNextLink method中找到)

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];

如果你愿意,你当然可以修改他们的库并将其封装在类中。

答案 2 :(得分:2)

您可以这样做:

[appDelegate.fb requestWithGraphPath:@"me/home"
                           andParams:[NSMutableDictionary dictionaryWithObject:@"2011-01-27T04%3A48%3A50%2B0000" forKey:@"since"]
                         andDelegate:self];

请注意,在Feed的paging部分,nextprevious网址只有一个查询参数(untilsince)不同。您可以使用从中获取的值来获取结果的下一页和上一页。

希望这有帮助!

答案 3 :(得分:1)

是的,您可以通过调用api中的函数来获得结果 我使用下面的代码来获取用户的状态,你可以使用stream.get方法,你可以在这里找到它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];

您可以将此代码用于您的目的。

答案 4 :(得分:0)

至少就日期格式而言,它是RFC 3339格式的变体。据我所知,iOS并没有这种类型的预定义格式化程序。

我创建了一个日期格式化程序并保留它(它们的创建速度非常慢)所以我可以在使用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"];

使用NSURL方法将URL分解为字符串字典非常简单。