在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
为例。
答案 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
部分,next
和previous
网址只有一个查询参数(until
和since
)不同。您可以使用从中获取的值来获取结果的下一页和上一页。
希望这有帮助!
答案 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分解为字符串字典非常简单。