Разбор YouTube-ссылки
По ссылке на ролик YouTube получить краткие данные о видео — сейчас используется в Находках при добавлении.
Зачем
Не вводить название ролика руками: достаточно вставить ссылку.
Как получается название
Разбор идёт в браузере, до сохранения формы (сервер YouTube сам не дергает).
- Ссылка проверяется: это YouTube (
youtube.com,youtu.be, мобильный или music.youtube) или нет. - Если да — страница запрашивает у YouTube публичный oEmbed по этой ссылке (короткий JSON о ролике).
- Сначала запрос идёт напрямую из браузера. Если не вышло (часто из‑за CORS) — тот же oEmbed повторяется через публичный CORS-прокси.
- Из ответа берётся поле title — это и есть название ролика.
- Пока запрос идёт, кнопка отправки на короткое время недоступна; после ответа форма уходит дальше уже с названием (или без него — см. сценарии).
Сервер приложения название с YouTube не подтягивает: он только сохраняет то, что пришло из формы.
Обложка ролика
Да, тем же способом можно. В том же ответе oEmbed есть URL превью (thumbnail_url) — обложка ролика.
Сейчас обложка не используется: берётся только title. Если понадобится превью в находках или другой фиче — его можно взять из того же ответа, без отдельного API YouTube.
В oEmbed также есть автор и другие поля; они тоже сейчас не используются.
Пример
Ролик: https://www.youtube.com/watch?v=_-4OT56LQUw
oEmbed-ссылка собирается так:
https://www.youtube.com/oembed?url=<URL ролика>&format=json
Для этого ролика:
https://www.youtube.com/oembed?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D_-4OT56LQUw&format=json
Ответ — JSON, например:
{
"title": "The Garden - Live at HLPtv",
"author_name": "HLPtv",
"author_url": "https://www.youtube.com/@highlandparktv",
"type": "video",
"height": 150,
"width": 200,
"version": "1.0",
"provider_name": "YouTube",
"provider_url": "https://www.youtube.com/",
"thumbnail_height": 360,
"thumbnail_width": 480,
"thumbnail_url": "https://i.ytimg.com/vi/_-4OT56LQUw/hqdefault.jpg",
"html": "<iframe … src=\"https://www.youtube.com/embed/_-4OT56LQUw?feature=oembed\" …></iframe>"
}
Сейчас из ответа берётся только title. Обложка — thumbnail_url (сейчас не используется).
Сценарии
Получить название ролика
Что делает пользователь: вставляет ссылку на YouTube и отправляет форму, где нужен разбор.
Ожидаемый результат:
- Название берётся из oEmbed, как выше.
- Если название получить удалось — дальше в фиче используется оно.
- Если нет — вместо названия подставляется сама ссылка.
Ссылка не на YouTube
Ожидаемый результат: разбор не запускается; дальше в фиче используется сама ссылка (или то, что фича задаёт без YouTube).