add support for netease cloud music
diff --git a/src/you_get/extractor/__init__.py b/src/you_get/extractor/__init__.py
index f4b6d379e9..9c99b80f3d 100644
--- a/src/you_get/extractor/__init__.py
+++ b/src/you_get/extractor/__init__.py
@@ -21,6 +21,7 @@
 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 1d52d3ab92..5d16f7bf7c 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 0000000000..16a79567ef
--- /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"<name>(.*)</name>")
+    #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 1321ba0fca..14dd5be7df 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)
-
-    title = r1('movieDescription=\'([^\']+)\'', html) or r1('<title>(.+)</title>', html)
-
-    if title[0] == ' ':
-        title = title[1:]
-    
-    src = r1(r'<source src="([^"]+)"', html) or r1(r'<source type="[^"]+" src="([^"]+)"', html)
-    
-    if src:
-        sd_url = r1(r'(.+)-mobile.mp4', src) + ".flv"
-        _, _, sd_size = url_info(sd_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('<title>(.+)</title>', html)
+
+        if title[0] == ' ':
+            title = title[1:]
         
-        hd_url = re.sub('/SD/', '/HD/', sd_url)
-        _, _, hd_size = url_info(hd_url)
+        src = r1(r'<source src="([^"]+)"', html) or r1(r'<source type="[^"]+" src="([^"]+)"', html)
         
-        if hd_size > 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

refer to #340 
