如何通过YouTube API获取播放列表中超过50条的视频?
嘿,别担心,第一次用YouTube API碰到分页问题太正常啦!我来一步步教你怎么把那132条视频全部捞出来~
解决YouTube播放列表分页获取视频的问题
核心逻辑
YouTube的playlistItems接口最多一次返回50条数据(maxResults的上限就是50),所以要拿到所有视频,得靠**nextPageToken分页令牌**循环发起请求,直到响应里没有这个令牌为止——那时候就说明所有视频都获取完啦。
具体实现步骤
1. 从首次请求里提取nextPageToken
你第一次调用接口后,返回的JSON响应里会有nextPageToken字段(只要还有未返回的数据)。你需要把这个令牌存下来,作为下一次请求的参数。
2. 循环请求直到没有令牌
每次请求时,把上一次拿到的nextPageToken拼到URL里,格式是&pageToken=你的令牌值。重复这个过程,直到响应里不再出现nextPageToken。
3. 调整你的代码示例(Java版)
下面是修改后的完整逻辑,适配分页需求:
private static String GOOGLE_YOUTUBE_API_KEY = "<API Key>"; // 基础URL,把你的playlistId和key拼进去 private static String PLAYLIST_ITEMS_BASE_URL = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=50&playlistId=PL-nbe4FPvDBElyW0Iww5suxJ...&key=" + GOOGLE_YOUTUBE_API_KEY; public static void getAllPlaylistVideos() throws IOException { String nextPageToken = null; do { // 构建带分页令牌的请求URL String requestUrl = PLAYLIST_ITEMS_BASE_URL; if (nextPageToken != null) { requestUrl += "&pageToken=" + nextPageToken; } // 发送HTTP请求(这里用Java原生HttpClient,你也可以用OkHttp等工具) HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(requestUrl)) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); String responseBody = response.body(); // 解析JSON响应(用Gson示例,你也可以用Jackson) JsonObject jsonResponse = JsonParser.parseString(responseBody).getAsJsonObject(); JsonArray videoItems = jsonResponse.getAsJsonArray("items"); // 处理当前页的视频数据,比如打印标题或者存入数据库 for (JsonElement item : videoItems) { JsonObject snippet = item.getAsJsonObject().getAsJsonObject("snippet"); String videoTitle = snippet.get("title").getAsString(); System.out.println("视频标题:" + videoTitle); } // 更新分页令牌,判断是否继续循环 nextPageToken = jsonResponse.has("nextPageToken") ? jsonResponse.get("nextPageToken").getAsString() : null; } while (nextPageToken != null); // 没有令牌了就停止循环 }
额外提醒
- 注意API配额:YouTube API有请求次数限制,批量获取视频时别超过配额,不然会被暂时限制请求。
- 加异常处理:实际代码里要捕获HTTP请求失败、JSON解析错误等情况,避免程序直接崩溃。
maxResults不用改:你已经设为50了,这是该接口允许的最大值,效率最高。
这样就能把132条视频全部获取到啦!如果还有细节卡壳,随时问~
内容的提问来源于stack exchange,提问作者Anant Pundir
相关产品推荐
相关产品推荐

