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



我需要找出最简单的方法,以编程方式抓住youtube视频的长度给定视频的url。

youtube API是最好的方法吗?它看起来有点复杂,我以前从来没有用过,所以我可能需要一点时间来适应,但我真的只想要最快的解决方案。我浏览了一下视频页面的源代码,希望它能在那里列出它,但显然它没有(尽管它以一个非常好的列表列出了推荐的视频时间,这很容易解析)。如果这是最好的方法,有人能提供一个片段吗?

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

00:00:00.000

但我完全愿意接受任何人可能提出的任何解决方案。

您所要做的就是从Youtube API 2.0返回的XML中读取yt:duration元素中的seconds属性。你最终只能得到秒级的分辨率(还没有毫秒级)。下面是一个例子:

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

(我不确定"pre-download"指的是什么)

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

进行HTTP请求

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

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

使用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秒。

您始终可以使用Data API v3。做一个视频列表呼叫。

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

在响应中获取contentDetails。ISO 8601格式的持续时间

或者你可以从fileDetails.durationMs.

获取持续时间,单位为毫秒

如果您使用Python 3或更新版本,您可以对YouTube v3 API URL执行GET请求。为此,您需要在Google Console 中启用YouTube v3 API,您需要在启用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 v3 API密钥使用与你的YouTube帐户相同的Google帐户。

来自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

一旦你把时间转换成秒,你就可以用timedelta把秒转换成你的格式。

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

相关内容

  • 没有找到相关文章

最新更新