【问题标题】:Find YouTube user name for a channel查找频道的 YouTube 用户名
【发布时间】:2021-08-03 02:54:17
【问题描述】:

我正在尝试使用 YouTube 数据 API 来获取特定频道的频道数据。根据文档,我可以使用列表(按频道 ID)或列表(按 YouTube 用户名)

Search by channel ID
https://youtube.googleapis.com/youtube/v3/channels?part=snippet&id={ChannelID}&key={APIKey}

// Get channel by YouTube username
https://youtube.googleapis.com/youtube/v3/channels?part=snippet&forUsername={Username}&key={APIKey}

可以通过浏览器进入YouTube并按名称搜索频道然后选择频道来检索频道ID;频道 ID 是 URL 的一部分,如下所示:

https://www.youtube.com/channel/UCbTw29mcP12YlTt1EpUaVJw.

这个频道是给 Sean Allen 的,他的 YouTube 网址是:

https://www.youtube.com/SeanAllen.

我原以为 YouTube 用户名会是 SeanAllen,但这不是因为当我在 API 请求中使用该术语时,我得到 0 个结果。

但是,在我自己的情况下,我的频道 ID 是 UCOWdR4sFkmolWkU2fg669Gg,并且按频道 ID 搜索可以获取我的频道数据。我的 YouTube 网址是:

https://wwww.youtube.com/StewartLynch

如果我使用 StewartLynch 作为用户名,我可以使用第二个 API 请求来获取相同的数据。

那么,我的问题是,如何找到频道的正确 YouTube 用户名?显然这不是频道 URL 中使用的内容。

【问题讨论】:

    标签: youtube-api youtube-data-api


    【解决方案1】:

    您提出的问题在 Stack Overflow 上反复出现。我自己已经解决了它的所有方面(只需发出以下任何一个 SO 搜索词:user:8327971 custom URLuser:8327971 forUsername)。

    简短的故事如下:不要太依赖 YouTube 用户名

    用户名是 API v3 的一项遗留功能:并非每个频道都附加一个,也不需要附加一个频道。 (请参阅 2013 年 7 月 11 日 Google 员工的this official statement。)

    以下是 YouTube 数据 API 针对您帖子的两个名称(SeanAllenStewartLynch)返回的内容:

    $ python3 youtube-search.py --custom-url SeanAllen
    UCbTw29mcP12YlTt1EpUaVJw
    
    $ python3 youtube-search.py --user-name SeanAllen
    UCRGhxM6u14Uv309cC0ywEqA
    
    $ python3 youtube-search.py --custom-url StewartLynch
    UCOWdR4sFkmolWkU2fg669Gg
    
    $ python3 youtube-search.py --user-name StewartLynch
    UCOWdR4sFkmolWkU2fg669Gg
    

    如您所见,StewartLynch 既是自定义 URL,又是 ID 为 UCOWdR4sFkmolWkU2fg669Gg 的频道的用户名。

    但是,在SeanAllen 的情况下,事情并不那么简单,因为有一个频道——UCbTw29mcP12YlTt1EpUaVJw——将其自定义 URL 设置为这个名称;同时,还有一个不同的频道 -- UCRGhxM6u14Uv309cC0ywEqA -- 将其附加的用户名设置为同名。

    这种情况在 YouTube 中非常普遍:很多频道都有这个属性。

    最后一点,结束你的问题:

    如何为频道找到正确的 YouTube 用户名?

    使用请求参数forUsername 查询的Channels.list API 端点确实返回给定频道的正确用户名(如果相应频道已附加用户名)。

    这种歧义源于以下事实:网址:

    https://www.youtube.com/NAME

    可以很好地表示用户名为NAME 的频道或自定义URL 为NAME 的频道。这两种情况can be set apart 仅由(不完全可靠的)procedure of searching for custom URLs(已经由脚本youtube-search.py 实现)。


    上面我使用了我的公共(MIT 许可)Python 3 脚本youtube-search.py;此脚本能够在 API 中搜索自定义 URL,并分别在 API 中查询用户名。

    请注意,youtube-search.py 需要将有效的 API 密钥作为命令行选项 --app-key 的参数传递给它,否则,作为环境变量 YOUTUBE_DATA_APP_KEY 传递给它。 (使用命令行选项--help 获取简要帮助信息。)

    【讨论】:

    • @Stewart Lynch:如果您需要进一步的帮助和/或澄清,请随时在此答案下方发布 cmets。
    • 感谢您如此详尽的解释。非常感谢您花时间解释这个难题。
    • @Stewart Lynch:还请注意,您可以通过简单地从格式为https://www.youtube.com/NAME 的 URL 下的页面的 HTML 文本中刮出频道 ID 来处理这个(众所周知的)Gordian Knot 实例;但是,如果您要遵守DTOS 的规范,那么您就不能使用这个更简单的过程,因为抓取是禁止的活动(该文档的第 III.E.6 节)。
    猜你喜欢
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 2015-06-23
    • 1970-01-01
    • 2013-05-31
    • 2016-03-17
    • 1970-01-01
    相关资源
    最近更新 更多