获取YouTube视频的长度(无需下载视频本身)

时间:2013-06-21 02:36:57

标签: python youtube-api youtube-dl

我需要找出最简单的方法,根据所述视频的网址以编程方式获取YouTube视频的长度。

youtube API是最好的方法吗?它看起来有点复杂,我以前从未使用它,所以它可能需要我一些时间来适应,但我真的只想要最快的解决方案。我瞥了一眼视频页面的来源,希望它可以在那里列出它,但显然它没有(虽然它列出了推荐的视频时间在一个很容易解析的非常好的列表中)。如果这是最好的方法,有没有人有一个snippit?

理想情况下,我可以在Python中完成此操作,我最终需要它的格式为

00:00:00.000

但我对所有人可能拥有的任何解决方案都持开放态度。

我很感激任何见解。

5 个答案:

答案 0 :(得分:3)

您只需阅读Youtube API 2.0返回的XML中seconds元素中的yt:duration属性即可。你只能以秒分辨率结束(还没有毫秒)。这是一个例子:

from datetime import timedelta
from urllib2 import urlopen
from xml.dom.minidom import parseString
for vid in ('wJ4hPaNyHnY', 'dJ38nHlVE78', 'huXaL8qj2Vs'):
    url = 'https://gdata.youtube.com/feeds/api/videos/{0}?v=2'.format(vid)
    s = urlopen(url).read()
    d = parseString(s)
    e = d.getElementsByTagName('yt:duration')[0]
    a = e.attributes['seconds']
    v = int(a.value)
    t = timedelta(seconds=v)
    print(t)

输出是:

0:00:59
0:02:24
0:04:49

答案 1 :(得分:1)

(我不确定“预先下载”是指什么。)

获取VIDEO_ID长度的最简单方法是发出

的HTTP请求

http://gdata.youtube.com/feeds/api/videos/VIDEO_ID?v=2&alt=jsonc

然后查看返回的data - > duration元素的值。它将以秒为单位设置为视频的持续时间。

答案 2 :(得分:1)

使用python和V3 youtube api这是每个视频的方式。 您需要API密钥,您可以在此处获取:https://console.developers.google.com/

# -*- coding: utf-8 -*-
import json
import urllib

video_id="6_zn4WCeX0o"
api_key="Your API KEY replace it!"
searchUrl="https://www.googleapis.com/youtube/v3/videos?id="+video_id+"&key="+api_key+"&part=contentDetails"
response = urllib.urlopen(searchUrl).read()
data = json.loads(response)
all_data=data['items']
contentDetails=all_data[0]['contentDetails']
duration=contentDetails['duration']
print duration

控制台响应:

>>>PT6M22S

相当于6分22秒。

答案 3 :(得分:0)

您可以随时使用Data API v3。 只需拨打videos->list电话。

GET https://www.googleapis.com/youtube/v3/videos?part=contentDetails%2C+fileDetails&id={VIDEO_ID}&key={YOUR_API_KEY}

作为回应,以contentDetails.duration格式获取ISO 8601

或者您可以从fileDetails.durationMs获得以毫秒为单位的持续时间。

答案 4 :(得分:0)

如果您使用的是Python 3或更高版本,则可以针对YouTube v3 API URL执行GET请求。为此,您需要在YouTube v3 API 中启用your Google Console,并且在启用YouTube v3 API之后需要创建API凭据。

下面的代码示例:

import json 
import requests 

YOUTUBE_ID = 'video_id_here'
API_KEY = 'your_youtube_v3_api_key'
url = f"https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id={YOUTUBE_ID}&key={API_KEY}"

response = requests.get(url) # Perform the GET request 
data = response.json() # Read the json response and convert it to a Python dictionary 

length = data['items'][0]['contentDetails']['duration']
print(length)

或作为可重用功能:

import json 
import requests 

API_KEY = 'your_youtube_v3_api_key'
def get_youtube_video_duration(video_id):
    url = f"https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id={video_id}&key={API_KEY}"

    response = requests.get(url) # Perform the GET request 
    data = response.json() # Read the json response and convert it to a Python dictionary 

    return data['items'][0]['contentDetails']['duration']

duration = get_youtube_video_duration('your_video_id')

注意:如果您拥有视频,则只能从API获取fileDetails,因此您需要将与YouTube帐户相同的Google帐户用于YouTube v3 API密钥。

Google的回复如下所示:

{
    "kind": "youtube#videoListResponse",
    "etag": "\"SJajsdhlkashdkahdkjahdskashd4/meCiVqMhpMVdDhIB-dj93JbqLBE\"",
    "pageInfo": {
        "totalResults": 1,
        "resultsPerPage": 1
    },
    "items": [
        {
            "kind": "youtube#video",
            "etag": "\"SJZWTasdasd12389ausdkhaF94/aklshdaksdASDASddjsa12-18FQ\"",
            "id": "your_video_id",
            "contentDetails": {
                "duration": "PT4M54S",
                "dimension": "2d",
                "definition": "hd",
                "caption": "false",
                "licensedContent": false,
                "projection": "rectangular"
            }
        }
    ]
}

您的视频时长为:PT4M54S表示4 Minutes 54 Seconds

编辑:要将YouTube持续时间转换为秒,请参见以下答案:https://stackoverflow.com/a/49976787/2074077

一旦您将时间转换为秒,就可以将秒转换为带有时间增量的格式。

from datetime import timedelta
time = timedelta(seconds=duration_in_seconds)
print(time)