Youtube视频标题和持续时间没有api密钥

时间:2016-12-23 05:11:48

标签: youtube youtube-api youtube-data-api

如何在不使用api密钥的情况下获取youtube视频标题和持续时间?

我已经检查了Youtube Video title with API v3 without API key?链接,但这只是标题而不是持续时间。

那么如何在没有api密钥的情况下获得持续时间?

2 个答案:

答案 0 :(得分:1)

面向在2020年寻求答案的人们。您可以使用Youtube Iframe API来做到这一点。您不需要API密钥! 首先,您将api链接插入JS,如下所示:

  var tag = document.createElement('script');
  tag.src = "https://www.youtube.com/iframe_api";
  var firstScriptTag = document.getElementsByTagName('script')[0];
  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

之后,使用以下所需的videoID创建播放器:

  function onYouTubeIframeAPIReady() {
    player = new YT.Player('player', {
      height: '390',
      width: '640',
      videoId: 'SIWbjgPYcJY',
      playerVars: {
        'autoplay': 0,
        'controls': 1
      },
      events: {
        'onReady': onPlayerReady
      }
    });

  }

然后,您需要通过将其分配给HTML变量来获得标题和持续时间。我们将其放置在onPlayerReady中。

  function onPlayerReady(event) {
    time = player.getDuration();
    $(".dur").val(time);
    title = player.getVideoData().title
    $(".title").val(title);
  }

最后是将播放器,播放时间和标题放入HTML:

<div id="player"></div>
<br>
<span>Titel:</span><input class="title">
<br>
<span>duration:</span><input class="dur">
<br>

JSFIDDLE

答案 1 :(得分:0)

您可以使用youtube-dl

$ youtube-dl -e "https://www.youtube.com/watch?v=2i2khp_npdE"
Alan Walker - Sing Me To Sleep
$ youtube-dl --get-duration "https://www.youtube.com/watch?v=2i2khp_npdE"
3:12

或者:

$ curl -s "https://www.youtube.com/watch?v=2i2khp_npdE" | tr '<' '\n' | awk -F'"' '/name="title"/ { print $4 }'
Alan Walker - Sing Me To Sleep
$ curl -s "https://www.youtube.com/watch?v=2i2khp_npdE" | awk -F'"' '/itemprop="duration"/ { print $4 }'
PT3M12S

您可以使用此bash函数将Youtube格式转换为秒:

duration_calculation ()
{
    local total_in_second=0
    local hours=0
    local minutes=0
    local seconds=0
    local duration="$1"

    if [[ $duration =~ ^PT([0-9]{1,})H([0-9]{1,})M([0-9]{1,})S$ ]]; then
        local hours=$((hours + BASH_REMATCH[1]))
        local minutes=$((minutes + BASH_REMATCH[2]))
        local seconds=$((seconds + BASH_REMATCH[3]))
    # PT1H4M    H:M:00
    elif [[ $duration =~ ^PT([0-9]{1,})H([0-9]{1,})M$ ]];then
        local hours=$((hours + BASH_REMATCH[1]))
        local minutes=$((minutes + BASH_REMATCH[2]))
    # PT1H29S   H:00:S
    elif [[ $duration =~ ^PT([0-9]{1,})H([0-9]{1,})S$ ]]; then
        local hours=$((hours + BASH_REMATCH[1]))
        local seconds=$((seconds + BASH_REMATCH[2]))
    # PT4M29S   M:S
    elif [[ $duration =~ ^PT([0-9]{1,})M([0-9]{1,})S$ ]]; then
        local minutes=$((minutes + BASH_REMATCH[1]))
        local seconds=$((seconds + BASH_REMATCH[2]))
    # PT1H      H:00:00
    elif [[ $duration =~ ^PT([0-9]{1,})H$ ]]; then
        local hours=$((hours + BASH_REMATCH[1]))
    # PT4M      00:M:00
    elif [[ $duration =~ ^PT([0-9]{1,})M$ ]]; then
        local minutes=$((minutes + BASH_REMATCH[1]))
    # PT29S     S
    elif [[ $duration =~ ^PT([0-9]{1,})S$ ]]; then
        local seconds=$((seconds + BASH_REMATCH[1]))
    fi
    local total_in_seconds=$(( (hours * 3600) + (minutes * 60) + seconds ))
    echo "$total_in_seconds"
}