如何从 youtube api 数据 v3 获取 youtube Shorts

Com*_*ind 20 youtube-api youtube-data-api

我想要一种从 YouTube API 获取特定频道的 YouTube 短片的方法。我到处找遍了,但什么也没找到。

目前我可以使用此端点获取所有频道视频的播放列表ID:

request = youtube.channels().list(
    part="contentDetails",
    id=id
)
Run Code Online (Sandbox Code Playgroud)

我也尝试过这些参数:

request = youtube.channels().list(
    part="snippet,contentDetails,statistics,brandingSettings",
    id=id
)
Run Code Online (Sandbox Code Playgroud)

那么有没有办法从 YouTube API 或任何其他来源(如果可用)获取特定频道的 YouTube 短片。

Joo*_*uur 24

无需使用 API 即可检测 YouTube 视频 ID 是否为 Short 的一种方法是尝试对/shorts/URL 版本发出 HEAD HTTP 请求,看看它是否会重定向您。

https://www.youtube.com/shorts/hKwrn5-7FjQ是一个短视频,如果您访问该网址,您将获得 HTTP 状态代码 200,并且该网址不会更改。

https://www.youtube.com/watch?v=B-s71n0dHUk不是 Short,如果您访问https://www.youtube.com/shorts/B-s71n0dHUk,您会收到 303 重定向回原始网址。

请记住,此行为可能会发生变化,但从 2022 年 5 月开始有效。

  • @IanSteffy 首先从 URL 中提取视频 ID,然后检查 Shorts URL 变体。在我当前的项目中,我不存储 URL,只是将每个视频 ID 存储在数据库中。 (2认同)

Ben*_*son 12

YouTube Data API v3 似乎再次没有提供基本功能。

用于检查给定视频是否是短视频:

我建议您使用我的开源 YouTube 操作 API。事实上,通过请求包含布尔值的JSON 文档https://yt.lemnoslife.com/videos?part=short&id=VIDEO_IDitem["short"]["available"],您的问题就解决了。

短 ID 示例:ydPkyvWtmg4

对于列出频道的短片:

我建议您使用我的开源 YouTube 操作 API。事实上,通过请求 JSON 文档https://yt.lemnoslife.com/channels?part=shorts&id=CHANNEL_ID。该条目item["shorts"]包含您正在查找的数据。请注意,分页的工作方式与YouTube Data API v3 的分页相同。

通道结果示例UC5O114-PQNYkurlTg6hekZw

{
    "kind": "youtube#channelListResponse",
    "etag": "NotImplemented",
    "items": [
        {
            "kind": "youtube#channel",
            "etag": "NotImplemented",
            "id": "UC5O114-PQNYkurlTg6hekZw",
            "shorts": [
                {
                    "videoId": "fP8nKVauFwc",
                    "title": "India: United Nations Counter Terrorism Committee Watch LIVE #shorts",
                    "thumbnails": [
                        {
                            "url": "https:\/\/i.ytimg.com\/vi\/fP8nKVauFwc\/hq720_2.jpg?sqp=-oaymwEYCNAFENAFSFryq4qpAwoIARUAAIhC0AEB&rs=AOn4CLCgJEYgv_msT5pkfWeEEN3VBt4wjg",
                            "width": 720,
                            "height": 720
                        }
                    ],
                    "viewCount": 3700
                },
                ...
            ],
            "nextPageToken": "4qmFsgLlARIYVUM1TzExNC1QUU5Za3VybFRnNmhla1p3GsgBOGdhU0FScVBBVktNQVFxSEFRcGZRME00VVVGU2IyWnZaMWxqUTJob1ZsRjZWbEJOVkVVd1RGWkNVbFJzYkhKa1dFcHpWa2RqTW1GSFZuSlhibU5SUVZOSlVrTm5PSGhQYWtVeVRtcGplVTE2VlRST2FrVXdUbXBCY1VSUmIweFhWRUl5VGtab1dGSllSbGRNVmtVU0pEWXpOakJoTkRVNUxUQXdNREF0TWpKaE15MDRObUV6TFdRMFpqVTBOMlZqWVRSbFl4Z0I=,CgtuNjFmZlJlR0QxcyiVgICbBg=="
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)


小智 9

'creatorContentType'您可以使用从Youtube Analytics 和 Reports API调用的新维度

    // You can get IDs from PlaylistItems or Search API
    const IDs = ["videoID1", "videoID2", "videoID3"];

    // Get the analytics data of selected videos based on their IDs
    const { data: analyticsData } = await youtubeAnalytics.reports.query({
      ids: "channel==MINE",
      startDate: "2019-01-01",
      // Today's date
      endDate: new Date().toISOString().split("T")[0],
      metrics: "views",
      dimensions: "video,creatorContentType",
      filters: `video==${IDs.join(",")}`,
      access_token,
    });
Run Code Online (Sandbox Code Playgroud)

它基本上返回下面列出的值:

价值 描述
现场直播 观看的内容是 YouTube 直播。
短裤 观看的内容是 YouTube Short。
故事 观看的内容是 YouTube 故事。
视频点播 观看的内容是不属于其他维度值之一的 YouTube 视频。
未指定 所查看内容的内容类型未知。

笔记:

  1. 不要忘记它仅返回01.01.2019 之后上传的视频的值。
  2. 不要忘记添加分析范围启用 Analytics 和 Reports API


小智 9

查看可以从API检索的播放列表ID contentDetails.relatedPlaylists.uploads,我们可以看到频道ID开头的“UC”被替换为“UU”。

可以使用相同的格式,通过将频道ID开头的“UC”替换为“UUSH”来获得仅包含短视频的播放列表。

例如,频道 ID “UCutJqz56653xV2wwSvut_hQ”将导致播放列表 ID “UUSHutJqz56653xV2wwSvut_hQ”

此外,还存在其他前缀:

字首 内容
超超低频 视频
超超低电压 热门视频
超低电压 直播
UUMF 会员专享视频
乌莫 会员专享内容(视频、短视频和直播)
UMS 会员专享短视频
无人无人车辆 会员专享直播
联合不间断电源 热门短视频
超超无人车辆 热门直播
乌苏什 短视频

不过,这个模式是我通过获取从“UUAA”到“UUZZ”的所有播放列表发现的,YouTube并未正式公布。