Giter Club home page Giter Club logo

neteasecloudmusicflac's Introduction

NeteaseCloudMusicFlac

NeteaseCloudMusicFlac is being sponsored by the following tool; please help to support us by taking a look and signing up to a free tria.

本程序仅供学习之用

感谢为 NeteaseCloudMusicFlac 的开发付出过努力以及提出建议的每一个人!

根据网易云音乐歌单, 下载对应无损FLAC歌曲到本地.

BackGround

现在无损资源基本都是专辑, 很难找到单曲来下载. 而且下载需要每个专辑搜索一遍, 需要用云盘复制粘贴密码再下载. 这对于听Hi-Fi的人们来说是非常不便利的事情, 找歌曲可以找一整天. 而现在网易云音乐是绝大多数人听在线歌曲的平台, 歌单众多. 于是我想做如此一个项目, 根据网易云音乐上面的歌单, 自动下载FLAC无损音乐到本地.

注意

海外由于版权问题无法下载歌曲, 所以会导致此issue, 无法正常使用, 需要修改DNS配置, 里面有解决方法.

安装

安装Python

根据此网站教程安装Python 注意安装的版本是 python3

强制使用 python3, 从我做起

下载main.py

可以使用此链接 https://codeload.github.com/YongHaoWu/NeteaseCloudMusicFlac/zip/master

获取歌单

网易云音乐网页版找出想要下载无损的歌单, 如下图

NeteaseCloudMusicFlac

后进入歌单, 地址栏地址便是歌单地址.

使用

