8

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

[_facebook requestWithGraphPath:@"me/feed" andDelegate:self];

但是,例如,Facebook 通常会给出一个有限的 JSON 响应,其中包含一个 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一个例子。

4

5 回答 5

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" 你可以省略它

于 2011-02-07T21:54:25.637 回答
6

随着Facebook 的 iOS SDK 版本 3 的发布,最初的答案不再适用于当前版本。

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

这是我对其代码的轻微修改(最初在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];

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

于 2012-08-31T22:44:55.337 回答
2

你可以这样做:

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

请注意,在paging您的提要部分,nextpreviousURL 仅相差一个查询参数 (untilsince)。您可以使用从中获取的值来获取下一页和上一页的结果。

希望这可以帮助!

于 2011-02-04T03:59:07.567 回答
1

是的,您可以通过调用我在下面的代码中使用的函数来获取结果,以获取您的情况下的用户状态,您可以使用 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];

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

于 2011-02-03T15:46:47.957 回答
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 分解为字符串字典非常简单。

于 2011-11-23T19:55:24.030 回答