You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Google客户端Java库处理YouTube片段?

如何使用Google客户端Java库处理YouTube片段?

嗨,我懂你的困扰啦——你现在写的代码是用来获取完整YouTube视频信息的,但YouTube片段(Clip)有自己专属的ID格式,没法直接用普通的videoId那套逻辑来获取详情。咱们来一步步搞定这个问题:

先搞清楚YouTube Clip的本质

每个Clip都是基于某条主视频生成的片段,它的ID格式是Ugk...这样的字符串(就是你提供的URL里那段长串)。目前YouTube Data API v3还没有专门的Clip查询端点,但我们可以通过现有接口间接获取信息。

方法一:直接用Clip ID调用videos.list接口

很多Clip其实属于用户生成内容(UGC),可以直接把Clip ID当作视频ID传入videos.list请求,然后从返回结果里提取关键信息——包括它对应的主视频ID、片段时长等。修改后的代码大概是这样:

// 替换成你的Clip ID
String clipId = "UgkxXOkJgVZYjRmtsEXifk0eJTuh-C--mN9w";

// 发起请求,注意多请求contentDetails字段,能拿到主视频ID和片段时长
YouTube.Videos.List request = youtubeService.videos()
        .list(List.of("snippet", "statistics", "contentDetails"))
        .setId(List.of(clipId));
VideoListResponse response = request.execute();

if (!response.getItems().isEmpty()) {
    Video clip = response.getItems().get(0);
    // 获取Clip的基本信息
    String clipTitle = clip.getSnippet().getTitle();
    long viewCount = clip.getStatistics().getViewCount();
    
    // 获取对应的主视频ID,后续可以用这个ID查主视频的完整信息
    String mainVideoId = clip.getContentDetails().getVideoId();
    // Clip本身的时长(就是片段的长度)
    String clipDuration = clip.getContentDetails().getDuration();
    
    System.out.println("Clip标题: " + clipTitle);
    System.out.println("对应主视频ID: " + mainVideoId);
} else {
    System.out.println("未找到该Clip的信息,可能需要尝试搜索方式");
}

方法二:如果直接查询没结果,用搜索接口定位Clip

要是上面的方法返回空,可能是因为Clip的索引问题,这时候可以用search.list接口,把Clip ID作为搜索关键词,定位到对应的视频条目,再去获取详情:

String clipId = "UgkxXOkJgVZYjRmtsEXifk0eJTuh-C--mN9w";

YouTube.Search.List searchRequest = youtubeService.search()
        .list(List.of("id", "snippet"))
        .setQ(clipId)
        .setType(List.of("video"))
        .setMaxResults(1L); // 只取第一个匹配结果
SearchListResponse searchResponse = searchRequest.execute();

if (!searchResponse.getItems().isEmpty()) {
    SearchResult result = searchResponse.getItems().get(0);
    String foundClipId = result.getId().getVideoId();
    // 拿到ID后,再调用videos.list获取详情,就和方法一的逻辑一样了
    YouTube.Videos.List detailRequest = youtubeService.videos()
            .list(List.of("snippet", "statistics", "contentDetails"))
            .setId(List.of(foundClipId));
    VideoListResponse detailResponse = detailRequest.execute();
    // 在这里处理Clip的详情数据
}

小提醒

如果你的Clip是私有或者受限制的内容,普通的API密钥可能没法获取,这时候需要用OAuth 2.0认证,让用户授权访问对应的内容哦。

备注:内容来源于stack exchange,提问作者selvi

火山引擎 最新活动