$ python main.py 歌单地址(如上图便是: http://music.163.com/#/playlist?id=145258012)

python3示例命令(注意 windows 可能要把下面的单引号去掉)

$ python3 main.py 'http://music.163.com/#/playlist?id=145258012'

下载所有歌曲, 包括 MP3 在内

$ python3 main.py 'http://music.163.com/#/playlist?id=145258012' --mp3

如果告知缺乏module

下载对应的模块(module), 网上搜索如何安装python模块.

python3
pip3 install requests

如运行中遇到错误, 可以运行 pip3 install --upgrade requests (其中一已知错误是request 旧版本在多线程下载时出现错误)

TODO list

  1. 目前只是匹配歌曲名字, 最好加上匹配歌手名
  2. 歌曲匹配率不高, 可以考虑再到其他网站抓

Enjoy it !

版权问题

如果涉及版权问题,项目将立刻关闭。 自己为百度音乐会员, 该项目为方便自己而做

The MIT License (MIT)

CopyRight (c) 2016 YongHaoHu <[email protected]>

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

neteasecloudmusicflac's People

Contributors

atlas-comstock avatar huiyaoren avatar ihamsterball avatar lasmgratel avatar moenn avatar titanssword avatar yangkian avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

neteasecloudmusicflac's Issues

增加重试和适当的请求延迟时间

歌单较长的情况下 大概率会遇到异常
增加重试和适当的请求延迟时间可能可以解决这个问题

Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\urllib3\connection.py", line 141, in _new_conn
(self.host, self.port), self.timeout, **extra_kw)
File "C:\ProgramData\Anaconda3\lib\site-packages\urllib3\util\connection.py", line 83, in create_connection
raise err
File "C:\ProgramData\Anaconda3\lib\site-packages\urllib3\util\connection.py", line 73, in create_connection
sock.connect(sa)
TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 601, in urlopen
chunked=chunked)
File "C:\ProgramData\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 357, in _make_request
conn.request(method, url, **httplib_request_kw)
File "C:\ProgramData\Anaconda3\lib\http\client.py", line 1239, in request
self._send_request(method, url, body, headers, encode_chunked)
File "C:\ProgramData\Anaconda3\lib\http\client.py", line 1285, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "C:\ProgramData\Anaconda3\lib\http\client.py", line 1234, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "C:\ProgramData\Anaconda3\lib\http\client.py", line 1026, in _send_output
self.send(msg)
File "C:\ProgramData\Anaconda3\lib\http\client.py", line 964, in send
self.connect()
File "C:\ProgramData\Anaconda3\lib\site-packages\urllib3\connection.py", line 166, in connect
conn = self._new_conn()
File "C:\ProgramData\Anaconda3\lib\site-packages\urllib3\connection.py", line 150, in _new_conn
self, "Failed to establish a new connection: %s" % e)
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x0000020BD6B8F080>: Failed to establish a new connection: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\requests\adapters.py", line 440, in send
timeout=timeout
File "C:\ProgramData\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 639, in urlopen
_stacktrace=sys.exc_info()[2])
File "C:\ProgramData\Anaconda3\lib\site-packages\urllib3\util\retry.py", line 388, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='music.taihe.com', port=80): Max retries exceeded with url: /data/music/fmlink?songIds=294052&type=flac (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000020BD6B
8F080>: Failed to establish a new connection: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。',))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "python3_main.py", line 73, in
r = requests.get(url, params=payload)
File "C:\ProgramData\Anaconda3\lib\site-packages\requests\api.py", line 72, in get
return request('get', url, params=params, **kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\requests\api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\requests\sessions.py", line 508, in request
resp = self.send(prep, **send_kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\requests\sessions.py", line 640, in send
history = [resp for resp in gen] if allow_redirects else []
File "C:\ProgramData\Anaconda3\lib\site-packages\requests\sessions.py", line 640, in
history = [resp for resp in gen] if allow_redirects else []
File "C:\ProgramData\Anaconda3\lib\site-packages\requests\sessions.py", line 218, in resolve_redirects
**adapter_kwargs
File "C:\ProgramData\Anaconda3\lib\site-packages\requests\sessions.py", line 618, in send
r = adapter.send(request, **kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\requests\adapters.py", line 508, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='music.taihe.com', port=80): Max retries exceeded with url: /data/music/fmlink?songIds=294052&type=flac (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000020B
D6B8F080>: Failed to establish a new connection: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。',))

解析json失败

NeteaseCloudMusicFlac>python python3_main.py http://music.163.com/#/playlist?id=145258012
fetching msg from http://music.163.com/#/playlist?id=145258012

http://music.163.com/playlist?id=145258012
解析json失败
Traceback (most recent call last):
  File "python3_main.py", line 35, in <module>
    for value in results:
NameError: name 'results' is not defined

下载的时候出错了

Traceback (most recent call last):
File "main.py", line 71, in
size = int(headers['Content-Length']) / (1024 ** 2)
File "/usr/local/lib/python2.7/dist-packages/requests/structures.py", line 54, in getitem
return self._store[key.lower()][1]
KeyError: 'content-length'

python


Traceback (most recent call last):
File "python3_main.py", line 64, in
size = round(int(headers['Content-Length']) / (1024 ** 2), 2)
File "/usr/lib/python3/dist-packages/requests/structures.py", line 54, in getitem
return self._store[key.lower()][1]
KeyError: 'content-length'

python3


开始正常下了几首歌,然后出错了

README里面的示例命令有问题

python2示例命令

$ python main.py 'http://music.163.com/#/playlist?id=145258012'

python3示例命令

$ python3 python3_main.py 'http://music.163.com/#/playlist?id=145258012'

网址应该去掉引号,应该改为:

python2示例命令

$ python main.py http://music.163.com/#/playlist?id=145258012

python3示例命令

$ python3 python3_main.py http://music.163.com/#/playlist?id=145258012

使用代码出现错误,应该是url的问题,求如何解决

C:\Users\Tianzp\AppData\Local\Programs\Python\Python36\python.exe C:/Users/Tianzp/Desktop/NeteaseCloudMusicFlac-master/NeteaseCloudMusicFlac-master/python3_main.py Traceback (most recent call last): File "C:/Users/Tianzp/Desktop/NeteaseCloudMusicFlac-master/NeteaseCloudMusicFlac-master/python3_main.py", line 11, in <module> print("fetching msg from %s \n" % sys.argv[1]) IndexError: list index out of range
image
这个链接也试了也打不开,vpn挂了和没挂都打不开
image

win10 python3 cmd无法使用

执行下面命令(带单引号):
python python3_main.py 'http://music.163.com/#/my/m/music/playlist?id=171170686'
结果是:
E:\zzc\music>python python3_main.py 'http://music.163.com/#/my/m/music/playlist?id=171170686'
fetching msg from 'http://music.163.com/#/my/m/music/playlist?id=171170686'

Traceback (most recent call last):
File "python3_main.py", line 13, in
r = requests.get(url,headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36'})
File "C:\softwares\python3\lib\site-packages\requests\api.py", line 72, in get
return request('get', url, params=params, **kwargs)
File "C:\softwares\python3\lib\site-packages\requests\api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "C:\softwares\python3\lib\site-packages\requests\sessions.py", line 508, in request
resp = self.send(prep, **send_kwargs)
File "C:\softwares\python3\lib\site-packages\requests\sessions.py", line 612, in send
adapter = self.get_adapter(url=request.url)
File "C:\softwares\python3\lib\site-packages\requests\sessions.py", line 703, in get_adapter
raise InvalidSchema("No connection adapters were found for '%s'" % url)
requests.exceptions.InvalidSchema: No connection adapters were found for ''http://music.163.com/my/m/music/playlist?id=171170686''

执行下面命令(不带单引号):
python python3_main.py http://music.163.com/#/my/m/music/playlist?id=171170686
结果是:
E:\zzc\music>python python3_main.py http://music.163.com/#/my/m/music/playlist?id=171170686
fetching msg from http://music.163.com/#/my/m/music/playlist?id=171170686

================================================================

Download finish!
Songs' directory is E:\zzc\music/songs_dir
但是music目录下并没有songs_dir目录,歌曲也没有下载

Fix encoding/url entry

$ git diff
diff --git a/main.py b/main.py
index ad9690f..8f068cd 100644
--- a/main.py
+++ b/main.py
@@ -1,12 +1,12 @@
 import re
 import requests
 import json
-import urllib2
+import urllib
 import os
 import sys

 print "fetching msg from " + sys.argv[1] + "\n"
-url = sys.argv[1]
+url = re.sub("#/", "", sys.argv[1])
 r   = requests.get(url)
 contents = r.text
 res = r'<ul class="f-hide">(.*?)</ul>'
@@ -19,16 +19,17 @@ else:

 res = r'<li><a .*?>(.*?)</a></li>'
 mm  =  re.findall(res, contents, re.S|re.M)
+CURRENT_PATH = os.path.dirname(os.path.realpath(__file__))

 for value in mm:
     url = 'http://sug.music.baidu.com/info/suggestion'
     payload = {'word': value, 'version': '2', 'from': '0'}
-    print value
+    print value.encode("u8")

     r = requests.get(url, params=payload)
     contents = r.text
     d = json.loads(contents, encoding="utf-8")
-    if('data' not in d):
+    if d is not None and 'data' not in d:
         continue
     songid = d["data"]["song"][0]["songid"]
     print "find songid: "
@@ -54,9 +55,11 @@ for value in mm:

     songname = d["data"]["songList"][0]["songName"]
     artistName = d["data"]["songList"][0]["artistName"]
-    filename = "./" + songdir + "/"+songname+"-"+artistName+".flac"
+    filename = ("%s/%s/%s-%s.flac" % (CURRENT_PATH, songdir, songname, artistName)).encode("u8")
     print filename + " is downloading now ......\n\n"

-    f = urllib2.urlopen(songlink)
-    with open(filename, "wb") as code:
-        code.write(f.read())
+
+    urllib.urlretrieve(songlink, filename)
+    #f = urllib2.urlopen(songlink)
+    #with open(filename, "wb") as code:
+    #    code.write(f.read())

python 3 support?

It doesn't work with Python 3. Is it possible to create a python 3 compatible version?

使用问题

不能通过歌曲名下载吗?我用歌曲名下不来,只能用歌单才能下。。。

API From music.able.cat

music.able.cat API, which is from JSBox script of "ACPlayer", provides flac

anyone who can add this, please do it.

curl 'http://api.able.cat/music/?t=wy&id=531051217' -H 'User-Agent: JSBoxMain/97 CFNetwork/811.5.4 Darwin/16.7.0'
{
	"count": "1",
	"data": [
		{
			"Album": "等你下课",
			"ape": "",
			"author": "《等你下课》- 周杰伦",
			"flac": "http://vip.itwusun.com/music/ymusic/wy_999_531051217.flac?sign=3f51ffbf46d7388c72f920e1157af104",
			"id": "531051217",
			"INFO": "《等你下课 (with 杨瑞代)》- 周杰伦",
			"lrc": "http://vip.itwusun.com/music/ymusic/wy_320_531051217.lrc?sign=810774605063adb36035d68494266e5d",
			"mvurl": "http://vip.itwusun.com/music/ymusic/wy_hd_5819032.mp4?sign=c69c6e62e89ace11f55dd27bebeab2de",
			"pic": "http://p4.music.126.net/A8qicH14toObbLpPMiKmBw==/109951163110962030.jpg",
			"singer": "周杰伦",
			"title": "等你下课 (with 杨瑞代)",
			"url": "http://vip.itwusun.com/music/ymusic/wy_320_531051217.mp3?sign=21a6a8a8ebc9954c49b0b3279c0ee57c"
		}
	]
}
curl 'http://music.able.cat/download/api/?id=孙燕姿No.%2013作品:跳舞的梵谷' -H 'User-Agent: JSBoxMain/97 CFNetwork/811.5.4 Darwin/16.7.0'
{
	"count": "10",
	"data": [
		{
			"Album": "孙燕姿No. 13作品:跳舞的梵谷",
			"ape": "",
			"author": "《孙燕姿No. 13作品:跳舞的梵谷》- 孙燕姿",
			"flac": "http://vip.itwusun.com/music/ymusic/wy_999_516657213.flac?sign=dc50af7bf957c2af4ccca3b54306a9e7",
			"id": "516657213",
			"INFO": "《风衣》- 孙燕姿",
			"lrc": "http://vip.itwusun.com/music/ymusic/wy_320_516657213.lrc?sign=55a523bfa4c52db01490a4b9c50a2ca4",
			"mvurl": "http://vip.itwusun.com/music/ymusic/wy_hd_5732043.mp4?sign=ccc5d2b5f6e3de0ab263bc838c16bb3f",
			"pic": "http://p4.music.126.net/_VjuIgInJqwxdyoy4FF3IA==/18357446138140955.jpg",
			"singer": "孙燕姿",
			"title": "风衣",
			"url": "http://vip.itwusun.com/music/ymusic/wy_320_516657213.mp3?sign=84a47524980dc5315b72c3ae543a12a7"
		},
		{
			"Album": "孙燕姿No. 13作品:跳舞的梵谷",
			"ape": "",
			"author": "《孙燕姿No. 13作品:跳舞的梵谷》- 孙燕姿",
			"flac": "http://vip.itwusun.com/music/ymusic/wy_999_516224840.flac?sign=690da54d90b88d24338f0024695971f0",
			"id": "516224840",
			"INFO": "《我很愉快》- 孙燕姿",
			"lrc": "http://vip.itwusun.com/music/ymusic/wy_320_516224840.lrc?sign=931d83125e0c2a75f73ed4665f1e4f03",
			"mvurl": "http://vip.itwusun.com/music/ymusic/wy_hd_5709017.mp4?sign=66830cafe3127aeebc754d6262b37ce0",
			"pic": "http://p4.music.126.net/_VjuIgInJqwxdyoy4FF3IA==/18357446138140955.jpg",
			"singer": "孙燕姿",
			"title": "我很愉快",
			"url": "http://vip.itwusun.com/music/ymusic/wy_320_516224840.mp3?sign=068be960e99bb0108008657973ccb73e"
		},
		{
			"Album": "孙燕姿No. 13作品:跳舞的梵谷",
			"ape": "",
			"author": "《孙燕姿No. 13作品:跳舞的梵谷》- 孙燕姿",
			"flac": "http://vip.itwusun.com/music/ymusic/wy_999_514055051.flac?sign=6a1c9c053c91c4b51e7e259ac5e554dd",
			"id": "514055051",
			"INFO": "《跳舞的梵谷》- 孙燕姿",
			"lrc": "http://vip.itwusun.com/music/ymusic/wy_320_514055051.lrc?sign=ea3cfdede023e638e888e0bda7972f84",
			"mvurl": "http://vip.itwusun.com/music/ymusic/wy_hd_5678356.mp4?sign=835ad25be65f2836596652fd6978b4cf",
			"pic": "http://p4.music.126.net/_VjuIgInJqwxdyoy4FF3IA==/18357446138140955.jpg",
			"singer": "孙燕姿",
			"title": "跳舞的梵谷",
			"url": "http://vip.itwusun.com/music/ymusic/wy_320_514055051.mp3?sign=08ccf6f9ead65c4d11f1f2349d10785b"
		},
		{
			"Album": "孙燕姿No. 13作品:跳舞的梵谷",
			"ape": "",
			"author": "《孙燕姿No. 13作品:跳舞的梵谷》- 孙燕姿",
			"flac": "http://vip.itwusun.com/music/ymusic/wy_999_516657215.flac?sign=c0cb6dc67b5c396e8f76f2c4d006b45f",
			"id": "516657215",
			"INFO": "《极美》- 孙燕姿",
			"lrc": "http://vip.itwusun.com/music/ymusic/wy_320_516657215.lrc?sign=5149eb234cdd744c5107852eb3876e98",
			"mvurl": "http://vip.itwusun.com/music/ymusic/wy_hd_5810580.mp4?sign=919d58b652740b81fb2cc92472ae7056",
			"pic": "http://p4.music.126.net/_VjuIgInJqwxdyoy4FF3IA==/18357446138140955.jpg",
			"singer": "孙燕姿",
			"title": "极美",
			"url": "http://vip.itwusun.com/music/ymusic/wy_320_516657215.mp3?sign=788de22641816573ffa764c9f224c408"
		},
		{
			"Album": "孙燕姿No. 13作品:跳舞的梵谷",
			"ape": "",
			"author": "《孙燕姿No. 13作品:跳舞的梵谷》- 孙燕姿",
			"flac": "http://vip.itwusun.com/music/ymusic/wy_999_516657214.flac?sign=2dc9cf24295d9e444dbf423cb3c40f41",
			"id": "516657214",
			"INFO": "《天天年年》- 孙燕姿",
			"lrc": "http://vip.itwusun.com/music/ymusic/wy_320_516657214.lrc?sign=636f53f15b7ed2d6cf00d34670a9c6d8",
			"mvurl": "http://vip.itwusun.com/music/ymusic/wy_hd_5741395.mp4?sign=b76af5f2eaaea8b880b65a992cf0847b",
			"pic": "http://p4.music.126.net/_VjuIgInJqwxdyoy4FF3IA==/18357446138140955.jpg",
			"singer": "孙燕姿",
			"title": "天天年年",
			"url": "http://vip.itwusun.com/music/ymusic/wy_320_516657214.mp3?sign=a98536be4d4ef6450256c0a4560cf8cc"
		},
		{
			"Album": "孙燕姿No. 13作品:跳舞的梵谷",
			"ape": "",
			"author": "《孙燕姿No. 13作品:跳舞的梵谷》- 孙燕姿",
			"flac": "http://vip.itwusun.com/music/ymusic/wy_999_516655202.flac?sign=db35357aa45a52312600f085cbfd7dab",
			"id": "516655202",
			"INFO": "《天越亮, 夜越黑》- 孙燕姿",
			"lrc": "http://vip.itwusun.com/music/ymusic/wy_320_516655202.lrc?sign=7f1cdd4d6c818f226a9978b5a31193a8",
			"mvurl": "",
			"pic": "http://p4.music.126.net/_VjuIgInJqwxdyoy4FF3IA==/18357446138140955.jpg",
			"singer": "孙燕姿",
			"title": "天越亮, 夜越黑",
			"url": "http://vip.itwusun.com/music/ymusic/wy_320_516655202.mp3?sign=bca9a17ba22ea159156ebdf925e09fa8"
		},
		{
			"Album": "孙燕姿No. 13作品:跳舞的梵谷",
			"ape": "",
			"author": "《孙燕姿No. 13作品:跳舞的梵谷》- 孙燕姿",
			"flac": "http://vip.itwusun.com/music/ymusic/wy_999_516654223.flac?sign=61f2cb78df4701048988feeb5660b2b7",
			"id": "516654223",
			"INFO": "《平日快乐》- 孙燕姿",
			"lrc": "http://vip.itwusun.com/music/ymusic/wy_320_516654223.lrc?sign=6ef45b4e90c0e5f9410a9b54bf8f13ca",
			"mvurl": "",
			"pic": "http://p4.music.126.net/_VjuIgInJqwxdyoy4FF3IA==/18357446138140955.jpg",
			"singer": "孙燕姿",
			"title": "平日快乐",
			"url": "http://vip.itwusun.com/music/ymusic/wy_320_516654223.mp3?sign=855505f793eaae2d7e79882acd435668"
		},
		{
			"Album": "孙燕姿No. 13作品:跳舞的梵谷",
			"ape": "",
			"author": "《孙燕姿No. 13作品:跳舞的梵谷》- 孙燕姿",
			"flac": "http://vip.itwusun.com/music/ymusic/wy_999_516655203.flac?sign=92d2f6010f3b4bbaa788795c87cff8f7",
			"id": "516655203",
			"INFO": "《超人类》- 孙燕姿",
			"lrc": "http://vip.itwusun.com/music/ymusic/wy_320_516655203.lrc?sign=77148ef044b002cef923c708cd254e6e",
			"mvurl": "",
			"pic": "http://p4.music.126.net/_VjuIgInJqwxdyoy4FF3IA==/18357446138140955.jpg",
			"singer": "孙燕姿",
			"title": "超人类",
			"url": "http://vip.itwusun.com/music/ymusic/wy_320_516655203.mp3?sign=5ee4f71645bbe4f7998d7d75e287d6f3"
		},
		{
			"Album": "孙燕姿No. 13作品:跳舞的梵谷",
			"ape": "",
			"author": "《孙燕姿No. 13作品:跳舞的梵谷》- 孙燕姿",
			"flac": "http://vip.itwusun.com/music/ymusic/wy_999_516655204.flac?sign=2681de1a787f5e125f94ca2138fd46b5",
			"id": "516655204",
			"INFO": "《充氧期》- 孙燕姿",
			"lrc": "http://vip.itwusun.com/music/ymusic/wy_320_516655204.lrc?sign=23190ceae124579c7b8f17b036a4e9c7",
			"mvurl": "http://vip.itwusun.com/music/ymusic/wy_hd_5779894.mp4?sign=81d906e96bc7f4e86551bf2467cbd595",
			"pic": "http://p4.music.126.net/_VjuIgInJqwxdyoy4FF3IA==/18357446138140955.jpg",
			"singer": "孙燕姿",
			"title": "充氧期",
			"url": "http://vip.itwusun.com/music/ymusic/wy_320_516655204.mp3?sign=cf64d9ea96cc9b1265744dc22b9039a4"
		},
		{
			"Album": "孙燕姿No. 13作品:跳舞的梵谷",
			"ape": "",
			"author": "《孙燕姿No. 13作品:跳舞的梵谷》- 孙燕姿",
			"flac": "http://vip.itwusun.com/music/ymusic/wy_999_516654222.flac?sign=6028024adc341fb5c08c18e186573f4c",
			"id": "516654222",
			"INFO": "《漂浮群岛》- 孙燕姿",
			"lrc": "http://vip.itwusun.com/music/ymusic/wy_320_516654222.lrc?sign=ecedee987b78e44b8c42b5702eb151f1",
			"mvurl": "",
			"pic": "http://p4.music.126.net/_VjuIgInJqwxdyoy4FF3IA==/18357446138140955.jpg",
			"singer": "孙燕姿",
			"title": "漂浮群岛",
			"url": "http://vip.itwusun.com/music/ymusic/wy_320_516654222.mp3?sign=20c4bcd2a1d61f2a2c10341404e6a3ca"
		}
	]
}

更改下载路径导致下载失败

我更改了下载路径!运行main.py后,提示歌曲下载成功,可以在目标地址生成目标文件夹,但是里面没有任何歌曲!
同样的歌单,如果不更改下载路径,是可以正常下载!
我想问下,这是什么问题捏?

Error "IndexError: string index out of range" when run python3_main.py code

I tried

python3 python3_main.py 'http://music.163.com/#/album?id=34738495'

and I received an error:

fetching msg from http://music.163.com/#/album?id=34738495

路远
find songid: 74223488
Traceback (most recent call last):
  File "python3_main.py", line 48, in <module>
    songlink = d["data"]["songList"][0]["songLink"]
IndexError: string index out of range

I don't receive any errors when I run main.py code. I don't know why.

JSON contents not loading correctly.

I loaded the code into the Cloud 9 IDE and tried to run:

python main.py http://music.163.com/playlist?id=145258012

I got the following error:

Traceback (most recent call last):
  File "main.py", line 44, in <module>
    songlink = d["data"]["songList"][0]["songLink"]
IndexError: string index out of range

I printed 'd' from " d = json.loads(contents, encoding="utf-8") " and received the following error:

{u'errorCode': 22232, u'data': {u'xcode': u'', u'songList': u''}}

Couldn't figure out what exactly is wrong here, but I'd like to note it. I think it's either JSON or UTF related.

对filename字符串的处理不够鲁棒

首先感谢作者的工作,但是在我的使用中发现字符串处理会有些问题,报错如下
Traceback (most recent call last):
File ".\python3_main.py", line 78, in
with open(filename, "wb") as code:
OSError: [Errno 22] Invalid argument: 'D:\NeteaseCloudMusicFlac/songs_dir/Do You? (Hope Us In Love)-Yiruma.flac'

运行过程中报错,似乎是超时问题,请问如何解决?

树莓派上的环境如下:
certifi-2018.8.24 chardet-3.0.4 idna-2.7 requests-2.19.1 urllib3-1.23
报错如下:
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/urllib3/connection.py", line 171, in _new_conn
(self._dns_host, self.port), self.timeout, **extra_kw)
File "/usr/local/lib/python3.5/dist-packages/urllib3/util/connection.py", line 79, in create_connection
raise err
File "/usr/local/lib/python3.5/dist-packages/urllib3/util/connection.py", line 69, in create_connection
sock.connect(sa)
TimeoutError: [Errno 110] Connection timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py", line 600, in urlopen
chunked=chunked)
File "/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py", line 354, in _make_request
conn.request(method, url, **httplib_request_kw)
File "/usr/lib/python3.5/http/client.py", line 1107, in request
self._send_request(method, url, body, headers)
File "/usr/lib/python3.5/http/client.py", line 1152, in _send_request
self.endheaders(body)
File "/usr/lib/python3.5/http/client.py", line 1103, in endheaders
self._send_output(message_body)
File "/usr/lib/python3.5/http/client.py", line 934, in _send_output
self.send(msg)
File "/usr/lib/python3.5/http/client.py", line 877, in send
self.connect()
File "/usr/local/lib/python3.5/dist-packages/urllib3/connection.py", line 196, in connect
conn = self._new_conn()
File "/usr/local/lib/python3.5/dist-packages/urllib3/connection.py", line 180, in _new_conn
self, "Failed to establish a new connection: %s" % e)
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7599ee30>: Failed to establish a new connection: [Errno 110] Connection timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/requests/adapters.py", line 445, in send
timeout=timeout
File "/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py", line 638, in urlopen
_stacktrace=sys.exc_info()[2])
File "/usr/local/lib/python3.5/dist-packages/urllib3/util/retry.py", line 398, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='music.baidu.com', port=80): Max retries exceeded with url: /data/music/fmlink?songIds=315439071&type=flac (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7599ee30>: Failed to establish a new connection: [Errno 110] Connection timed out',))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "main.py", line 163, in
main()
File "main.py", line 138, in main
d = get_song_info(songid)
File "main.py", line 87, in get_song_info
r = requests.get(BAIDU_MUSIC_API, params=payload)
File "/usr/local/lib/python3.5/dist-packages/requests/api.py", line 72, in get
return request('get', url, params=params, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/requests/api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 512, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 622, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/requests/adapters.py", line 513, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='music.baidu.com', port=80): Max retries exceeded with url: /data/music/fmlink?songIds=315439071&type=flac (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7599ee30>: Failed to establish a new connection: [Errno 110] Connection timed out',))

PC上运行环境如下:
Python 3.7.0
Requirement already satisfied: requests in c:\users\51130\appdata\local\programs\python\python37\lib\site-packages (2.19.1)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\users\51130\appdata\local\programs\python\python37\lib\site-packages (from requests) (3.0.4)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\51130\appdata\local\programs\python\python37\lib\site-packages (from requests) (2018.8.24)
Requirement already satisfied: urllib3<1.24,>=1.21.1 in c:\users\51130\appdata\local\programs\python\python37\lib\site-packages (from requests) (1.23)
Requirement already satisfied: idna<2.8,>=2.5 in c:\users\51130\appdata\local\programs\python\python37\lib\site-packages (from requests) (2.7)

报错如下:
Traceback (most recent call last):
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\connection.py", line 171, in _new_conn
(self._dns_host, self.port), self.timeout, **extra_kw)
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\util\connection.py", line 79, in create_connection
raise err
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\util\connection.py", line 69, in create_connection
sock.connect(sa)
TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\connectionpool.py", line 600, in urlopen
chunked=chunked)
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\connectionpool.py", line 354, in _make_request
conn.request(method, url, **httplib_request_kw)
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1229, in request
self._send_request(method, url, body, headers, encode_chunked)
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1275, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1224, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1016, in _send_output
self.send(msg)
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 956, in send
self.connect()
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\connection.py", line 196, in connect
conn = self._new_conn()
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\connection.py", line 180, in _new_conn
self, "Failed to establish a new connection: %s" % e)
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x0000024A26A6BBE0>: Failed to establish a new connection: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\site-packages\requests\adapters.py", line 445, in send
timeout=timeout
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\connectionpool.py", line 638, in urlopen
_stacktrace=sys.exc_info()[2])
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\util\retry.py", line 398, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='sug.music.baidu.com', port=80): Max retries exceeded with url: /info/suggestion?word=%E6%B1%9F%E4%B8%8A%E6%B8%85%E9%A3%8E%E6%B8%B8&version=2&from=0 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000024A26A6BBE0>: Failed to establish a new connection: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "main.py", line 163, in
main()
File "main.py", line 134, in main
songid = get_songid(value)
File "main.py", line 74, in get_songid
r = requests.get(BAIDU_SUGGESTION_API, params=payload)
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\site-packages\requests\api.py", line 72, in get
return request('get', url, params=params, **kwargs)
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\site-packages\requests\api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\site-packages\requests\sessions.py", line 512, in request
resp = self.send(prep, **send_kwargs)
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\site-packages\requests\sessions.py", line 622, in send
r = adapter.send(request, **kwargs)
File "C:\Users\51130\AppData\Local\Programs\Python\Python37\lib\site-packages\requests\adapters.py", line 513, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='sug.music.baidu.com', port=80): Max retries exceeded with url: /info/suggestion?word=%E6%B1%9F%E4%B8%8A%E6%B8%85%E9%A3%8E%E6%B8%B8&version=2&from=0 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000024A26A6BBE0>: Failed to establish a new connection: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond'))

