#youtube #youtube-api #youtube-data-api
#YouTube #youtube-api #youtube-data-api
Вопрос:
Я только что наткнулся на URL-адрес YouTube https://www.youtube.com/u2 . Это приводит к странице канала. Когда я нажимаю на видео канала, а затем на ссылку на канал видео, я возвращаюсь на ту же страницу, но с URL https://www.youtube.com/channel/UC4gPNusMDwx2Xm-YI35AkCA .
Но как я могу перейти от https://www.youtube.com/u2 чтобы https://www.youtube.com/channel/UC4gPNusMDwx2Xm-YI35AkCA используя API данных YouTube? Ссылка на API для канала не документирует способ сделать это. Я могу выполнить поиск u2 с типом channel , и это даст мне идентификатор канала, но также даст мне другие идентификаторы каналов. И для канала, похоже, нет данных, которые перечисляют https://www.youtube.com/u2 в качестве альтернативного URL-адреса.
Ответ №1:
Если нет способа получить идентификатор канала через API (чего я точно не знаю), что должно сработать, так это загрузка сайта (и т. Д. С Использованием 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. Спасибо. Это хорошо работает и с jsoup ( jsoup.org ) это всего лишь несколько строк кода. Итак, на данный момент моя проблема решена, и я поддержал ваш ответ, но я неохотно отмечаю его как правильный ответ, поскольку это неофициальное решение, которое может быть нарушено в будущем без предварительного уведомления.
2. Я бы тоже хотел найти другой способ, кроме использования регулярного выражения.
Ответ №2:
Я не знаю, не нашел ли я его, когда опубликовал вопрос, или он новый, но теперь API данных YouTube имеет 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 }