you-get/src/you_get/extractor/__main__.py
2014-04-26 15:18:28 +02:00

98 lines
2.7 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,
'5sing': fivesing,
'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,
'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, output_dir='.', merge=True, info_only=False):
m, url = url_to_module(url)
m.download(url, output_dir=output_dir, merge=merge, info_only=info_only)
def any_download_playlist(url, output_dir='.', merge=True, info_only=False):
m, url = url_to_module(url)
m.download_playlist(url, output_dir=output_dir, merge=merge, info_only=info_only)
def main():
script_main('you-get', any_download, any_download_playlist)
if __name__ == "__main__":
main()