diff --git a/src/you_get/extractor/__init__.py b/src/you_get/extractor/__init__.py index f4b6d379..9c99b80f 100644 --- a/src/you_get/extractor/__init__.py +++ b/src/you_get/extractor/__init__.py @@ -21,6 +21,7 @@ from .joy import * from .jpopsuki import * from .ku6 import * from .kugou import * +from .kuwo import * from .letv import * from .magisto import * from .miomio import * diff --git a/src/you_get/extractor/__main__.py b/src/you_get/extractor/__main__.py index 1d52d3ab..5d16f7bf 100644 --- a/src/you_get/extractor/__main__.py +++ b/src/you_get/extractor/__main__.py @@ -41,6 +41,7 @@ def url_to_module(url): 'kankanews': bilibili, 'ku6': ku6, 'kugou':kugou, + 'kuwo':kuwo, 'letv': letv, 'magisto': magisto, 'miomio': miomio, diff --git a/src/you_get/extractor/kuwo.py b/src/you_get/extractor/kuwo.py new file mode 100644 index 00000000..16a79567 --- /dev/null +++ b/src/you_get/extractor/kuwo.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python + +__all__ = ['kuwo_download'] + +from ..common import * +import re + +def kuwo_download_by_rid(rid, output_dir = '.', merge = True, info_only = False): + html=get_content("http://player.kuwo.cn/webmusic/st/getNewMuiseByRid?rid=MUSIC_%s"%rid) + title=match1(html,r"(.*)") + #to get title + #format =aac|mp3 ->to get aac format=mp3 ->to get mp3 + url=get_content("http://antiserver.kuwo.cn/anti.s?format=mp3&rid=MUSIC_%s&type=convert_url&response=url"%rid) + songtype, ext, size = url_info(url) + print_info(site_info, title, songtype, size) + if not info_only: + download_urls([url], title, ext, size, output_dir) + +def kuwo_playlist_download(url, output_dir = '.', merge = True, info_only = False): + html=get_content(url) + matched=set(re.compile("yinyue/(\d+)").findall(html))#reduce duplicated + for rid in matched: + kuwo_download_by_rid(rid,output_dir,merge,info_only) + + + +def kuwo_download(url, output_dir = '.', merge = True, info_only = False): + if "www.kuwo.cn/yinyue" in url: + rid=match1(url,'yinyue/(\d+)') + kuwo_download_by_rid(rid,output_dir, merge, info_only) + else: + kuwo_playlist_download(url,output_dir,merge,info_only) + +site_info = "kuwo.cn" +download = kuwo_download +# download_playlist = playlist_not_supported("kugou") +# download_playlist=playlist_not_supported("kuwo") +download_playlist=kuwo_playlist_download diff --git a/src/you_get/extractor/netease.py b/src/you_get/extractor/netease.py index 1321ba0f..14dd5be7 100644 --- a/src/you_get/extractor/netease.py +++ b/src/you_get/extractor/netease.py @@ -3,38 +3,65 @@ __all__ = ['netease_download'] from ..common import * +from json import loads + +def netease_cloud_music_download(url, output_dir = '.', merge = True, info_only = False): + rid=match1(url,r'id=(.*)') + if "album" in url: + j=loads(get_content("http://music.163.com/api/album/%s?id=%s&csrf_token="%(rid,rid),headers={"Referer":"http://music.163.com/"})) + for i in j['album']['songs']: + title=i['name'] + url=i['mp3Url'] + songtype, ext, size = url_info(url) + print_info(site_info, title, songtype, size) + if not info_only: + download_urls([url], title, ext, size, output_dir) + + elif "song" in url: + j=loads(get_content("http://music.163.com/api/song/detail/?id=%s&ids=[%s]&csrf_token="%(rid,rid),headers={"Referer":"http://music.163.com/"})) + title=j["songs"][0]['name'] + url=j["songs"][0]['mp3Url'] + songtype, ext, size = url_info(url) + print_info(site_info, title, songtype, size) + if not info_only: + download_urls([url], title, ext, size, output_dir) + + def netease_download(url, output_dir = '.', merge = True, info_only = False): - html = get_decoded_html(url) + if "music.163.com" in url: + netease_cloud_music_download(url,output_dir,merge,info_only) + else: + html = get_decoded_html(url) - title = r1('movieDescription=\'([^\']+)\'', html) or r1('(.+)', html) + title = r1('movieDescription=\'([^\']+)\'', html) or r1('(.+)', html) - if title[0] == ' ': - title = title[1:] - - src = r1(r' sd_size: - url, size = hd_url, hd_size + if src: + sd_url = r1(r'(.+)-mobile.mp4', src) + ".flv" + _, _, sd_size = url_info(sd_url) + + hd_url = re.sub('/SD/', '/HD/', sd_url) + _, _, hd_size = url_info(hd_url) + + if hd_size > sd_size: + url, size = hd_url, hd_size + else: + url, size = sd_url, sd_size + ext = 'flv' + else: - url, size = sd_url, sd_size - ext = 'flv' + url = (r1(r'["\'](.+)-list.m3u8["\']', html) or r1(r'["\'](.+).m3u8["\']', html)) + ".mp4" + _, _, size = url_info(url) + ext = 'mp4' - else: - url = (r1(r'["\'](.+)-list.m3u8["\']', html) or r1(r'["\'](.+).m3u8["\']', html)) + ".mp4" - _, _, size = url_info(url) - ext = 'mp4' - - print_info(site_info, title, ext, size) - if not info_only: - download_urls([url], title, ext, size, output_dir = output_dir, merge = merge) + print_info(site_info, title, ext, size) + if not info_only: + download_urls([url], title, ext, size, output_dir = output_dir, merge = merge) site_info = "163.com" download = netease_download