When doing download , Invalid arguments

Traceback (most recent call last):
  File "python3_main.py", line 69, in <module>
    with open(filename, "wb") as code:
OSError: [Errno 22] Invalid argument: 'D:\\music download flac-ape\\NeteaseCloudMusicFlac-master/songs_dir/The Godfather Main Theme "The Godfather Waltz" (From "The Godfather")-The Original Movies Orchestra.flac'

文件名问题?

windows目录不能有引号",filename再替换下。
Traceback (most recent call last):
File "python3_main.py", line 113, in
with open(filename, "wb") as code:
OSError: [Errno 22] Invalid argument: 'D:\python\NeteaseCloudMusicFlac/songs_dir/Light And Lovely-Arnett Cobb,Arthur Edgehill,Buddy Tate,Coleman Hawkins,Eddie "Lockjaw" Davis,George Duvivier,Shirley Scott.flac'

在歌曲名含有/的时候,会爆FileNotFoundException

Marine Snow
find songid: 删
find songlink: 删
Marine Snow / Op.9 is downloading now ......


Traceback (most recent call last):
  File ".\python3_main.py", line 75, in <module>
    with open(filename, "wb") as code:
FileNotFoundError: [Errno 2] No such file or directory: '删\\NeteaseCloudMusicFlac/songs_dir/Marine Snow / Op.9-MATSUOKA Hiroaki.flac'

