我刚偶然发现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列为备用网址。
答案 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 }