如何从包含西里尔字符的频道用户名获取YouTube频道ID

时间:2020-06-25 13:23:16

标签: youtube-api youtube-data-api

这是一个YouTube频道网址,在用户名中包含西里尔字母:
https://www.youtube.com/c/%D0%9B%D1%83%D1%87%D1%88%D0%B8%D0%B5%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%D1%84%D0%B8%D0%BB%D1%8C%D0%BC%D1%8B/videos

我正在尝试通过调用YouTube DATA API v3从URL获取频道ID:

https://www.googleapis.com/youtube/v3/channels?key=[YouTubeAPIkey]&forUsername=%D0%9B%D1%83%D1%87%D1%88%D0%B8%D0%B5%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%D1%84%D0%B8%D0%BB%D1%8C%D0%BC%D1%8B&part=id

但该呼叫未返回任何数据。

作为参考,“ https://www.youtube.com/c/besogontv/videos”返回有效结果:

https://www.googleapis.com/youtube/v3/channels?key=[YouTubeAPIkey]&forUsername=besogontv

只是看它是否可行,我尝试解码URL编码,然后将其重新编码为UTF8,但这没什么区别。

我缺少一些字符编码问题吗?

1 个答案:

答案 0 :(得分:1)

如果要发出以下命令(在任何GNU / Linux bash提示符下):

$ wget \
--quiet \
--output-document=- \
--content-on-error \
"https://www.googleapis.com/youtube/v3/channels?key=$APP_KEY&id=UCk8LWzqGcHz21FWysiXuCHw&part=brandingSettings,contentDetails,id,snippet,statistics,status,topicDetails&maxResults=1"

您会看到лучшиедокументальныефильмы不是频道的用户名,而是频道的customUrl

forUsername属性不适用于给定频道的自定义URL,因为不能保证这些URL唯一地代表任何给定频道。

请在Google的issue tracker中查询这两个词组channels forusernamevanity URL来说服自己,以查看用户从中获得的简短/原始的官方回复Google的员工。

实际上,有时官方文档和工作人员的回复确实缺乏有用/有意义的明确规范和/或表述。 (我自己也已经经历过所有这些!)

最后一点,您可能会从您感兴趣的频道ID中https://www.youtube.com/c/лучшиедокументальныефильмы获取的HTML页面中删除,但是请记住,根据Google的{{3},该活动被Google禁止}:

抓取

您和您的API客户不得,也不得鼓励,启用或要求其他人直接或间接地抓取YouTube应用程序或Google应用程序,或获取被抓取的YouTube数据或内容。公开搜索引擎只能按照YouTube的robots.txt文件或YouTube事先的书面许可来抓取数据。

我建议您使用DTOS docs API端点,而不要进行抓取,该端点使用q参数为лучшиедокументальныефильмыtype参数为channel进行调用(如果您能够应付所隐含的模糊性)。


Search.list上更新相关的SO问题

answering是一个简单的Python3脚本,实现了您正在寻找的功能。将自定义URL应用于此脚本会产生预期的结果:

$ python3 youtube-search.py \
--custom-url Лучшиедокументальныефильмы \
--app-key ...
UCk8LWzqGcHz21FWysiXuCHw

$ python3 youtube-search.py \
--user-name Лучшиедокументальныефильмы \
--app-key ...
youtube-search.py: error: user name "Лучшиедокументальныефильмы": no associated channel found

请注意,您必须将应用程序密钥作为命令行选项--app-key的参数传递给该脚本(使用--help作为简短的帮助信息)。