我需要找出最简单的方法,以编程方式抓住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://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)