fix:fix package name error,compressed package volume

This commit is contained in:
2061360308 2023-12-14 17:50:37 +08:00
parent 76f285a59e
commit e0b8b68cfc
21 changed files with 314020 additions and 614819 deletions

View File

@ -1,98 +0,0 @@
# NeteaseCloudMusic_PythonSDK
> 基于 [ NeteaseCloudMusicApi](https://github.com/Binaryify/NeteaseCloudMusicApi) 封装的 Python SDK。
>
> 网易云API Python版本。
>
> 现已同步原项目接口且测试通过的有200多个
>
> 已发布到PyPi可直接使用pip安装
>
> 项目地址:[GitHub](https://github.com/2061360308/NeteaseCloudMusic_PythonSDK)
![](https://img.shields.io/badge/py_mini_racer-@0.6.0-red.svg)
![License](https://img.shields.io/badge/license-MIT-yellow)
### 依赖于
- [ NeteaseCloudMusicApi](https://github.com/Binaryify/NeteaseCloudMusicApi)
- [ NeteaseCloudMusicApi_V8 ](https://github.com/2061360308/NeteaseCloudMusicApi_V8)
### 原理
- 通过 `py_mini_racer` 调用 `NeteaseCloudMusicApi_V8``js` 方法。进一步进行了简单封装。
### 使用
- 安装 `pip install NeteaseCloudMusic`
- 导入API进行使用(具体查看`test.py`中的示例)
```python
from NeteaseCloudMusic import NeteaseCloudMusicApi, api_help, api_list
import os
netease_cloud_music_api = NeteaseCloudMusicApi() # 初始化API
netease_cloud_music_api.cookie = os.getenv("COOKIE") # 设置cookie
response = netease_cloud_music_api.request("song_url_v1", {"id": 33894312, "level": "exhigh"}) # 调用API
# 获取帮助
print(api_help())
print(api_help('song_url_v1'))
# 获取API列表
print(api_list())
```
> 注意: request(self, name, query=None) 的第一个参数为API名称第二个参数为API参数具体API名称和参数请参考 [NeteaseCloudMusicApi文档](https://docs.neteasecloudmusicapi.binaryify.com)name支持`/song/url/v1`和`song_url_v1`两种写法。
![test_report.png](./docs/test_report.png)
### 开发
- 克隆项目 `git clone git@github.com:2061360308/NeteaseCloudMusic_PythonSDK.git`
- 安装依赖 `pip install -r requirements.txt`
- 目录/文件说明
├── package 项目包根目录
├── test_gender 生成测试代码的脚本
├── test.py 手动测试/ 使用示例
### 改进
> 下列API未支持
>
- apicache.js
- memory-cache.js
- request_reference.js
- avatar_upload.js
- cloud.js
- playlist_cover_update.js
- voice_upload.js
- register_anonimous.js
- verify_getQr.js
> 以下api未测试(这些接口测试起来比较繁琐)
>
- /user/replacephone
- /audio/match
- /rebind
- /nickname/check
- /activate/init/profile
- /cellphone/existence/check
- /register/cellphone
- /captcha/verify
- /captcha/sent
- /login/refresh
- /logout
- /user/update
- /pl/count
- /playlist/update
- /playlist/desc/update
- /playlist/name/update
- /playlist/tags/update
- /event/forward
- /event/del
- /share/resource
- /send/text
- /send/playlist
- /playlist/create
- /playlist/tracks
- /daily_signin
- /fm_trash
### 欢迎提交PR

307767
config.json Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,19 @@
Metadata-Version: 2.1
Name: NeteaseCloudMusic
Version: 0.1.3
Summary: 网易云音乐API NeteaseCloudMusicApi项目的 Python SDK
Home-page: https://github.com/2061360308/NeteaseCloudMusic_PythonSDK
Author: 盧瞳
Author-email: 2061360308@qq.com
License: MIT
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Python: >=3.6.0
Description-Content-Type: text/markdown
License-File: LICENSE
网易云音乐API NeteaseCloudMusicApi项目的 Python SDK

View File

@ -0,0 +1,13 @@
LICENSE
MANIFEST.in
README.md
setup.py
NeteaseCloudMusic/__init__.py
NeteaseCloudMusic/config.json
NeteaseCloudMusic/help.py
NeteaseCloudMusic/main.py
NeteaseCloudMusic.egg-info/PKG-INFO
NeteaseCloudMusic.egg-info/SOURCES.txt
NeteaseCloudMusic.egg-info/dependency_links.txt
NeteaseCloudMusic.egg-info/requires.txt
NeteaseCloudMusic.egg-info/top_level.txt

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,2 @@
py_mini_racer
requests

View File

@ -0,0 +1 @@
NeteaseCloudMusic

File diff suppressed because one or more lines are too long

View File

@ -4,6 +4,10 @@ import pkg_resources
# 载入配置 # 载入配置
resource_path = pkg_resources.resource_filename(__name__, 'config.json') resource_path = pkg_resources.resource_filename(__name__, 'config.json')
# 不被支持的接口
exclude = ["/request/reference", "/avatar/upload", "/cloud", "/playlist/cover/update", "/voice/upload",
"/register/anonimous", "/verify/getQr"]
with open(resource_path, 'r', encoding='utf-8') as f: with open(resource_path, 'r', encoding='utf-8') as f:
config = json.loads(f.read()) config = json.loads(f.read())
@ -39,4 +43,4 @@ def api_list():
获取接口列表 获取接口列表
:return: :return:
""" """
return list(config.keys()) return [item for item in list(config.keys()) if item not in exclude]

View File

@ -1,6 +1,6 @@
Metadata-Version: 2.1 Metadata-Version: 2.1
Name: NeteaseCloudMusicApi Name: NeteaseCloudMusicApi
Version: 0.1.1 Version: 0.1.2
Summary: 网易云音乐API NeteaseCloudMusicApi项目的 Python SDK Summary: 网易云音乐API NeteaseCloudMusicApi项目的 Python SDK
Home-page: https://github.com/me/myproject Home-page: https://github.com/me/myproject
Author: Awesome Soul Author: Awesome Soul

File diff suppressed because one or more lines are too long

View File

@ -4,6 +4,10 @@ import pkg_resources
# 载入配置 # 载入配置
resource_path = pkg_resources.resource_filename(__name__, 'config.json') resource_path = pkg_resources.resource_filename(__name__, 'config.json')
# 不被支持的接口
exclude = ["/request/reference", "/avatar/upload", "/cloud", "/playlist/cover/update", "/voice/upload",
"/register/anonimous", "/verify/getQr"]
with open(resource_path, 'r', encoding='utf-8') as f: with open(resource_path, 'r', encoding='utf-8') as f:
config = json.loads(f.read()) config = json.loads(f.read())
@ -39,4 +43,4 @@ def api_list():
获取接口列表 获取接口列表
:return: :return:
""" """
return list(config.keys()) return [item for item in list(config.keys()) if item not in exclude]

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -5,6 +5,7 @@
# $ pipenv install twine --dev # $ pipenv install twine --dev
import io import io
import json
import os import os
import sys import sys
from shutil import rmtree from shutil import rmtree
@ -12,13 +13,13 @@ from shutil import rmtree
from setuptools import find_packages, setup, Command from setuptools import find_packages, setup, Command
# Package meta-data. # Package meta-data.
NAME = 'NeteaseCloudMusicApi' NAME = 'NeteaseCloudMusic'
DESCRIPTION = '网易云音乐API NeteaseCloudMusicApi项目的 Python SDK' DESCRIPTION = '网易云音乐API NeteaseCloudMusicApi项目的 Python SDK'
URL = 'https://github.com/me/myproject' URL = 'https://github.com/2061360308/NeteaseCloudMusic_PythonSDK'
EMAIL = 'me@example.com' EMAIL = '2061360308@qq.com'
AUTHOR = 'Awesome Soul' AUTHOR = '盧瞳'
REQUIRES_PYTHON = '>=3.6.0' REQUIRES_PYTHON = '>=3.6.0'
VERSION = '0.1.1' VERSION = '0.1.3'
# What packages are required for this module to be executed? # What packages are required for this module to be executed?
REQUIRED = [ REQUIRED = [
@ -41,13 +42,26 @@ here = os.path.abspath(os.path.dirname(__file__))
# Import the README and use it as the long-description. # Import the README and use it as the long-description.
# Note: this will only work if 'README.md' is present in your MANIFEST.in file! # Note: this will only work if 'README.md' is present in your MANIFEST.in file!
try: try:
with io.open(os.path.join(here, 'README.md'), encoding='utf-8') as f: with io.open(os.path.join(here, '../README.md'), encoding='utf-8') as f:
long_description = '\n' + f.read() long_description = '\n' + f.read()
except FileNotFoundError: except FileNotFoundError:
long_description = DESCRIPTION long_description = DESCRIPTION
# print("long_description:", long_description) # print("long_description:", long_description)
print("copy config.json start")
with open(os.path.join(here, '../config.json'), 'r', encoding='utf-8') as f:
config = json.loads(f.read())
for key in config:
for example in config[key]['example']:
if 'result' in example:
del example['result']
with open(os.path.join(here, 'NeteaseCloudMusic/config.json'), 'w+', encoding='utf-8') as f:
f.write(json.dumps(config, indent=2, ensure_ascii=False))
print("copy config.json end")
# Load the package's __version__.py module as a dictionary. # Load the package's __version__.py module as a dictionary.
about = {} about = {}
if not VERSION: if not VERSION:

23
test.py
View File

@ -5,7 +5,9 @@ import os
from pprint import pprint from pprint import pprint
import dotenv import dotenv
from NeteaseCloudMusic import NeteaseCloudMusicApi, api_help, api_list from package.NeteaseCloudMusic import NeteaseCloudMusicApi, api_help, api_list
# from NeteaseCloudMusic import NeteaseCloudMusicApi, api_help, api_list
dotenv.load_dotenv() # 从.env文件中加载环境变量 dotenv.load_dotenv() # 从.env文件中加载环境变量
@ -14,7 +16,7 @@ netease_cloud_music_api.cookie = os.getenv("COOKIE") # 设置cookie
netease_cloud_music_api.DEBUG = True # 开启调试模式 netease_cloud_music_api.DEBUG = True # 开启调试模式
def songv1_test(): def song_url_v1_test():
# 获取歌曲详情 # 获取歌曲详情
response = netease_cloud_music_api.request("song_url_v1", {"id": 33894312, "level": "exhigh"}) response = netease_cloud_music_api.request("song_url_v1", {"id": 33894312, "level": "exhigh"})
pprint(response) pprint(response)
@ -83,11 +85,22 @@ def login_cellphone_test():
# pprint(response) # pprint(response)
def personalized_djprogram_test():
response = netease_cloud_music_api.request("personalized_djprogram")
pprint(response)
def top_mv_test():
response = netease_cloud_music_api.request("top_mv", {'limit': 6})
pprint(response)
if __name__ == '__main__': if __name__ == '__main__':
pass pass
print(api_list()) # print(api_list())
print(api_help()) # print(api_help())
# songv1_test() # song_url_v1_test()
top_mv_test()
# search_test() # search_test()
# search_default_test() # search_default_test()
# user_account_test() # user_account_test()

View File

@ -18,8 +18,40 @@ def pathToName(path):
tests = "" tests = ""
exclude = ["apicache.js", "memory-cache.js", "request_reference.js", "avatar_upload.js", "cloud.js", # 不被支持的接口
"playlist_cover_update.js", "voice_upload.js", "register_anonimous.js", "verify_getQr.js"] exclude = ["/request/reference", "/avatar/upload", "/cloud", "/playlist/cover/update", "/voice/upload",
"/register/anonimous", "/verify/getQr"]
# 忽略一些接口的测试
ignore = ['/login/cellphone',
'/user/replacephone',
'/audio/match',
'/rebind',
'/nickname/check',
'/activate/init/profile',
'/cellphone/existence/check',
'/register/cellphone',
'/captcha/verify',
'/captcha/sent',
'/login/refresh',
'/logout',
'/user/update',
'/avatar/upload',
'/pl/count',
'/playlist/update',
'/playlist/desc/update',
'/playlist/name/update',
'/playlist/tags/update',
'/playlist/cover/update',
'/event/forward',
'/event/del',
'/share/resource',
'/send/text',
'/send/playlist',
'/playlist/create',
'/playlist/tracks',
'/daily_signin',
'/fm_trash']
for apiPath, value in config.items(): for apiPath, value in config.items():
apiName = pathToName(apiPath) apiName = pathToName(apiPath)
@ -27,6 +59,9 @@ for apiPath, value in config.items():
if (apiName + ".js") in exclude: if (apiName + ".js") in exclude:
continue continue
if apiPath in ignore:
continue
apiExplain = value["explain"] apiExplain = value["explain"]
apiExample = [] apiExample = []

12
临时文件.py Normal file
View File

@ -0,0 +1,12 @@
from pprint import pprint
others = {
}
ignore = []
for i in others.keys():
ignore.append(i)
pprint(ignore)