我需要找出最简单的方法,根据所述视频的网址以编程方式获取YouTube视频的长度。
youtube API是最好的方法吗?它看起来有点复杂,我以前从未使用它,所以它可能需要我一些时间来适应,但我真的只想要最快的解决方案。我瞥了一眼视频页面的来源,希望它可以在那里列出它,但显然它没有(虽然它列出了推荐的视频时间在一个很容易解析的非常好的列表中)。如果这是最好的方法,有没有人有一个snippit?
理想情况下,我可以在Python中完成此操作,我最终需要它的格式为
00:00:00.000
但我对所有人可能拥有的任何解决方案都持开放态度。
我很感激任何见解。
答案 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://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)