如果频道有自定义url,如何使用Youtube数据API获取Youtube频道详细信息
我想获取具有自定义URL的YouTube频道的详细信息,如 自定义频道URL遵循以下格式:如果频道有自定义url,如何使用Youtube数据API获取Youtube频道详细信息,youtube,youtube-api,Youtube,Youtube Api,我想获取具有自定义URL的YouTube频道的详细信息,如 自定义频道URL遵循以下格式:https://www.youtube.com/c/{custom_channel_name} 我可以通过频道ID和用户名获取YouTube频道的详细信息,没有任何问题。不幸的是,我需要使用自定义频道URL,这是我唯一一次遇到这个问题 几个月前我开发了我的应用程序,而定制频道URL直到几天前才开始工作。现在,如果我尝试使用YouTube自定义频道URL的自定义名称获取详细信息,那么YouTube数据API不
https://www.youtube.com/c/{custom_channel_name}
我可以通过频道ID和用户名获取YouTube频道的详细信息,没有任何问题。不幸的是,我需要使用自定义频道URL,这是我唯一一次遇到这个问题
几个月前我开发了我的应用程序,而定制频道URL直到几天前才开始工作。现在,如果我尝试使用YouTube自定义频道URL的自定义名称获取详细信息,那么YouTube数据API不会返回YouTube自定义频道URL的任何内容
例如,要获取此频道的详细信息,请求将是:
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!"
}
}
}
]
}
200
- SHOW HEADERS -
{
"kind": "youtube#channelListResponse",
"etag": "\"zekp1FB4kTkkM-rWc1qIAAt-BWc/TAiG4jjJ-NTZu7gPKn7WGmuaZb8\"",
"pageInfo": {
"totalResults": 0,
"resultsPerPage": 5
},
"items": [
]
}
它工作得很好
现在我们必须了解这些频道的详细信息:
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/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!"
}
}
}
]
}
200
- SHOW HEADERS -
{
"kind": "youtube#channelListResponse",
"etag": "\"zekp1FB4kTkkM-rWc1qIAAt-BWc/TAiG4jjJ-NTZu7gPKn7WGmuaZb8\"",
"pageInfo": {
"totalResults": 0,
"resultsPerPage": 5
},
"items": [
]
}
使用。最简单的解决方案(仅使用API)可以很容易地重现这一点,就是只使用YouTube数据API的搜索:列表方法。据我所知(请注意,这是我自己的研究结果,官方文档对此主题只字未提!),如果您使用自定义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的使用条款
编辑:对于较小的通道,它不会返回任何结果,因此根本不可靠。另一种方法是使用解析器(PHP Simple HTLM DOM parser,例如下面的示例:):
(使用Youtube api的“搜索”方法的配额成本为100)解决方法
将@jkondratowicz answer展开,使用search.list
与channels结合使用。list
大多数情况下,您可以从自定义url值解析频道
因此,如果我们从search.list
结果中获取频道,并从channels.list
中获取有关频道的额外详细信息,则可以尝试将自定义url值与customUrl
属性相匹配
这里是一个有效的JavaScript方法,只需将api键替换为您自己的。虽然它仍然不完美,但它尝试返回的前50个通道。分页和分页令牌可以做更多的工作
函数getChannel(customValue,回调){
const API_KEY=“您的API_KEY”
$.ajax({
数据类型:“json”,
键入:“获取”,
url:“https://www.googleapis.com/youtube/v3/search",
数据:{
密钥:API_密钥,
部分:“片段”,
问:客户价值,
最大结果:50,
顺序:“相关性”,
类型:“频道”
}
}).完成(功能(res){
const channelIds=[];
对于(设i=0;i我假设只有频道所有者上传视频的频道才会感兴趣。这是一个意外的方便,因为我的方法无论如何都不适用于0个视频频道 给定一个频道的url,我的方法将获取该频道视频选项卡的beautifulsoup HTML对象,并刮取HTML以找到唯一的频道id。然后它将重建所有内容并返回具有唯一频道id的频道url
your_channel_url = 'Enter your channel url here'
channel_url = your_channel_url.strip("https://").strip("featured")
https = "https://"
channel_vids_tab = https + channel_url + '/videos'
import requests
from bs4 import BeautifulSoup
source = requests.get(channel_vids_tab).text
soup = BeautifulSoup(source, "html.parser")
a = soup.find('body').find('link')['href']
channel_id = a.split('/')[-1]
print(a)
print(channel_id)
这种方法避免了一个频道有不同的/user
和/c
url(例如和vs,并指向同一个页面)的麻烦。虽然您首先需要手动输入url,但它可以很容易地实现自动化
我也很有信心,如果一个频道有0个视频,这种思路也适用于频道所有者创建的播放列表,只需稍加调整。但是如果频道创建了0个视频或播放列表…谁知道呢,这看起来可能是他们的API有问题。为什么不试试谷歌是否会为y修复它ou?这不是一个bug,而是一个缺失的功能。用户名(来自古时候,在YouTube和Google Plus集成之前)与自定义频道标识符不同,因此预计
forUsername
过滤器不会以这种方式工作。Youtube API在2018年是否仍然不支持此功能?现在是2021年,此功能仍然不受支持(或者至少在使用forUsername或id属性作为查找时对我不起作用)这几乎就是我们正在寻找的,除了“种类”:“youtube#searchResult”而不是“种类”:“youtube#activity”有办法获得小频道的id吗?@MahmoudHanafy除了我描述的方法之外,我没有看到任何其他从自定义url获得频道id的方法。非常感谢@jkondratowicz,你的回答帮助了我。