use gdata atom feeds
This commit is contained in:
parent
b02bac2926
commit
d523862c9d
3 changed files with 20 additions and 24 deletions
2
README
2
README
|
@ -5,7 +5,7 @@ Depends:
|
||||||
python-oxutils
|
python-oxutils
|
||||||
python-beautifulsoup (http://www.crummy.com/software/BeautifulSoup/)
|
python-beautifulsoup (http://www.crummy.com/software/BeautifulSoup/)
|
||||||
python-feedparser (http://www.feedparser.org/)
|
python-feedparser (http://www.feedparser.org/)
|
||||||
|
(there seam to be some issues if not using the one from ubuntu/debian)
|
||||||
|
|
||||||
Test:
|
Test:
|
||||||
nosetests --with-doctest oxweb
|
nosetests --with-doctest oxweb
|
||||||
|
|
|
@ -24,13 +24,6 @@ def getVideoKey(youtubeId):
|
||||||
return re.match(".*[?&]t=([^&]+)", location).groups()[0]
|
return re.match(".*[?&]t=([^&]+)", location).groups()[0]
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def getVideoKeyLegacyAPI(videoId):
|
|
||||||
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
|
|
||||||
return youtubeKey
|
|
||||||
|
|
||||||
def getVideoUrl(youtubeId, format='mp4'):
|
def getVideoUrl(youtubeId, format='mp4'):
|
||||||
youtubeKey = getVideoKey(youtubeId)
|
youtubeKey = getVideoKey(youtubeId)
|
||||||
|
@ -41,47 +34,50 @@ def getVideoUrl(youtubeId, format='mp4'):
|
||||||
url = "http://youtube.com/get_video.php?video_id=%s&t=%s" % (youtubeId, youtubeKey)
|
url = "http://youtube.com/get_video.php?video_id=%s&t=%s" % (youtubeId, youtubeKey)
|
||||||
return url
|
return url
|
||||||
|
|
||||||
'''
|
def getMovieInfo(youtubeId, video_url_base=None):
|
||||||
def getMovieInfo(youtubeId):
|
url = "http://gdata.youtube.com/feeds/api/videos/%s" % youtubeId
|
||||||
url = "http://gdata.youtube.com/feeds/api/videos/%s " % youtubeId
|
|
||||||
data = getUrl(url)
|
data = getUrl(url)
|
||||||
fd = feedparser.parse(data)
|
fd = feedparser.parse(data)
|
||||||
return getInfoFromAtom(fd.entries[0])
|
return getInfoFromAtom(fd.entries[0], video_url_base)
|
||||||
|
|
||||||
def getInfoFromAtom(entry):
|
def getInfoFromAtom(entry, video_url_base=None):
|
||||||
info = dict()
|
info = dict()
|
||||||
info['title'] = entry['title']
|
info['title'] = entry['title']
|
||||||
info['description'] = entry['description']
|
info['description'] = entry['description']
|
||||||
info['author'] = entry['author']
|
info['author'] = entry['author']
|
||||||
info['published'] = entry['published_parsed']
|
#info['published'] = entry['published_parsed']
|
||||||
info['keywords'] = entry['media_keywords'].split(', ')
|
info['keywords'] = entry['media_keywords'].split(', ')
|
||||||
info['url'] = entry['links'][0]['href']
|
info['url'] = entry['links'][0]['href']
|
||||||
info['id'] = findString(info['url'], "/watch?v=")
|
info['id'] = findString(info['url'], "/watch?v=")
|
||||||
info['thumbnail'] = "http://img.youtube.com/vi/%s/0.jpg" % info['id']
|
info['thumbnail'] = "http://img.youtube.com/vi/%s/0.jpg" % info['id']
|
||||||
info['flv'] = getVideoUrl(info['id'], 'flv')
|
if video_url_base:
|
||||||
info['mp4'] = getVideoUrl(info['id'], 'mp4')
|
info['flv'] = "%s/%s.%s" % (video_url_base, info['id'], 'flv')
|
||||||
|
info['mp4'] = "%s/%s.%s" % (video_url_base, info['id'], 'mp4')
|
||||||
|
else:
|
||||||
|
info['flv'] = getVideoUrl(info['id'], 'flv')
|
||||||
|
info['mp4'] = getVideoUrl(info['id'], 'mp4')
|
||||||
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'])
|
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
|
return info
|
||||||
|
|
||||||
def find(query, max_results=10, offset=1, orderBy='relevance'):
|
def find(query, max_results=10, offset=1, orderBy='relevance', video_url_base=None):
|
||||||
query = quote(query)
|
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)
|
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)
|
data = getUrlUnicode(url)
|
||||||
fd = feedparser.parse(data)
|
fd = feedparser.parse(data)
|
||||||
videos = []
|
videos = []
|
||||||
for entry in fd.entries:
|
for entry in fd.entries:
|
||||||
v = getInfoFromAtom(entry)
|
v = getInfoFromAtom(entry, video_url_base)
|
||||||
videos.append(v)
|
videos.append(v)
|
||||||
if len(videos) >= max_results:
|
if len(videos) >= max_results:
|
||||||
return videos
|
return videos
|
||||||
return videos
|
return videos
|
||||||
'''
|
|
||||||
|
|
||||||
|
'''
|
||||||
def find(query, max_results=10, offset=1, orderBy='relevance', video_url_base=None):
|
def find(query, max_results=10, offset=1, orderBy='relevance', video_url_base=None):
|
||||||
url = "http://youtube.com/results?search_query=%s&search=Search" % quote(query)
|
url = "http://youtube.com/results?search_query=%s&search=Search" % quote(query)
|
||||||
data = getUrlUnicode(url)
|
data = getUrlUnicode(url)
|
||||||
regx = re.compile(''' <a href="/watch.v=(.*?)" title="(.*?)" ''')
|
regx = re.compile(' <a href="/watch.v=(.*?)" title="(.*?)" ')
|
||||||
regx = re.compile('''<a href="/watch\?v=(\w*?)" ><img src="(.*?)" class="vimg120" title="(.*?)" alt="video">''')
|
regx = re.compile('<a href="/watch\?v=(\w*?)" ><img src="(.*?)" class="vimg120" title="(.*?)" alt="video">')
|
||||||
id_title = regx.findall(data)
|
id_title = regx.findall(data)
|
||||||
data_flat = data.replace('\n', ' ')
|
data_flat = data.replace('\n', ' ')
|
||||||
videos = {}
|
videos = {}
|
||||||
|
@ -102,4 +98,5 @@ def find(query, max_results=10, offset=1, orderBy='relevance', video_url_base=No
|
||||||
if len(videos) >= max_results:
|
if len(videos) >= max_results:
|
||||||
return videos.values()
|
return videos.values()
|
||||||
return videos.values()
|
return videos.values()
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
1
setup.py
1
setup.py
|
@ -18,7 +18,6 @@ setup(
|
||||||
zip_safe=False,
|
zip_safe=False,
|
||||||
install_requires=[
|
install_requires=[
|
||||||
'oxlib',
|
'oxlib',
|
||||||
'feedparser',
|
|
||||||
'beautifulsoup',
|
'beautifulsoup',
|
||||||
],
|
],
|
||||||
keywords = [
|
keywords = [
|
||||||
|
|
Loading…
Reference in a new issue