下载失败

有一些歌单,在terminal里面显示完歌名之后马上显示 ”Download finish!“
但是歌曲并没有下载到文件夹里。
screen shot 2018-08-17 at 3 55 56 pm

Songs Not Match

Hi - It's really happy to use your project. But there is some questions:

Throughout your README.md, it's all about "Downloading every song in your CloudMusic playlist", but it actually download songs from other services:

2018-10-28 08:58:52 main.py:72 [INFO] 沙龙
2018-10-28 08:58:52 main.py:81 [INFO] find songid: 7868299
2018-10-28 08:58:54 main.py:143 [INFO] find songlink:
2018-10-28 08:58:54 main.py:147 [INFO] http://zhangmenshiting.qianqian.com/data2/music/2d2955ad5f71328b78255d583feff591/599367367/7868299241200942.flac?xcode=28cef5a2ffa207fa1e0a87f01dbb9fb5

And, songs aren't match with those ones in my playlist:

image

The first song should be China-E by MengYuan Xu, the secound one should be My Way by Hins Cheung and the third one should be Stories by The Chakachas... So non of them so far are matched with my own playlist.

I hope you can improve that at some point by fatching the songs in CloudMusic's own resources but not using other services' "best-match results". Just some suggestions, hope you don't mind and thank you again for developing this project.

