iOS,GTLFramework - 如何使用pageTokens从频道中获取所有视频

时间:2015-01-01 06:54:38

标签: ios objective-c youtube-api

以下是我从特定频道检索YouTube视频列表的代码:

GTLServiceYouTube *service;
self.vidInfos = [[NSMutableArray alloc] init];
service = [[GTLServiceYouTube alloc] init];
service.APIKey = @"my-api-key";

GTLQueryYouTube *query1 = [GTLQueryYouTube queryForPlaylistItemsListWithPart:@"id,snippet"];
query1.playlistId = @"the-playlist-id-from-utube-channel";
query1.maxResults = 50;

[service executeQuery:query1 completionHandler:^(GTLServiceTicket *ticket, id object, NSError *error) {
    if (!error) {
        GTLYouTubePlaylistItemListResponse *playlistItems = object;
        for (GTLYouTubePlaylistItem *playlistItem in playlistItems) {
            [self.vidInfos addObject:playlistItem];
        }
        [self.tableView reloadData];
    }else {
        NSLog(@"%@", error);
    }
}];

而且,在cellForRowAtIndexPath方法中:

GTLYouTubePlaylistItem *itemToDisplay = [self.vidInfos objectAtIndex:indexPath.row];
cell.textLabel.text = itemToDisplay.snippet.title;

查询接受max 50作为最大结果限制。但我需要显示整个列表,大约250个视频。

我该怎么做?我读到了关于使用pageTokens的内容,但是我找不到关于如何使用pageTokens的任何示例或代码,在哪里获取它们以及在哪里传递它们?

1 个答案:

答案 0 :(得分:0)

在进行查询后收到的GTLYouTubeListResponse具有名为NSString的{​​{1}}属性。
此属性表示地址'如果你有多个页面,那么在下一页'搜索结果,
(意思是,搜索结果的数量高于您在nextPageToken媒体资源中设置的数量,正如您所说,该数据有50个结果限制)

因此,使用您的问题作为总共250个结果的示例,您有5个搜索结果'页面'每个'页面上有50个搜索结果。

maxResults有相应的GTLYouTubeQuery属性,其中包含“{1}}属性。查询'页面'您希望收到的结果。

可能是实现这一目标的另一种方式,但这只是我的头脑 我认为这是实现这一目标的非常简单明了的方式 无论如何,下面的示例使用您的代码来演示如何使用此属性。

重要提示!!!
在下面的代码中,我正在循环播放'通过所有搜索结果,
这仅用于说明目的,
在您的应用中,您可能还想创建自己的自定义限制,
因此,如果用户搜索具有大量结果的常规关键字,您将不会尝试获取所有这些关键字,除了其他缺点之外,可能会比他将要阅读的更多,使不必要的网络和内存使用,并且会“哼哼”您的谷歌开发者积分(或任何它被称为,当它'成本'您进行谷歌API调用)

因此,如果我们使用您的原始代码 -

pageToken
祝你好运。