youtube, find, getMovieInfo, getVideoUrl
This commit is contained in:
parent
7668ceafc1
commit
ab67ab9500
1 changed files with 54 additions and 0 deletions
54
ox/youtube.py
Normal file
54
ox/youtube.py
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
# -*- Mode: Python; -*-
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vi:si:et:sw=2:sts=2:ts=2
|
||||||
|
|
||||||
|
import re
|
||||||
|
import urllib2
|
||||||
|
from urllib import quote
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
import feedparser
|
||||||
|
|
||||||
|
from oxutils.cache import getUrl
|
||||||
|
from oxutils import findString
|
||||||
|
|
||||||
|
def getVideoUrl(youtubeId):
|
||||||
|
url = 'http://www.youtube.com/api2_rest?method=youtube.videos.get_video_token&video_id=' + youtubeId
|
||||||
|
data = getUrl(url)
|
||||||
|
xml = ET.fromstring(data)
|
||||||
|
youtubeKey = xml.find('t').text
|
||||||
|
url = "http://youtube.com/get_video.php?video_id=%s&t=%s"%(youtubeId, youtubeKey)
|
||||||
|
return url
|
||||||
|
|
||||||
|
def getMovieInfo(youtubeId):
|
||||||
|
url = "http://gdata.youtube.com/feeds/api/videos/%s " % youtubeId
|
||||||
|
data = getUrl(url)
|
||||||
|
fd = feedparser.parse(data)
|
||||||
|
return getInfoFromAtom(fd.entries[0])
|
||||||
|
|
||||||
|
def getInfoFromAtom(entry):
|
||||||
|
info = dict()
|
||||||
|
info['title'] = entry['title']
|
||||||
|
info['description'] = entry['description']
|
||||||
|
info['author'] = entry['author']
|
||||||
|
info['published'] = entry['published_parsed']
|
||||||
|
info['keywords'] = entry['media_keywords'].split(', ')
|
||||||
|
info['url'] = entry['links'][0]['href']
|
||||||
|
info['id'] = findString(info['url'], "/watch?v=")
|
||||||
|
info['thumbnail'] = "http://img.youtube.com/vi/%s/0.jpg" % info['id']
|
||||||
|
info['flv'] = getVideoUrl(info['id'])
|
||||||
|
info['embed'] = '''<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/%s&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/%s&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object>''' % (info['id'], info['id'])
|
||||||
|
return info
|
||||||
|
|
||||||
|
def find(query, max_results=10, offset=1, orderBy='relevance'):
|
||||||
|
query = quote(query)
|
||||||
|
url = "http://gdata.youtube.com/feeds/api/videos?vq=%s&orderby=%s&start-index=%s&max-results=%s"%(query, orderBy, offset, max_results)
|
||||||
|
data = getUrl(url)
|
||||||
|
fd = feedparser.parse(data)
|
||||||
|
videos = []
|
||||||
|
for entry in fd.entries:
|
||||||
|
v = getInfoFromAtom(entry)
|
||||||
|
videos.append(v)
|
||||||
|
if len(videos) >= max_results:
|
||||||
|
return videos
|
||||||
|
return videos
|
||||||
|
|
Loading…
Reference in a new issue