diff --git a/README.md b/README.md index 36ccb2c9..f2ddc72e 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ Fork me on GitHub: * Sina (新浪视频) * Sohu (搜狐视频) * 56 (56网) +* Xiam (虾米) ## Dependencies @@ -222,6 +223,7 @@ You-Get基于优酷下载脚本[iambus/youku-lixian](https://github.com/iambus/y * 新浪视频 * 搜狐视频 * 56网 +* 虾米 ## 依赖 diff --git a/README.txt b/README.txt index 3929886e..69ab9868 100644 --- a/README.txt +++ b/README.txt @@ -34,6 +34,7 @@ Supported Sites (As of Now) * Sina (新浪视频) http://video.sina.com.cn * Sohu (搜狐视频) http://tv.sohu.com * 56 (56网) http://www.56.com +* Xiam (虾米) http://www.xiami.com Dependencies ------------ diff --git a/you_get/downloader/__init__.py b/you_get/downloader/__init__.py index 229114a0..0dca3cd8 100755 --- a/you_get/downloader/__init__.py +++ b/you_get/downloader/__init__.py @@ -18,6 +18,7 @@ from .xtube import * from .tumblr import * from .vimeo import * from .w56 import * +from .xiami import * from .yinyuetai import * from .youku import * from .youtube import * diff --git a/you_get/downloader/xiami.py b/you_get/downloader/xiami.py new file mode 100755 index 00000000..13731072 --- /dev/null +++ b/you_get/downloader/xiami.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +__all__ = ['xiami_download'] + +from ..common import * + +from xml.dom.minidom import parseString +from urllib import parse + +def location_dec(str): + head = int(str[0]) + str = str[1:] + rows = head + cols = int(len(str)/rows) + 1 + + out = "" + full_row = len(str) % head + for c in range(cols): + for r in range(rows): + if c == (cols - 1) and r >= full_row: + continue + if r < full_row: + char = str[r*cols+c] + else: + char = str[cols*full_row+(r-full_row)*(cols-1)+c] + out += char + return parse.unquote(out).replace("^", "0") + +def xiami_download_song(sid, output_dir = '.', merge = True, info_only = False): + xml = get_html('http://www.xiami.com/song/playlist/id/%s/object_name/default/object_id/0' % sid) + doc = parseString(xml) + i = doc.getElementsByTagName("track")[0] + artist = i.getElementsByTagName("artist")[0].firstChild.nodeValue + album_name = i.getElementsByTagName("album_name")[0].firstChild.nodeValue + song_title = i.getElementsByTagName("title")[0].firstChild.nodeValue + url = location_dec(i.getElementsByTagName("location")[0].firstChild.nodeValue) + type, ext, size = url_info(url) + download_urls([url], "%s - %s - %s" % (song_title, artist, album_name), ext, size, output_dir, merge = merge) + +def xiami_download_showcollect(sid, output_dir = '.', merge = True, info_only = False): + xml = get_html('http://www.xiami.com/song/playlist/id/%s/type/3' % sid) + doc = parseString(xml) + tracks = doc.getElementsByTagName("track") + track_nr = 1 + for i in tracks: + artist = i.getElementsByTagName("artist")[0].firstChild.nodeValue + album_name = i.getElementsByTagName("album_name")[0].firstChild.nodeValue + song_title = i.getElementsByTagName("title")[0].firstChild.nodeValue + url = location_dec(i.getElementsByTagName("location")[0].firstChild.nodeValue) + type, ext, size = url_info(url) + download_urls([url], "%02d.%s - %s - %s" % (track_nr, song_title, artist, album_name), ext, size, output_dir, merge = merge) + track_nr += 1 + +def xiami_download_album(sid, output_dir = '.', merge = True, info_only = False): + xml = get_html('http://www.xiami.com/song/playlist/id/%s/type/1' % sid) + album_name = r1(r'', xml) + doc = parseString(xml) + tracks = doc.getElementsByTagName("track") + track_nr = 1 + for i in tracks: + song_title = i.getElementsByTagName("title")[0].firstChild.nodeValue + url = location_dec(i.getElementsByTagName("location")[0].firstChild.nodeValue) + type, ext, size = url_info(url) + download_urls([url], "%s - %02d.%s" % (album_name, track_nr, song_title), ext, size, output_dir, merge = merge) + track_nr += 1 + +def xiami_download(url, output_dir = '.', stream_type = None, merge = True, info_only = False): + + if re.match(r'http://www.xiami.com/album/\d+', url): + id = r1(r'http://www.xiami.com/album/(\d+)', url) + return xiami_download_album(id, output_dir, merge, info_only) + + if re.match(r'http://www.xiami.com/song/showcollect/id/\d+', url): + id = r1(r'http://www.xiami.com/song/showcollect/id/(\d+)', url) + return xiami_download_showcollect(id, output_dir, merge, info_only) + + if re.match('http://www.xiami.com/song/\d+', url): + id = r1(r'http://www.xiami.com/song/(\d+)', url) + return xiami_download_song(id) + + return None + +site_info = "Xiami.com" +download = xiami_download +download_playlist = playlist_not_supported("xiami") diff --git a/you_get/main.py b/you_get/main.py index a7b464e3..45bc63d0 100755 --- a/you_get/main.py +++ b/you_get/main.py @@ -39,6 +39,7 @@ def url_to_module(url): 'xtube': xtube, 'tumblr': tumblr, 'vimeo': vimeo, + 'xiami': xiami, 'yinyuetai': yinyuetai, 'youku': youku, 'youtube': youtube,