1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 import gdata.service
18 import urllib2
19 import re
20 import traceback
21
22 try:
23 from xml.etree import cElementTree as ElementTree
24 except ImportError:
25 try:
26 import cElementTree as ElementTree
27 except ImportError:
28 from elementtree import ElementTree
29
30
32
33 users_feed = "http://gdata.youtube.com/feeds/users"
34 std_feeds = "http://gdata.youtube.com/feeds/standardfeeds"
35 video_name_re = re.compile(r'[,{]t:\'([^\']*)\'')
36
40
43
46
49
53
57
63
65 feed_url = "http://gdata.youtube.com/schemas/2007/categories.cat"
66 xml = self._request(feed_url)
67 tree = ElementTree.fromstring(xml)
68 categories = {}
69 for child in tree.getchildren():
70 categories[child.get('term')] = child.get('label')
71 return categories
72
74 feed_url = "http://gdata.youtube.com/feeds/videos/-/%s" % cid
75 return self._request(feed_url).entry
76
78 doc = video._ToElementTree()
79 urls = {}
80 for c in doc.findall(".//{http://search.yahoo.com/mrss/}group"):
81 for cc in c.findall("{http://search.yahoo.com/mrss/}thumbnail"):
82 width = int(cc.get("width"))
83 height = int(cc.get("height"))
84 size = (width, height)
85 url = cc.get("url")
86 if size not in urls:
87 urls[size] = [url,]
88 else:
89 urls[size].append(url)
90 return urls
91
93 thumbnails = self.get_thumbnails(video)
94 sizes = thumbnails.keys()
95 sizes.sort()
96 return thumbnails[sizes[-1]][0]
97
99 flv_url = ''
100 doc = urllib2.urlopen(url)
101 data = doc.read()
102
103
104 match = self.video_name_re.search(data)
105 if match is not None:
106 video_name = match.group(1)
107
108
109 url_splited = url.split("watch?v=")
110 video_id = url_splited[1]
111
112 flv_url = "http://www.youtube.com/get_video?video_id=%s&t=%s"
113 flv_url = flv_url % (video_id, video_name)
114 return flv_url
115
116 if __name__ == '__main__':
117 cli = YouTubeClient()
118 import pdb; pdb.set_trace()
119