当前位置: 首页 > 知识库问答 >
问题:

从youtube.com/c/xxxx链接中获取频道id?

白哲茂
2023-03-14

Youtube似乎已经摆脱了页面上的/channel/XXXX URL,现在是/c/username?用户名不是真正的“用户名”。例如

https://www.youtube.com/c/lukemiani

通过以下方式运行查找

https://www.googleapis.com/youtube/v3/channels?part=snippet&forUsername=lukemiani&key=...

不返回任何结果。

我有一群非技术用户,他们受过训练,可以寻找/channel/x或/user/x,并在我的应用程序中输入正确的东西。现在/channel已经不存在了,我(或他们)如何将/c/x转换成通道id呢?

我在寻找API解决方案,而不是视图源代码和反向工程代码解决方案。

共有2个答案

尹赞
2023-03-14

您可以在python或任何http请求库中执行此操作,方法是请求链接并解析通道ID的响应。频道 ID 位于处理重定向的规范链接代码中:

import requests
import re

url = "https://www.youtube.com/shroud"
r = requests.get(url, allow_redirects=True)
print(re.search(r'(?<=<link rel="canonical" href="https:\/\/www\.youtube\.com\/channel\/)(-?\w+)*(?=">)', r.text).group(0)) 

# Returns UCoz3Kpu5lv-ALhR4h9bDvcw
谭成业
2023-03-14

根据官方支持人员的说法,一个给定的频道可能与以下形式的URL相关联:

https://www.youtube.com/c/CUSTOM_NAME

在这种情况下,将CUSTOM_NAME相应通道的 customUrl 属性。

现在,您的问题可以重新表述如下:

给定一个< code>CUSTOM_NAME,上面的URL指向一个现有的频道,是否有一个过程能够通过使用YouTube数据API产生该频道的ID,从而使相应的过程符合DTOS标准(即,该过程通过不抓取从相应的自定义URL获得的HTML文本来工作)?

对上述问题的简短回答是不,没有。(请看看我的答案和我最近对类似问题的评论)。

较长的答案如下:是的,可以想象一种算法可以解决问题,但只能部分解决(因为不能保证它总是给出积极的结果)。

这是算法:

  • 使用以下参数调用 Search.list API 终结点:
    • q=CUSTOM_NAME
    • 类型 = 通道,以及
    • 最大结果 = 10
      < li >调用的< code>Channels.list API终结点以获取通道的关联< code>customUrl属性(如果有); < li >如果获得的< code>customUrl等于< code>CUSTOM_NAME,则停止产生当前频道ID的算法;否则,继续执行当前循环;

    由于 Search.list 终结点提供的结果集的模糊性,因此无法排除以下可能性:实际上可能存在自定义 URL(即上述形式指向现有通道的 URL),而此算法无法为其生成关联通道的 ID。

    最后一点:<代码>频道。listendpoint接受其id参数为逗号分隔的信道id列表。因此,可以很容易地修改上述算法,以代替N调用(N

    上述算法的Python语言实现,使用Google的Python API客户端库:

    def find_channel_by_custom_url(
            youtube, custom_url, max_results = 10):
        resp = youtube.search().list(
            q = custom_url,
            part = 'id',
            type = 'channel',
            fields = 'items(id(kind,channelId))',
            maxResults = max_results
        ).execute()
        assert len(resp['items']) <= max_results
    
        ch = []
        for item in resp['items']:
            assert item['id']['kind'] == 'youtube#channel'
            ch.append(item['id']['channelId'])
    
        if not len(ch):
            return None
    
        resp = youtube.channels().list(
            id = ','.join(ch),
            part = 'id,snippet',
            fields = 'items(id,snippet(customUrl))',
            maxResults = len(ch)
        ).execute()
        assert len(resp['items']) <= len(ch)
        
        for item in resp['items']:
            url = item['snippet'].get('customUrl')
            if url is not None and \
                caseless_equal(url, custom_url):
                assert item['id'] is not None
                return item['id']
    
        return None
    
    

    其中,上面caseless_equal函数是由于这个SO答案。

    我在这里发布了一个简单的Python3脚本,其中包含上面find_channel_by_custom_url函数到一个独立的程序中。应用于此脚本的自定义 URL 将产生预期的结果:

    $ python3 youtube-search.py \
    --custom-url lukemiani \
    --app-key ...
    UC3c8H4Tlnm5M6pXsVMGnmNg
    
    $ python3 youtube-search.py \
    --user-name lukemiani \
    --app-key ...
    youtube-search.py: error: user name "lukemiani": no associated channel found
    

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

 类似资料:
  • 我如何从youtube频道获取持续时间和浏览量都很重要的视频? 我试过这个请求: https://www.googleapis.com/youtube/v3/search?part=snippet, id 但响应不包含持续时间/视图计数。有什么想法吗?谢谢。

  • 我正在使用https://developers.google.com/youtube/的这些API,但是我想不出,给定一个youtube频道地址,如何获得带有相关信息的视频列表(至少是单个视频url和标题)

  • 问题内容: 我获得了这段代码,以便从www.youtube.com/watch?v=xxxxxxx之类的链接获取youtube ID 基本上这将使我轻松获得id v = xxxxxxxx 但我注意到有时youtube链接会像这样 我正在从提要中获取链接,所以我需要为此构建一个正则表达式,还是需要一个解析器来为我获取它? 问题答案: 尝试了其他方法,但在我的情况下失败了-调整了正则表达式以适合我的网

  • 问题内容: 我想从某些流式视频资源(例如you- tube或metacafe.com)中获取确切的视频链接,因为没有直接的视频链接可用。如何解析视频链接。还有如何使用Java将流视频从http url下载到本地系统? 谢谢! 问题答案: 我以前使用了一个名为HTMLParser的库。它可以读取html输入并生成HTML节点。然后,您可以分析并检索您喜欢的节点。

  • 目前,我使用它是为了从给定频道获得视频ID列表: 去找https://www.googleapis.com/youtube/v3/search?order=date 这是可行的,但是我想从中获取视频的频道有超过50个在线视频。我已经研究过这个问题,YouTube API可以在一个频道上获取所有视频,但每个在线解决方案最多只能获取50个视频。 我怎样才能得到每一个视频,而不仅仅是50个?

  • 我正在尝试从YouTube自动生成频道(又名主题)获取所有视频。我让我的用户添加到YT频道的链接,我发送频道ID以检索视频。 在常规情况下,当通道不是自动生成的时,我正在使用此终结点:https://www.googleapis.com/youtube/v3/channels?part=snippet 此endpoint返回发布到此频道的视频列表。主题的问题是视频列表返回空... 以下请求的示例: