mirror of
https://github.com/soimort/you-get.git
synced 2025-02-04 09:13:57 +03:00
98 lines
2.5 KiB
Python
98 lines
2.5 KiB
Python
#!/usr/bin/env python
|
|
__all__ = ['main', 'any_download', 'any_download_playlist']
|
|
|
|
from ..extractor import *
|
|
from ..common import *
|
|
|
|
def url_to_module(url):
|
|
video_host = r1(r'https?://([^/]+)/', url)
|
|
video_url = r1(r'https?://[^/]+(.*)', url)
|
|
assert video_host and video_url, 'invalid url: ' + url
|
|
|
|
if video_host.endswith('.com.cn'):
|
|
video_host = video_host[:-3]
|
|
domain = r1(r'(\.[^.]+\.[^.]+)$', video_host) or video_host
|
|
assert domain, 'unsupported url: ' + url
|
|
|
|
k = r1(r'([^.]+)', domain)
|
|
downloads = {
|
|
'163': netease,
|
|
'56': w56,
|
|
'acfun': acfun,
|
|
'baidu': baidu,
|
|
'bilibili': bilibili,
|
|
'blip': blip,
|
|
'cntv': cntv,
|
|
'cbs': cbs,
|
|
'coursera': coursera,
|
|
'dailymotion': dailymotion,
|
|
'douban': douban,
|
|
'ehow': ehow,
|
|
'facebook': facebook,
|
|
'freesound': freesound,
|
|
'google': google,
|
|
'iask': sina,
|
|
'ifeng': ifeng,
|
|
'in': alive,
|
|
'instagram': instagram,
|
|
'iqiyi': iqiyi,
|
|
'joy': joy,
|
|
'jpopsuki': jpopsuki,
|
|
'kankanews': bilibili,
|
|
'ku6': ku6,
|
|
'kugou':kugou,
|
|
'letv': letv,
|
|
'magisto': magisto,
|
|
'miomio': miomio,
|
|
'mixcloud': mixcloud,
|
|
'nicovideo': nicovideo,
|
|
'pptv': pptv,
|
|
'qq': qq,
|
|
'sina': sina,
|
|
'smgbb': bilibili,
|
|
'sohu': sohu,
|
|
'songtaste':songtaste,
|
|
'soundcloud': soundcloud,
|
|
'ted': ted,
|
|
'theplatform': theplatform,
|
|
'tudou': tudou,
|
|
'tumblr': tumblr,
|
|
'vid48': vid48,
|
|
'vimeo': vimeo,
|
|
'vine': vine,
|
|
'vk': vk,
|
|
'xiami': xiami,
|
|
'yinyuetai': yinyuetai,
|
|
'youku': youku,
|
|
'youtu': youtube,
|
|
'youtube': youtube,
|
|
'khanacademy': khan,
|
|
#TODO
|
|
}
|
|
if k in downloads:
|
|
return downloads[k], url
|
|
else:
|
|
import http.client
|
|
conn = http.client.HTTPConnection(video_host)
|
|
conn.request("HEAD", video_url)
|
|
res = conn.getresponse()
|
|
location = res.getheader('location')
|
|
if location is None:
|
|
raise NotImplementedError(url)
|
|
else:
|
|
return url_to_module(location)
|
|
|
|
def any_download(url, **kwargs):
|
|
m, url = url_to_module(url)
|
|
m.download(url, **kwargs)
|
|
|
|
def any_download_playlist(url, **kwargs):
|
|
m, url = url_to_module(url)
|
|
m.download_playlist(url, **kwargs)
|
|
|
|
def main():
|
|
script_main('you-get', any_download, any_download_playlist)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|