国内用户的未知错误 in<module>

Traceback (most recent call last):
File "python3_main.py", line 12, in
r = requests.get(url,headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36'})
。。。 。。。
raise InvalidSchema("No connection adapters were found for '%s'" % url)
requests.exceptions.InvalidSchema: No connection adapters were found for ''http://music.163.com/playlist?id=145258012''

报错如上,我是python3 ,win10系统

Program will Crash when the song link is a wrong URL.

不为谁而作的歌
find songid:
264554158
find songlink:
http://file.qianqian.com//data2/music/b20d80457529c2fe39bcf14e7005be68/264554472/264554472.mp3?xcode=2e590204fae885836b73a0f684021956&src="http%3A%2F%2Fpan.baidu.com%2Fshare%2Flink%3Fshareid%3D920132222%26uk%3D794016082"
./songs_dir/不为谁而作的歌 (原唱: 林俊杰)-徐佳莹,林俊杰.flac is downloading now ......

Traceback (most recent call last):
File "main.py", line 60, in
f = urllib2.urlopen(songlink)
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 437, in open
response = meth(req, response)
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 550, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 475, in error
return self._call_chain(_args)
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 409, in _call_chain
result = func(_args)
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 558, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 404: Not Found

好像编码有点问题……

Traceback (most recent call last):
File "main.py", line 33, in
print value
UnicodeEncodeError: 'gbk' codec can't encode character u'\xa0' in position 3: illegal multibyte sequence

歌名貌似是这个
I'm Yours Under the Mistletoe(Cover Jason Mraz / Justin Bieber)

是全角括号吗……

Empty songs_dir folder after run main.py

I ran

python main.py 'http://music.163.com/#/album?id=34738495'

It seemed ok.

fetching Netease song list from http://music.163.com/#/album?id=34738495

路远
songid: 74223488
忘了她
songid: 73847386
好好的
songid: 129166190
Mr.Right
songid: 326928368
情感
songid: 246352407
内在
songid: 261898219
Opening
songid: 546575756
温暖
songid: 267751
释放
songid: 120882846
美好
songid: 561768440
好好的
songid: 129166190
跟屁虫1
违和感
餐厅失火
孤独的内心
调皮鬼
陆远的事件1
陆远的事件2
屌屌的
悬疑
songid: 241871856
跟屁虫2
好先生的叨叨
心灵洗礼
被关冷库1
被关冷库2
钢琴和手碟的玄幻
手碟主题
鬼鬼祟祟
songid: 567024324
犯罪道路
失去味觉
轻松
songid: 121033733
手碟和大提琴的对话1
手碟和大提琴的对话2
手碟和大提琴的对话3
Grow
songid: 571000058
Song About Love
songid: 10539093

================================================================

Download finish!
Songs' directory is /mnt/e/NeteaseCloudMusicFlac-master/songs_dir

But when I opened songs_dir folder, it was just empty.

字符集处理

--- Logging error ---
Traceback (most recent call last):
File "d:\python36\lib\logging_init_.py", line 995, in emit
stream.write(msg)
UnicodeEncodeError: 'gbk' codec can't encode character '\xf6' in position 86: illegal multibyte sequence
Call stack:
File "python3_main.py", line 123, in
logger.info("%s is downloading now ......\n\n" % songname)
Message: 'Kickstart My Heart (as made famous by Mötley Crüe) is downloading now ......\n\n'
Arguments: ()

isssues

why need if size >= minimumsize:

估计网易云网页的json获取发生了变化

Glitter & Gold
Traceback (most recent call last):
File "main.py", line 71, in
songid = get_songid(value)
File "main.py", line 40, in get_songid
d = json.loads(contents, encoding="utf-8")
File "/usr/lib/python2.7/json/init.py", line 352, in loads
return cls(encoding=encoding, **kw).decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.