Max Resource
High Quality
Medium Quality
Max Resource
High Quality
Medium Quality
| #!/usr/bin/python | |
| #coding: utf-8 | |
| import requests | |
| import sys, re, urllib | |
| reload(sys) | |
| sys.setdefaultencoding('utf-8') | |
| proxies = {'all': '127.0.0.1:8088'} | |
| headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36', | |
| 'Accept-Language':'en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,zh-TW;q=0.2', | |
| 'Accept-Encoding':'gzip, deflate, sdch', | |
| 'Cache-Control': 'no-cache', | |
| 'Referer': 'https://www.youtube.com', | |
| } | |
| vmaps = { | |
| "13": ("3GP" , "Low Quality - 176x144"), | |
| "17": ("3GP" , "Medium Quality - 176x144"), | |
| "36": ("3GP" , "High Quality - 320x240"), | |
| "5" : ("FLV" , "Low Quality - 400x226"), | |
| "6" : ("FLV" , "Medium Quality - 640x360"), | |
| "34": ("FLV" , "Medium Quality - 640x360"), | |
| "35": ("FLV" , "High Quality - 854x480"), | |
| "43": ("WEBM", "Low Quality - 640x360"), | |
| "44": ("WEBM", "Medium Quality - 854x480"), | |
| "45": ("WEBM", "High Quality - 1280x720"), | |
| "18": ("MP4" , "Medium Quality - 480x360"), | |
| "22": ("MP4" , "High Quality - 1280x720"), | |
| "37": ("MP4" , "High Quality - 1920x1080"), | |
| "38": ("MP4" , "High Quality - 4096x230") | |
| } | |
| def get_youtube_video_urls(vid): | |
| vurls = {'MP4': [], 'FLV': [], '3GP': [], 'WEBM': []} | |
| watch_url = 'https://www.youtube.com/watch?v=' + vid | |
| r = requests.get(watch_url, headers=headers, proxies=proxies, verify=False) | |
| html = r.content | |
| r.close() | |
| s = re.findall('"url_encoded_fmt_stream_map":"([^"]+)"', html) | |
| js = s[0].split(',') | |
| for s in js: | |
| ars = s.split('\\u0026') | |
| sig, vurl, itag = '', '', 0 | |
| for a in ars: | |
| if a.startswith('sig'): | |
| sig = a[4:] | |
| if a.startswith('url'): | |
| vurl = urllib.unquote(a[4:]) | |
| if a.startswith('itag'): | |
| itag = a[5:] | |
| vt = vmaps.get(itag) | |
| if vt: | |
| vurls[vt[0]] = (vt[1], vurl) | |
| # print vt[0], vt[1], vurl | |
| else: | |
| print 'no vmap', itag, vurl | |
| print vurls | |
| if __name__ == '__main__': | |
| get_youtube_video_urls('HLx1R39kc38') |