Получить данные субтитров из видео на YouTube, используя api в nodejs - PullRequest
0 голосов
/ 13 сентября 2018

Вот некоторая ссылка, которая предоставляет список субтитров для видео на YouTube в формате xml.

https://www.youtube.com/api/timedtext?lang=en&v=6dlr-1Qk8Uc'

http://video.google.com/timedtext?type=track&v=zenMEj0cAC4&id=0&lang=en'

Но это применимо не ко всем видео. Некоторые видео имеют значок субтитров (cc) внизу видео, и при щелчке появляется этот субтитр, но по этим ссылкам нельзя вернуть данные субтитров.

Затем я проверил данные восстановления при щелчке на значке cc, он возвращает данные всех видео с субтитрами.

Но я не могу понять, как вызвать этот API с помощью узла js.

1 Ответ

0 голосов
/ 12 января 2019

Вместо использования API данных YouTube - заголовок 1 для получения подписей к видео, вы также можете использовать обратный вызов AJAX для получения подписей.

1 Если вы хотите использовать API данных YouTube для запроса подписей, советую внимательно прочитать документацию .


В этом примере обратный вызов AJAX используется для извлечения подписей из данного видео YouTube.

Используя синтаксический анализатор XML 1017 *, ответ предыдущего обратного вызова AJAX повторяется в цикле for для получения заголовков:

// Ajax callback to the YouTube channel:
$.ajax({
  type: "GET",
  url: "http://video.google.com/timedtext?type=track&v=zenMEj0cAC4&id=0&lang=en",
  crossDomain: true,
}).done(function(data) {
  getCaption(data);
});

// Variables.
var parser, xmlDoc;
var HTML_captions = "";

// Parse the AJAX response and get the captions.
function getCaption(data) {
  try {

    // Loop the results of the ajax:
    for (var i = 0; i < data.getElementsByTagName("transcript")[0].childNodes.length; i++) {
      HTML_captions += data.getElementsByTagName("transcript")[0].childNodes[i].innerHTML + "<br/>";
    }

    // Preparing captions...
    fillData();

  } catch (err) {
    console.log(err);
    alert('Error at getCaption function - see console form more details.');
  }
}


// Fill the data "captions" in a HTML "div" control.
function fillData() {
  try {
    document.getElementById("demo").innerHTML = HTML_captions;
  } catch (err) {
    console.log(err);
    alert('Error at fillData function - see console form more details.');
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<div class="infoVideo">
  <span>These are the captions of the following YouTube video:</span>
  <br/>
  <span>Title: How Turbochargers Work</span>
  <br/>
  <span>URL: https://www.youtube.com/watch?v=zenMEj0cAC4</span>
</div>
<br/>
<div id="demo"><i>Loading captions...</i></div>
...