如何获取不带ID或用户名的频道网址数据?

时间:2019-04-13 20:57:28

标签: youtube youtube-api youtube-data-api

我刚偶然发现YouTube网址https://www.youtube.com/u2。它指向频道页面。当我单击该频道的视频,然后单击该视频的频道链接时,返回到同一页面,但URL为https://www.youtube.com/channel/UC4gPNusMDwx2Xm-YI35AkCA

但是如何使用YouTube数据API从https://www.youtube.com/u2转到https://www.youtube.com/channel/UC4gPNusMDwx2Xm-YI35AkCA?通道的API参考没有记录执行此操作的方法。我可以使用channel类型搜索u2,这将为我提供通道ID,但也会为我提供其他通道ID。对于一个频道,似乎没有数据将https://www.youtube.com/u2列为备用网址。

2 个答案:

答案 0 :(得分:1)

如果无法通过API获取频道ID(我不确定),那么应该下载网站(例如使用curl或您的编程语言首选的HTTP请求方式),然后解析它。从以下摘录中可以看到,指向实际频道页面的链接在HTML源代码中(在<head>中)包含了两次。

<link rel="canonical" href="https://www.youtube.com/channel/UC4gPNusMDwx2Xm-YI35AkCA">

<meta property="og:site_name" content="YouTube">
<meta property="og:url" content="https://www.youtube.com/channel/UC4gPNusMDwx2Xm-YI35AkCA">
<meta property="og:title" content="U2">
<meta property="og:description" content="Rock band from Dublin, Ireland. Adam Clayton on Bass. The Edge on Guitar. Larry Mullen Jr on Drums. Bono on Vocals. http://www.u2.com">

即使您不想完全解析站点并提取标题信息,使用<link rel="canonical" href="https:\/\/www\.youtube\.com\/channel\/(.+)">进行正则表达式搜索也可以解决问题,但请注意,这不能保证100%正常工作。

答案 1 :(得分:0)

我不知道在发布问题时是否没有找到它,或者它是否是新的,但是现在YouTube数据API拥有snippet.customUrl个频道,在给定的频道中为"u2"例。因此,您可以这样做:

// Kotlin

fun getChannelById(id: String): Channel? =
    youTube.channels().list("id, snippet")
        .setKey(apiKey)
        .setId(id)
        .execute()
        .items
        ?.single()

private fun getChannelByCustomUrl(customUrl: String): Channel? =
    youTube.search().list("id, snippet")
        .setKey(apiKey)
        .setType("channel")
        .setQ(customUrl)
        // .setMaxResults(5) // The default value 5 should suffice.
        .execute()
        .items
        ?.asSequence()
        ?.mapNotNull {
            // Can be null when channel has been deleted just after search().
            this.getChannelById(it.snippet.channelId)
        }
        ?.firstOrNull { it.snippet.customUrl == customUrl }