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

如果频道具有自定义网址,如何使用 Youtube 数据 API 获取 Youtube 频道详细信息

冀嘉木
2023-03-14

我想获取具有自定义URL的YouTube频道的详细信息,如https://www.youtube.com/c/pratiksinhchudasamaisawesome.

自定义频道URL遵循以下格式:< code > https://www . YouTube . com/c/{ custom _ channel _ name } 。

我可以通过频道ID和用户名获取YouTube频道的详细信息,没有任何问题。不幸的是,我需要使用自定义频道URL,这是我唯一一次遇到此问题。

几个月前我开发了我的应用程序,而定制频道URL直到几天前还在运行。现在,如果我尝试使用YouTube自定义频道的名称获取详细信息,YouTube数据API不会返回YouTube定制频道URL的任何内容。

以https://www.youtube.com/user/thenewboston,为例,要获得该通道的详细信息,请求应该是:

GET https://www.googleapis.com/youtube/v3/channels?part=snippet&forUsername=thenewboston&key={YOUR_API_KEY}

回应

200
- SHOW HEADERS -
{
 "kind": "youtube#channelListResponse",
 "etag": "\"zekp1FB4kTkkM-rWc1qIAAt-BWc/8Dz6-vPu69KX3yZxVCT3-M9YWQA\"",
 "pageInfo": {
  "totalResults": 1,
  "resultsPerPage": 5
 },
 "items": [
  {

   "kind": "youtube#channel",
   "etag": "\"zekp1FB4kTkkM-rWc1qIAAt-BWc/KlQLDlUPRAmACwKt9V8V2yrOfEg\"",
   "id": "UCJbPGzawDH1njbqV-D5HqKw",
   "snippet": {
    "title": "thenewboston",
    "description": "Tons of sweet computer related tutorials and some other awesome videos too!",
    "publishedAt": "2008-02-04T16:09:31.000Z",
    "thumbnails": {
     "default": {
      "url": "https://yt3.ggpht.com/--n5ELY2uT-U/AAAAAAAAAAI/AAAAAAAAAAA/d9JvaIEpstw/s88-c-k-no-rj-c0xffffff/photo.jpg"
     },
     "medium": {
      "url": "https://yt3.ggpht.com/--n5ELY2uT-U/AAAAAAAAAAI/AAAAAAAAAAA/d9JvaIEpstw/s240-c-k-no-rj-c0xffffff/photo.jpg"
     },
     "high": {
      "url": "https://yt3.ggpht.com/--n5ELY2uT-U/AAAAAAAAAAI/AAAAAAAAAAA/d9JvaIEpstw/s240-c-k-no-rj-c0xffffff/photo.jpg"
     }
    },
    "localized": {
     "title": "thenewboston",
     "description": "Tons of sweet computer related tutorials and some other awesome videos too!"
    }
   }
  }
 ]
}

它工作完美。

现在我们必须获得这些渠道的详细信息:

  • https://www.youtube.com/c/eretteretlenek
  • https://www.youtube.com/c/annacavalli

然后我们得到:

GET https://www.googleapis.com/youtube/v3/channels?part=snippet&forUsername=annacavalli&key={YOUR_API_KEY}

回应

200
- SHOW HEADERS -
{
 "kind": "youtube#channelListResponse",
 "etag": "\"zekp1FB4kTkkM-rWc1qIAAt-BWc/TAiG4jjJ-NTZu7gPKn7WGmuaZb8\"",
 "pageInfo": {
  "totalResults": 0,
  "resultsPerPage": 5
 },
 "items": [
 ]
}

使用API explorer可以很容易地重现这一点。

共有3个答案

钱睿范
2023-03-14

另一种方法是使用解析器(PHP Simple HTLM DOM parser,例如下面的示例:PHP Simple超文本标记语言DOM Parser):

<?php
$media_url = 'https://www.youtube.com/c/[Channel name]';

$dom = new simple_html_dom();
$html = $dom->load(curl_get($media_url));
if (null !== ($html->find('meta[itemprop=channelId]',0))) {
    $channelId = $html->find('meta[itemprop=channelId]',0)->content;
}
?>

(使用Youtube api的“搜索”方法的配额成本为100)

任元青
2023-03-14

扩展@jkondratowicz答案,使用search.listchannels.list结合使用,您可以在大多数情况下从自定义url值解析通道。

频道资源有一个属性customUrl,因此如果我们从搜索中获取频道。列出结果,并从频道获取有关结果的更多详细信息。list可以尝试将自定义url值与customUrl属性匹配。

这里的一个工作JavaScript方法,只需将api键替换为您自己的键。虽然它仍然不完美,但它会尝试返回的前50个通道。使用分页和pageTokens可以完成更多工作。

