Youtube Iframe API — Запрос getCurrentChapter

#youtube-api #youtube-iframe-api

Вопрос:

Я ищу способ получить текущую главу/раздел Youtube с помощью вызова API.
Что будет работать для всех случаев использования, включая: общедоступные расширения браузера, встроенные фреймы и видео с искаженными описаниями.

  1. Есть ли способ получить текущую главу через API, которого мне не хватает?
  2. Каков наилучший способ связи с Google и запрашивает эти интерфейсы API [video.getCurrentChapter()] и [video.seekToNextChapter()]?

Пример:

 let video = document.querySelector('.html5-video-player');

video.seekToChapterWithAnimation(0); //skips to start of the first chapter
video.getCurrentTime(); //returns 2164 (36:04)

video.getCurrentChapter(); //TypeError: video.getCurrentChapter is not a function
video.seekToNextChapter(); //TypeError: video.seekToNextChapter is not a function
 

К счастью, есть быстрый способ найти главу с помощью метода video.seekToChapterWithAnimation(Int). Однако это полезно только в том случае, если вы знаете главу, к которой хотите перейти.

API Youtube предлагает способ получения текущего времени с помощью функции video.getCurrentTime (), но это возвращает только секунды, а не текущую главу.

Грубые обходные пути:

  1. Получите описание видео от: https://www.googleapis.com/youtube/v3/videos?part=snippetamp;id=[VIDEO_ID]amp;ключ=[YOUR_API_KEY] и проанализируйте поле responseJSON.items.snippet.description и найдите время главы, затем сравните его с video.currentTime (), чтобы увидеть, находится ли оно в диапазоне глав.
    — Однако это не будет работать для общедоступных расширений браузера или пользовательских скриптов. Также происходит сбой, если описание искажено другими или неправильными метками времени.

Пример:

 responseJSON.items.snippet.description: "Top 100 List.nn00:00 - Number 1n01:28 Number 2n03:19 Number 3"
 
  1. Другой метод заключается в том, чтобы просмотреть HTML-код описания на сайте Youtube и напрямую собрать временные метки.
    — Однако это не сработает, если видео встроено в Iframe или имеет искаженное описание.

Пример:

 <div id="description" slot="content" class="style-scope ytd-video-secondary-info-renderer"><yt-formatted-string class="content style-scope ytd-video-secondary-info-renderer" force-default-style="" split-lines=""><span dir="auto" class="style-scope yt-formatted-string">Top 100 List

Chapters:
</span><a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="/watch?v=[VIDEO_ID]amp;amp;t=0s" dir="auto">0:00</a><span dir="auto" class="style-scope yt-formatted-string"> Chapter 1 
</span><a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="/watch?v=[VIDEO_ID]amp;amp;t=23s" dir="auto">0:23</a><span dir="auto" class="style-scope yt-formatted-string"> Chapter 2
</span><a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="/watch?v=[VIDEO_ID]amp;amp;t=67s" dir="auto">1:07</a><span dir="auto" class="style-scope yt-formatted-string"> Chapter 3
</span></yt-formatted-string></div>
 

Согласно: https://developers.google.com/youtube/players/support

Мы поддерживаем API IFrame YouTube для переполнения стека.
Инженеры Google отслеживают и отвечают на вопросы с помощью тега youtube-iframe-api.

Есть ли другой способ правильно отправлять запросы на вызовы API в Google?

Комментарии:

1. This would work, but this involves needing an API key, and a string parser. = тогда вы можете сделать это таким образом, в чем проблема? — на самом деле не совсем ясно, в чем проблема и как вы хотите ее решить. Пожалуйста, добавьте образец видео, который вы используете, и желаемые результаты.

2.Проблема в том, что вы не можете использовать закрытый ключ API для общедоступных расширений браузера. Синтаксический анализ строк не работает со встроенным iframe или если описание искажено. API getCurrentChapter() будет работать для ВСЕХ пользовательских случаев: общедоступных расширений браузера/пользовательских сценариев, встроенных фреймов и искаженных описаний. Google engineers monitor and answer questions with the youtube-iframe-api tag . Решение, которое я ищу, — это пропущенный метод API, или чтобы Google увидел этот запрос, или другой способ, который лучше всего отправить этот запрос. Этот пост был обновлен этой информацией.