像 https://youtube.com/c/xyz 一样解决 Youtube 频道



当你有一个像 yourtube.com/channel/xyz 或 youtube.com/user/xyz 这样的网址时,请求YouTube频道或用户信息是相当容易的,因为你可以从网址中删除用户名/频道ID。但是,我在将 https://youtube.com/c/xyz 等 url 关联到任何类型的资源时遇到问题。

它似乎不是用户,也不是频道?

在HTML中,有一种叫做规范链接元素的东西。这是您放在页面上的元素,该页面是另一个页面的副本,并且该元素指向该内容的规范或"主"副本。

如果您查看 https://youtube.com/c/Rsmuk1 来源并搜索"规范",则会找到指向主频道页面的元素。

<link rel="canonical" href="https://www.youtube.com/channel/UCMi7-BZZX9x8CAhE-5juNyw">

因此,您可以通过以您选择的语言请求页面,然后解析该元素来检索长 URL。下面是 Python 3 中使用 BeautifulSouprequests

的示例
from bs4 import BeautifulSoup
import requests
document = requests.get('https://www.youtube.com/channel/UCMi7-BZZX9x8CAhE-5juNyw')
soup = BeautifulSoup(document.content, "lxml")
links = soup.findAll('link', rel='canonical')
for link in links:
    print(link['href'])
# Prints: https://www.youtube.com/channel/UCMi7-BZZX9x8CAhE-5juNyw

好的。事实证明,这是一个自定义网址,您可以从YouTube手动请求。它与用户名或频道 ID 没有连接。

目前也没有办法使用 API 从自定义网址获取信息,因此您需要请求网址并在元标记中查找实际的 channelID。这是一个PHP脚本来做到这一点。希望有帮助。

Youtube 更改了 HTML 代码并删除了链接 rel="canonical",因此 Jacob Tomlinson 的解决方案不再有效。

现在,您需要从源代码中的任何其他位置获取ChannelID,例如:

<meta itemprop="channelId" content="UCMi7-BZZX9x8CAhE-5juNyw">

.PHP:

preg_match_all('#<meta itemprop="channelId" content="([^"]+)"#is', $html, $channel_id);

相关内容

  • 没有找到相关文章

最新更新