function getChannel(customValue, callback) {
    const API_KEY = "your_api_key"
    $.ajax({
        dataType: "json",
        type: "GET",
        url: "https://www.googleapis.com/youtube/v3/search",
        data: {
            key: API_KEY,
            part: "snippet",
            q: customValue,
            maxResults: 50,
            order: 'relevance',
            type: 'channel'
        }
    }).done(function (res) {
        const channelIds = [];
        for (let i=0; i<res.items.length; i++) {
            channelIds.push(res.items[i].id.channelId);
        }

        $.ajax({
            dataType: "json",
            type: "GET",
            url: "https://www.googleapis.com/youtube/v3/channels",
            data: {
                key: API_KEY,
                part: "snippet",
                id: channelIds.join(","),
                maxResults: 50
            }
        }).done(function (res) {
            if (res.items) {
                for (let i=0; i<res.items.length; i++) {
                    const item = res.items[i];
                    if (item.snippet.hasOwnProperty("customUrl") && customValue.toLowerCase() === item.snippet.customUrl.toLowerCase()) {
                        callback(item);
                    }
                }
            }
        }).fail(function (err) {
            logger.err(err);
        });
    }).fail(function (err) {
        logger.err(err);
    });
}

一个很好的例子,用它和 https://www.youtube.com/c/creatoracademy。

getChannel('creatoracademy', function (channel) {
    console.log(channel);
});

然而,它仍然是不可靠的,因为它取决于频道是否在原始的< code>search.list查询中返回。如果自定义频道url过于普通,实际频道可能不会出现在< code>search.list结果中。尽管这种方法比依赖< code>search.list的第一个条目更可靠,因为搜索结果并不总是以相同的顺序返回。

在过去的一年中,至少有三个功能请求Google请求为此自定义URL值提供额外的参数,但它们都被拒绝为不可行。显然,实施起来太难了。还有人提到它不在他们的路线图上。

  • 这是一个很好的例子https://issuetracker.google.com/issues/174903934(2020年12月)
  • 这是一个很好的例子https://issuetracker.google.com/issues/165676622(2020年8月)
  • 这是一个很好的例子https://issuetracker.google.com/issues/161718177(2020年7月)
  • 谷歌:了解你的频道网址
  • 搜索:列表|YouTube数据API
  • 频道:列表|YouTube数据API
寇宏义
2023-03-14

最简单的解决方案,仅使用应用编程接口,就是使用YouTube数据应用编程接口的搜索:列表方法。据我所知(请注意,这是我自己的研究,官方文档对这个主题只字未提!),如果您使用自定义URL组件进行搜索,使用“通道”结果类型过滤器和“相关性”(默认)排序,第一个结果应该是您要找的。

所以下面的查询得到16个结果,第一个是您要查找的结果。我测试的所有其他自定义频道URL也是如此,所以我认为这是最可靠的方法。

GET https://www.googleapis.com/youtube/v3/search?part=id%2Csnippet&q=annacavalli&type=channel&key={YOUR_API_KEY}

另一个想法是在自定义URL上抓取YouTube页面,您可以在其中找到HTML代码中的一个元标记中的ChannelID。但这是无效的,不可靠的,并且违反了YouTube使用条款的AFAIK。

编辑:嗯,对于较小的通道,它不返回任何结果,因此它根本不可靠。

 类似资料:
  • 我的问题与此问题非常相似,我想使用频道自定义名称获取频道ID。 上述问题的答案是: 不适用于小通道,例如。当我用这个通道运行它时:https://www.youtube.com/AnnaShearerfashionfettish它什么也不返回。

  • 我试图获取YouTube频道的详细信息。 根据官方API文档(https://developers.google.com/youtube/v3/docs/channels/list),我应该提供包含 https://www.googleapis.com/auth/youtubepartner-channel-audit 范围的授权令牌。 我目前正试图通过点击以下URL来获取YouTube频道的au

  • 问题内容: 我想获取特定频道的所有视频网址。我认为带python或java的json是一个不错的选择。我可以使用以下代码获取最新的视频,但是如何获得所有视频链接(> 500)? 问题答案: 将最大结果从1增加到您想要的任何数目,但是请注意,他们不建议一次通话就抓住太多,并且将您限制为50(https://developers.google.com/youtube/2.0/developers_gu

  • 我想获取具有Id的单个频道的所有视频。我只得到频道信息的问题。这是我正在使用的链接: https://g data . YouTube . com/feeds/API/users/UCD CIB _ pnqpr 0m _ kkdg 4d z5 a?v=2

  • 我正在学习使用youtube数据api v3显示播放列表列表,并从下面的链接进一步显示每个播放列表的视频列表https://developers.google.com/youtube/v3 我能够得到一个频道id的播放列表,并进一步获得每个播放列表,视频列表。 在此之前,我需要通道id来完成其余的操作。输入将是通道的名称,输出应该是细节,其中包括唯一的通道id。下面是我尝试的代码片断,但是我总是得

  • 我正在尝试使用频道的视频,https://www.googleapis.com/youtube/v3/search?order=date