我想获取具有自定义URL的YouTube频道的详细信息,如https://www.youtube.com/c/pratiksinhchudasamaisawesome.
自定义频道URL遵循以下格式:< code > https://www . YouTube . com/c/{ custom _ channel _ name } 。
我可以通过频道ID和用户名获取YouTube频道的详细信息,没有任何问题。不幸的是,我需要使用自定义频道URL,这是我唯一一次遇到此问题。
几个月前我开发了我的应用程序,而定制频道URL直到几天前还在运行。现在,如果我尝试使用YouTube自定义频道的名称获取详细信息,YouTube数据API不会返回YouTube定制频道URL的任何内容。
以https://www.youtube.com/user/thenewboston,为例,要获得该通道的详细信息,请求应该是:
GET https://www.googleapis.com/youtube/v3/channels?part=snippet&forUsername=thenewboston&key={YOUR_API_KEY}
回应
200
- SHOW HEADERS -
{
"kind": "youtube#channelListResponse",
"etag": "\"zekp1FB4kTkkM-rWc1qIAAt-BWc/8Dz6-vPu69KX3yZxVCT3-M9YWQA\"",
"pageInfo": {
"totalResults": 1,
"resultsPerPage": 5
},
"items": [
{
"kind": "youtube#channel",
"etag": "\"zekp1FB4kTkkM-rWc1qIAAt-BWc/KlQLDlUPRAmACwKt9V8V2yrOfEg\"",
"id": "UCJbPGzawDH1njbqV-D5HqKw",
"snippet": {
"title": "thenewboston",
"description": "Tons of sweet computer related tutorials and some other awesome videos too!",
"publishedAt": "2008-02-04T16:09:31.000Z",
"thumbnails": {
"default": {
"url": "https://yt3.ggpht.com/--n5ELY2uT-U/AAAAAAAAAAI/AAAAAAAAAAA/d9JvaIEpstw/s88-c-k-no-rj-c0xffffff/photo.jpg"
},
"medium": {
"url": "https://yt3.ggpht.com/--n5ELY2uT-U/AAAAAAAAAAI/AAAAAAAAAAA/d9JvaIEpstw/s240-c-k-no-rj-c0xffffff/photo.jpg"
},
"high": {
"url": "https://yt3.ggpht.com/--n5ELY2uT-U/AAAAAAAAAAI/AAAAAAAAAAA/d9JvaIEpstw/s240-c-k-no-rj-c0xffffff/photo.jpg"
}
},
"localized": {
"title": "thenewboston",
"description": "Tons of sweet computer related tutorials and some other awesome videos too!"
}
}
}
]
}
它工作完美。
现在我们必须获得这些渠道的详细信息:
然后我们得到:
GET https://www.googleapis.com/youtube/v3/channels?part=snippet&forUsername=annacavalli&key={YOUR_API_KEY}
回应
200
- SHOW HEADERS -
{
"kind": "youtube#channelListResponse",
"etag": "\"zekp1FB4kTkkM-rWc1qIAAt-BWc/TAiG4jjJ-NTZu7gPKn7WGmuaZb8\"",
"pageInfo": {
"totalResults": 0,
"resultsPerPage": 5
},
"items": [
]
}
使用API explorer可以很容易地重现这一点。
另一种方法是使用解析器(PHP Simple HTLM DOM parser,例如下面的示例:PHP Simple超文本标记语言DOM Parser):
<?php
$media_url = 'https://www.youtube.com/c/[Channel name]';
$dom = new simple_html_dom();
$html = $dom->load(curl_get($media_url));
if (null !== ($html->find('meta[itemprop=channelId]',0))) {
$channelId = $html->find('meta[itemprop=channelId]',0)->content;
}
?>
(使用Youtube api的“搜索”方法的配额成本为100)
扩展@jkondratowicz答案,使用search.list
与channels.list
结合使用,您可以在大多数情况下从自定义url值解析通道。
频道资源有一个属性customUrl
,因此如果我们从搜索中获取频道。列出
结果,并从频道获取有关结果的更多详细信息。list
可以尝试将自定义url值与customUrl
属性匹配。
这里的一个工作JavaScript方法,只需将api键替换为您自己的键。虽然它仍然不完美,但它会尝试返回的前50个通道。使用分页和pageTokens可以完成更多工作。
function getChannel(customValue, callback) {
const API_KEY = "your_api_key"
$.ajax({
dataType: "json",
type: "GET",
url: "https://www.googleapis.com/youtube/v3/search",
data: {
key: API_KEY,
part: "snippet",
q: customValue,
maxResults: 50,
order: 'relevance',
type: 'channel'
}
}).done(function (res) {
const channelIds = [];
for (let i=0; i<res.items.length; i++) {
channelIds.push(res.items[i].id.channelId);
}
$.ajax({
dataType: "json",
type: "GET",
url: "https://www.googleapis.com/youtube/v3/channels",
data: {
key: API_KEY,
part: "snippet",
id: channelIds.join(","),
maxResults: 50
}
}).done(function (res) {
if (res.items) {
for (let i=0; i<res.items.length; i++) {
const item = res.items[i];
if (item.snippet.hasOwnProperty("customUrl") && customValue.toLowerCase() === item.snippet.customUrl.toLowerCase()) {
callback(item);
}
}
}
}).fail(function (err) {
logger.err(err);
});
}).fail(function (err) {
logger.err(err);
});
}
一个很好的例子,用它和 https://www.youtube.com/c/creatoracademy。
getChannel('creatoracademy', function (channel) {
console.log(channel);
});
然而,它仍然是不可靠的,因为它取决于频道是否在原始的< code>search.list查询中返回。如果自定义频道url过于普通,实际频道可能不会出现在< code>search.list结果中。尽管这种方法比依赖< code>search.list的第一个条目更可靠,因为搜索结果并不总是以相同的顺序返回。
在过去的一年中,至少有三个功能请求Google请求为此自定义URL值提供额外的参数,但它们都被拒绝为不可行。显然,实施起来太难了。还有人提到它不在他们的路线图上。
最简单的解决方案,仅使用应用编程接口,就是使用YouTube数据应用编程接口的搜索:列表方法。据我所知(请注意,这是我自己的研究,官方文档对这个主题只字未提!),如果您使用自定义URL组件进行搜索,使用“通道”结果类型过滤器和“相关性”(默认)排序,第一个结果应该是您要找的。
所以下面的查询得到16个结果,第一个是您要查找的结果。我测试的所有其他自定义频道URL也是如此,所以我认为这是最可靠的方法。
GET https://www.googleapis.com/youtube/v3/search?part=id%2Csnippet&q=annacavalli&type=channel&key={YOUR_API_KEY}
另一个想法是在自定义URL上抓取YouTube页面,您可以在其中找到HTML代码中的一个元标记中的ChannelID。但这是无效的,不可靠的,并且违反了YouTube使用条款的AFAIK。
编辑:嗯,对于较小的通道,它不返回任何结果,因此它根本不可靠。
我的问题与此问题非常相似,我想使用频道自定义名称获取频道ID。 上述问题的答案是: 不适用于小通道,例如。当我用这个通道运行它时:https://www.youtube.com/AnnaShearerfashionfettish它什么也不返回。
我试图获取YouTube频道的详细信息。 根据官方API文档(https://developers.google.com/youtube/v3/docs/channels/list),我应该提供包含 https://www.googleapis.com/auth/youtubepartner-channel-audit 范围的授权令牌。 我目前正试图通过点击以下URL来获取YouTube频道的au
问题内容: 我想获取特定频道的所有视频网址。我认为带python或java的json是一个不错的选择。我可以使用以下代码获取最新的视频,但是如何获得所有视频链接(> 500)? 问题答案: 将最大结果从1增加到您想要的任何数目,但是请注意,他们不建议一次通话就抓住太多,并且将您限制为50(https://developers.google.com/youtube/2.0/developers_gu
我想获取具有Id的单个频道的所有视频。我只得到频道信息的问题。这是我正在使用的链接: https://g data . YouTube . com/feeds/API/users/UCD CIB _ pnqpr 0m _ kkdg 4d z5 a?v=2
我正在学习使用youtube数据api v3显示播放列表列表,并从下面的链接进一步显示每个播放列表的视频列表https://developers.google.com/youtube/v3 我能够得到一个频道id的播放列表,并进一步获得每个播放列表,视频列表。 在此之前,我需要通道id来完成其余的操作。输入将是通道的名称,输出应该是细节,其中包括唯一的通道id。下面是我尝试的代码片断,但是我总是得
我正在尝试使用频道的视频,https://www.googleapis.com/youtube/v3/search?order=date