2013-06-21 253 views
0

我需要弄清楚以所述视频的URL为基础以编程方式抓取YouTube视频的最简单方法。获取YouTube视频的长度(无需下载视频本身)

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

理想的情况下,我能得到这个在Python做的,我需要它最终将在

00:00:00.000 

格式,但我对任何解决方案的人可能有完全开放的。

我会很感激任何见解。

回答

3

您只需从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 
+0

满足了我所有的需求,非常感谢你的知识和例子。 – src

+0

该网址不再返回任何内容。您必须使用api键来使用google apis,如Joan的解答所述https://stackoverflow.com/a/33725265/2205372 –

1

(我不知道什么是“预先下载”是指。)

得到的VIDEO_ID长度的最简单方法是使一个HTTP请求

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

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

+0

啊,我现在看到如何去做,谢谢你的洞察力。我已经使用ffmpeg获取视频的长度后,我已经下载了它,但我需要一个不同的解决方案。 – src

+1

不再可用。 – fledgling

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