如何从包含西里尔字符的频道用户名获取 YouTube 频道 ID
How to get a YouTube channel ID from the channel's username which includes Cyrillic characters
这是一个 YouTube 频道 URL,用户名中包含西里尔字符:
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
但是调用returns没有数据。
供参考,“https://www.youtube.com/c/besogontv/videos”returns 有效结果:
https://www.googleapis.com/youtube/v3/channels?key=[YouTubeAPIkey]&forUsername=besogontv
只是为了看看它是否可行,我尝试解码 URL 编码,然后重新编码为 UTF8,但没有任何区别。
我是否遗漏了某些字符编码问题?
如果您发出以下命令(在任何 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 forusername
或 vanity URL
中的任何一个来说服自己,以查看 terse/raw 官方用户从Google的员工那里得到的回复。
确实,有时官方文档和工作人员的回应确实缺乏 useful/meaningful 明确的规范 and/or 表述。 (这些我自己也都经历过!)
最后一点,您可以从 https://www.youtube.com/c/лучшиедокументальныефильмы
获得的 HTML 页面中抓取您感兴趣的频道 ID,但请记住,此 activity 是被禁止的Google,根据其 DTOS docs
:
Scraping
You and your API Clients must not, and must not encourage, enable, or require others to, directly or indirectly, scrape YouTube Applications or Google Applications, or obtain scraped YouTube data or content. Public search engines may scrape data only in accordance with YouTube's robots.txt file or with YouTube's prior written permission.
我建议使用 Search.list
API 端点而不是抓取,使用 q
参数调用 лучшиедокументальныефильмы
和 type
参数channel
(如果您能够应对隐含的模糊性)。
根据 answering 更新到相关的 SO 问题
Here 是一个简单的 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
获取简要帮助信息)。
这是一个 YouTube 频道 URL,用户名中包含西里尔字符:
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 获取频道 IDhttps://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
但是调用returns没有数据。
供参考,“https://www.youtube.com/c/besogontv/videos”returns 有效结果:
https://www.googleapis.com/youtube/v3/channels?key=[YouTubeAPIkey]&forUsername=besogontv
只是为了看看它是否可行,我尝试解码 URL 编码,然后重新编码为 UTF8,但没有任何区别。
我是否遗漏了某些字符编码问题?
如果您发出以下命令(在任何 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 forusername
或 vanity URL
中的任何一个来说服自己,以查看 terse/raw 官方用户从Google的员工那里得到的回复。
确实,有时官方文档和工作人员的回应确实缺乏 useful/meaningful 明确的规范 and/or 表述。 (这些我自己也都经历过!)
最后一点,您可以从 https://www.youtube.com/c/лучшиедокументальныефильмы
获得的 HTML 页面中抓取您感兴趣的频道 ID,但请记住,此 activity 是被禁止的Google,根据其 DTOS docs
:
Scraping
You and your API Clients must not, and must not encourage, enable, or require others to, directly or indirectly, scrape YouTube Applications or Google Applications, or obtain scraped YouTube data or content. Public search engines may scrape data only in accordance with YouTube's robots.txt file or with YouTube's prior written permission.
我建议使用 Search.list
API 端点而不是抓取,使用 q
参数调用 лучшиедокументальныефильмы
和 type
参数channel
(如果您能够应对隐含的模糊性)。
根据 answering 更新到相关的 SO 问题
Here 是一个简单的 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
获取简要帮助信息)。