我想要一种从 YouTube API 获取特定频道的 YouTube 短片的方法。我到处都找遍了,但什么也没找到。
目前我可以通过此端点获取所有频道视频的播放列表ID:
request = youtube.channels().list(
part="contentDetails",
id=id
)
我也尝试过这些参数:
request = youtube.channels().list(
part="snippet,contentDetails,statistics,brandingSettings",
id=id
)
有没有办法从 YouTube API 或任何其他来源(如果可用)的特定频道获取 YouTube 短片。
无需使用 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 不是短片,如果您访问 https://www.youtube.com/shorts/B-s71n0dHUk,您会获得303 重定向回原始 URL。
请记住,此行为可能会发生变化,但从 2022 年 5 月开始有效。
YouTube Data API v3 似乎再次没有提供基本功能。
我建议您使用我的开源YouTube操作API。事实上,通过请求包含 item["short"]["available"]
布尔值的 JSON 文档
https://yt.lemnoslife.com/videos?part=short&id=VIDEO_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=="
}
]
}
您可以使用
Youtube 分析和报告 API 中名为
'creatorContentType'
的新维度。
// 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,
});
它基本上返回下面列出的值:
价值 | 描述 |
---|---|
直播_流 | 观看的内容是 YouTube 直播。 |
短裤 | 观看的内容是 YouTube 短片。 |
故事 | 查看的内容是 YouTube 故事。 |
视频点播 | 观看的内容是不属于其他维度值之一的 YouTube 视频。 |
未指定 | 所查看内容的内容类型未知。 |
备注:
下面是发送 HEAD HTTP 请求的示例 python 代码。
import requests
def is_short(vid):
url = 'https://www.youtube.com/shorts/' + vid
ret = requests.head(url)
# whether 303 or other values, it's not short
return ret.status_code == 200
查看可以从 API 中检索到的播放列表 ID
contentDetails.relatedPlaylists.uploads
,我们可以看到频道 ID 开头的“UC”被替换为“UU”。
可以使用相同的格式,将频道ID开头的“UC”替换为“UUSH”,以获得仅包含短视频的播放列表。
例如,频道 ID “UCutJqz56653xV2wwSvut_hQ” 将生成播放列表 ID “UUSHutJqz56653xV2wwSvut_hQ”。
此外,还存在其他前缀:
前缀 | 内容 |
---|---|
UULF | 视频 |
UULP | 热门视频 |
超低电压 | 直播 |
UUMF | 会员专享视频 |
UUMO | 会员专享内容(视频、短视频和直播) |
UMS | 会员专属短视频 |
UUMV | 会员专享直播 |
UUPS | 热门短视频 |
UUPV | 热门直播 |
呜呜 | 短视频 |
不过,这个模式是我通过获取从“UUAA”到“UUZZ”的所有播放列表发现的,YouTube并未正式公布。
我不知道为什么,但我没有收到状态代码 303,无论它是否与 axios 短路。所以这是检查是否短路的另一种方法。
const isShort = async (videoId) => {
const url = "https://www.youtube.com/shorts/" + videoId
const res = await axios.head(url)
console.log(res.request.res.responseUrl)
// if it's a short it ends with "/shorts/videoId"
// if it's NOT a short it ends "/watch?=videoId"
}
也许 axios 自动重定向?
要使用 YouTube 数据 API 获取特定频道的短视频,您可以使用以下 JavaScript 代码片段:
您可以将“type”参数设置为“short”以专门获取短视频或视频以获取所有视频。
export const getShortVideos = async channelId => {
try {
const response = await axios.get(`${BASE_URL}/search`, {
params: {
part: 'id',
channelId: channelId,
maxResults: 20, // You can adjust this number as needed
type: 'short',
key: YOUTUBE_API_KEY,
order: 'date',
},
});
const videos = response.data.items.map(item => {
return item.id.videoId;
});
return videos;
} catch (error) {
console.error('Error fetching data:', JSON.stringify(error, null, 2));
return [];
}
};
这将返回短视频的 ID,然后您可以使用这些 ID 获取短视频的特定信息,或从 ID 创建链接以将其显示在您的应用程序或网页上。例如:
https://www.youtube.com/shorts/${videoId}