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

Xam*_*Dev 6 youtube youtube-api youtube-data-api

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

我在没有 API 密钥的情况下使用 API v3检查了Youtube 视频标题?链接但这只给出标题而不是持续时间。

那么我怎样才能在没有 api 密钥的情况下获得持续时间呢?

pob*_*oxy 1

您可以使用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
Run Code Online (Sandbox Code Playgroud)

或者:

$ 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
Run Code Online (Sandbox Code Playgroud)

您可以使用此 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
        hours=$((hours + BASH_REMATCH[1]))
        minutes=$((minutes + BASH_REMATCH[2]))
        seconds=$((seconds + BASH_REMATCH[3]))
    # PT1H4M    H:M:00
    elif [[ $duration =~ ^PT([0-9]{1,})H([0-9]{1,})M$ ]];then
        hours=$((hours + BASH_REMATCH[1]))
        minutes=$((minutes + BASH_REMATCH[2]))
    # PT1H29S   H:00:S
    elif [[ $duration =~ ^PT([0-9]{1,})H([0-9]{1,})S$ ]]; then
        hours=$((hours + BASH_REMATCH[1]))
        seconds=$((seconds + BASH_REMATCH[2]))
    # PT4M29S   M:S
    elif [[ $duration =~ ^PT([0-9]{1,})M([0-9]{1,})S$ ]]; then
        minutes=$((minutes + BASH_REMATCH[1]))
        seconds=$((seconds + BASH_REMATCH[2]))
    # PT1H      H:00:00
    elif [[ $duration =~ ^PT([0-9]{1,})H$ ]]; then
        hours=$((hours + BASH_REMATCH[1]))
    # PT4M      00:M:00
    elif [[ $duration =~ ^PT([0-9]{1,})M$ ]]; then
        minutes=$((minutes + BASH_REMATCH[1]))
    # PT29S     S
    elif [[ $duration =~ ^PT([0-9]{1,})S$ ]]; then
        seconds=$((seconds + BASH_REMATCH[1]))
    fi
    total_in_seconds=$(( (hours * 3600) + (minutes * 60) + seconds ))
    echo "$total_in_seconds"
}
Run Code Online (Sandbox Code Playgroud)