mirror of
https://github.com/2061360308/NeteaseCloudMusic_PythonSDK.git
synced 2024-11-23 07:29:37 +00:00
fix:fix errors encountered during initial startup without cookies
This commit is contained in:
parent
2af84ab8ff
commit
40d96dcbe8
@ -17,13 +17,13 @@
|
||||
|
||||
### 使用
|
||||
- 安装 `pip install NeteaseCloudMusic`
|
||||
- 导入API进行使用(具体查看`test.py`中的示例)
|
||||
- 导入API进行使用(具体查看`example.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
|
||||
netease_cloud_music_api.cookie = "你的cookie" # 设置cookie, 如果没有cookie需要先登录 具体见example.py
|
||||
response = netease_cloud_music_api.request("song_url_v1", {"id": 33894312, "level": "exhigh"}) # 调用API
|
||||
|
||||
# 获取帮助
|
||||
|
10
config.json
10
config.json
@ -307763,5 +307763,15 @@
|
||||
"result": {}
|
||||
}
|
||||
]
|
||||
},
|
||||
"/login/status": {
|
||||
"name": "登录状态",
|
||||
"explain": "说明 : 调用此接口,可获取登录状态",
|
||||
"example": [
|
||||
{
|
||||
"query":{},
|
||||
"result": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
110
example.py
Normal file
110
example.py
Normal file
@ -0,0 +1,110 @@
|
||||
"""
|
||||
description: 网易云音乐API使用示例,这个示例引导你进行登录操作,然后下载一首歌曲
|
||||
author: LuTong
|
||||
date: 2020-10-07 10:00
|
||||
"""
|
||||
from pprint import pprint
|
||||
|
||||
import requests
|
||||
|
||||
from package.NeteaseCloudMusic import NeteaseCloudMusicApi, api_help, api_list
|
||||
|
||||
netease_cloud_music_api = NeteaseCloudMusicApi() # 初始化API
|
||||
|
||||
|
||||
def captcha_sent(_phone):
|
||||
response = netease_cloud_music_api.request("/captcha/sent", {"phone": f"{_phone}"})
|
||||
return response
|
||||
|
||||
|
||||
def login_cellphone(_phone, _captcha):
|
||||
response = netease_cloud_music_api.request("/login/cellphone", {"phone": f"{_phone}", "captcha": f"{_captcha}"})
|
||||
return response
|
||||
|
||||
|
||||
def song_url_v1(song_id):
|
||||
# 获取歌曲mp3地址
|
||||
response = netease_cloud_music_api.request("song_url_v1", {"id": song_id, "level": "exhigh"})
|
||||
return response
|
||||
|
||||
|
||||
def song_detail(song_id):
|
||||
# 获取歌曲详情
|
||||
response = netease_cloud_music_api.request("song_detail", {"ids": str(song_id)})
|
||||
# 这里记得传一个字符串,其实所有参数都传字符串就行,需要数字的话内部会自己转换的,但是它默认你传入的时候是字符串,所以你传数字他不会自动转字符串,
|
||||
# 这时如果遇到操作字符串的方法就会报错,所以最好都传字符串,避免出现意外
|
||||
return response
|
||||
|
||||
|
||||
def login_status():
|
||||
response = netease_cloud_music_api.request("/login/status")
|
||||
return response
|
||||
|
||||
|
||||
# 登录
|
||||
if not netease_cloud_music_api.cookie:
|
||||
print("请设置cookie")
|
||||
phone = input("请输入手机号:")
|
||||
result = captcha_sent(phone)
|
||||
print(result)
|
||||
if result.get("code") == 200:
|
||||
print("验证码已发送,请查收")
|
||||
captcha = input("请输入验证码:")
|
||||
result = login_cellphone(phone, captcha)
|
||||
if result.get("code") == 200:
|
||||
print("登录成功")
|
||||
if netease_cloud_music_api.cookie:
|
||||
print("cookie已自动设置")
|
||||
else:
|
||||
print("登录失败")
|
||||
"""
|
||||
调用登录接口后,会自动设置cookie,如果cookie失效,需要重新登录,登录过后api会在你的当前工作目录下创建cookie_storage文件保存你的cookie
|
||||
在下次调用运行程序时,他会判断cookie是否过期,没有过期就自动读取cookie_storage文件中的cookie。
|
||||
|
||||
总的来说你不需要手动管理cookie,只需要调用登录接口,然后调用其他接口即可,cookie会自动设置,如果cookie过期,再次调用登录接口就好。
|
||||
更好的办法是,在cookie还没有失效之前使用refresh_login接口刷新cookie,这样就不需要重新登录了(建议在你每次启动软件时都刷新,当然频繁重启调试的时候另算)
|
||||
|
||||
如果你想判断当前是否已经登录,if not netease_cloud_music_api.cookie 就可以了,或者调用/login/status接口
|
||||
"""
|
||||
|
||||
# 获取登录状态
|
||||
login_status_result = login_status()
|
||||
# pprint(login_status_result)
|
||||
if login_status_result['data']['data']["code"] == 200:
|
||||
print(f'当前登录账号:{login_status_result["data"]["data"]["profile"]["nickname"]}')
|
||||
|
||||
version_result = netease_cloud_music_api.request("inner_version")
|
||||
print(
|
||||
f'当前使用NeteaseCloudMusicApi版本号:{version_result["NeteaseCloudMusicApi"]}\n当前使用NeteaseCloudMusicApi_V8版本号:{version_result["NeteaseCloudMusicApi_V8"]}') # 退出登录
|
||||
|
||||
# 获取歌曲mp3地址
|
||||
song_url_result = song_url_v1(33894312)
|
||||
if song_url_result.get("code") == 200:
|
||||
song_url = song_url_result['data']["data"][0]['url']
|
||||
else:
|
||||
print("获取歌曲mp3地址失败")
|
||||
exit(1)
|
||||
# 获取歌曲详情
|
||||
song_detail_result = song_detail(33894312)
|
||||
if song_detail_result.get("code") == 200:
|
||||
song_name = song_detail_result['data']['songs'][0]['name']
|
||||
song_artist = song_detail_result['data']['songs'][0]['ar'][0]['name']
|
||||
else:
|
||||
print("获取歌曲详情失败")
|
||||
exit(1)
|
||||
# 下载歌曲mp3
|
||||
print(f"正在下载歌曲:{song_name} - {song_artist}")
|
||||
result = requests.get(song_url)
|
||||
with open(f"{song_name} - {song_artist}.mp3", "wb") as f:
|
||||
f.write(result.content)
|
||||
print("下载完成")
|
||||
|
||||
"""
|
||||
示例程序结束,如果你运行成功了,那么你的执行目录下应该有一个cookie_storage文件,里面保存了你的cookie,还有一个mp3文件,就是你下载的歌曲
|
||||
有关其他API的使用方法请参考:https://docs.neteasecloudmusicapi.binaryify.com/
|
||||
|
||||
再次注明一下,我之前也想过要不要将登录状态管理和cookie刷新等等封装到NeteaseCloudMusicApi类中,
|
||||
但最后我想的是,这毕竟这是一个api接口类,就让他保持最原始简洁的状态就好,其他的留给大家去自由发挥吧!
|
||||
|
||||
友情提示:单个账户每天发送验证码的次数有限制,千万别一直调试登录接口。
|
||||
"""
|
@ -1,6 +1,6 @@
|
||||
Metadata-Version: 2.1
|
||||
Name: NeteaseCloudMusic
|
||||
Version: 0.1.3
|
||||
Version: 0.1.4
|
||||
Summary: 网易云音乐API NeteaseCloudMusicApi项目的 Python SDK
|
||||
Home-page: https://github.com/2061360308/NeteaseCloudMusic_PythonSDK
|
||||
Author: 盧瞳
|
||||
@ -16,4 +16,94 @@ Requires-Python: >=3.6.0
|
||||
Description-Content-Type: text/markdown
|
||||
License-File: LICENSE
|
||||
|
||||
网易云音乐API NeteaseCloudMusicApi项目的 Python SDK
|
||||
|
||||
# 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`两种写法。
|
||||
|
||||
|
||||
### 开发
|
||||
- 克隆项目 `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
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -3057,5 +3057,14 @@
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"/login/status": {
|
||||
"name": "登录状态",
|
||||
"explain": "说明 : 调用此接口,可获取登录状态",
|
||||
"example": [
|
||||
{
|
||||
"query":{}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -2,6 +2,8 @@ import json
|
||||
import os.path
|
||||
import socket
|
||||
from pprint import pprint
|
||||
import http.cookies
|
||||
import datetime
|
||||
|
||||
import pkg_resources
|
||||
import requests
|
||||
@ -17,6 +19,7 @@ class NeteaseCloudMusicApi:
|
||||
self.DEBUG = debug # 是否开启调试模式
|
||||
|
||||
self.special_api = {"/playlist/track/all": self.playlist_track_all,
|
||||
"/login/cellphone": self.login_cellphone,
|
||||
"/inner/version": self.inner_version}
|
||||
|
||||
# 载入js代码
|
||||
@ -57,7 +60,7 @@ class NeteaseCloudMusicApi:
|
||||
# 处理俩个云贝接口名称转换问题
|
||||
if name in yubei_special.keys():
|
||||
name = yubei_special[name]
|
||||
print("转换了个麻烦的路由", name)
|
||||
# print("转换了个麻烦的路由", name)
|
||||
|
||||
if name not in api_list():
|
||||
if name not in yubei_special.values():
|
||||
@ -79,6 +82,8 @@ class NeteaseCloudMusicApi:
|
||||
else:
|
||||
result = self.call_api(name, query)
|
||||
|
||||
#
|
||||
|
||||
return result
|
||||
|
||||
@staticmethod
|
||||
@ -100,7 +105,7 @@ class NeteaseCloudMusicApi:
|
||||
if self.__cookie is None:
|
||||
if os.path.isfile("cookie_storage"):
|
||||
with open("cookie_storage", "r", encoding='utf-8') as f:
|
||||
self.__cookie = f.read()
|
||||
self.cookie = f.read()
|
||||
else:
|
||||
self.__cookie = "" # 如果没有cookie文件,就设置为空
|
||||
|
||||
@ -110,9 +115,36 @@ class NeteaseCloudMusicApi:
|
||||
def cookie(self, cookie):
|
||||
if cookie is None:
|
||||
cookie = ""
|
||||
self.__cookie = cookie
|
||||
|
||||
_cookie = cookie
|
||||
|
||||
'''判断cookie是否过期'''
|
||||
|
||||
# 创建一个Morsel对象,它可以解析cookie字符串
|
||||
morsel = http.cookies.SimpleCookie(cookie)
|
||||
# 获取当前时间
|
||||
now = datetime.datetime.now()
|
||||
|
||||
# 只判断 __csrf 是否过期
|
||||
if not morsel.get('__csrf'):
|
||||
# __csrf 不存在,不是有效cookie
|
||||
_cookie = ""
|
||||
else:
|
||||
# 将过期时间字符串转换为datetime对象
|
||||
expires = morsel.get('__csrf')['expires']
|
||||
expires_datetime = datetime.datetime.strptime(expires, "%a, %d %b %Y %H:%M:%S GMT")
|
||||
|
||||
# 判断cookie是否过期
|
||||
if now > expires_datetime:
|
||||
# 过期了
|
||||
_cookie = ""
|
||||
else:
|
||||
# 未过期
|
||||
pass
|
||||
|
||||
self.__cookie = _cookie
|
||||
with open("cookie_storage", "w+", encoding='utf-8') as f:
|
||||
f.write(cookie)
|
||||
f.write(_cookie)
|
||||
|
||||
@property
|
||||
def ip(self):
|
||||
@ -147,6 +179,12 @@ class NeteaseCloudMusicApi:
|
||||
"status": response.status_code,
|
||||
}
|
||||
|
||||
# print("headers", response.headers)
|
||||
# print("headers_dict", dict(response.headers))
|
||||
|
||||
# with open("response_result.json", "w+", encoding='utf-8') as f:
|
||||
# f.write(json.dumps(response_result, indent=2, ensure_ascii=False))
|
||||
|
||||
result = self.ctx.call('NeteaseCloudMusicApi.afterRequest',
|
||||
json.dumps(response_result),
|
||||
request_param.get('crypto', None),
|
||||
@ -184,24 +222,16 @@ class NeteaseCloudMusicApi:
|
||||
result = self.ctx.call('NeteaseCloudMusicApi.inner_version')
|
||||
return result
|
||||
|
||||
def login_cellphone(self, query):
|
||||
"""
|
||||
手机号登录
|
||||
:param query:
|
||||
:return:
|
||||
"""
|
||||
result = self.call_api("/login/cellphone", query)
|
||||
|
||||
if __name__ == '__main__':
|
||||
import json
|
||||
import os
|
||||
from pprint import pprint
|
||||
import dotenv
|
||||
|
||||
dotenv.load_dotenv("../../.env") # 从.env文件中加载环境变量
|
||||
|
||||
netease_cloud_music_api = NeteaseCloudMusicApi() # 初始化API
|
||||
netease_cloud_music_api.cookie = os.getenv("COOKIE") # 设置cookie
|
||||
netease_cloud_music_api.DEBUG = True # 开启调试模式
|
||||
|
||||
|
||||
def songv1_test():
|
||||
# 获取歌曲详情
|
||||
response = netease_cloud_music_api.request("song_url_v1", {"id": 33894312, "level": "exhigh"})
|
||||
pprint(response)
|
||||
|
||||
|
||||
songv1_test()
|
||||
# 自动 填充cookie
|
||||
if result["code"] == 200:
|
||||
if result.get("data").get("cookie"):
|
||||
self.cookie = result.get("data").get("cookie")
|
||||
return result
|
||||
|
90
package/README.md
Normal file
90
package/README.md
Normal file
@ -0,0 +1,90 @@
|
||||
# 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`两种写法。
|
||||
|
||||
|
||||
### 开发
|
||||
- 克隆项目 `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
|
BIN
package/dist/NeteaseCloudMusic-0.1.3.tar.gz
vendored
BIN
package/dist/NeteaseCloudMusic-0.1.3.tar.gz
vendored
Binary file not shown.
Binary file not shown.
BIN
package/dist/NeteaseCloudMusic-0.1.4.tar.gz
vendored
Normal file
BIN
package/dist/NeteaseCloudMusic-0.1.4.tar.gz
vendored
Normal file
Binary file not shown.
16
test.py
16
test.py
@ -12,7 +12,7 @@ from package.NeteaseCloudMusic import NeteaseCloudMusicApi, api_help, api_list
|
||||
dotenv.load_dotenv() # 从.env文件中加载环境变量
|
||||
|
||||
netease_cloud_music_api = NeteaseCloudMusicApi() # 初始化API
|
||||
netease_cloud_music_api.cookie = os.getenv("COOKIE") # 设置cookie
|
||||
# netease_cloud_music_api.cookie = os.getenv("COOKIE") # 设置cookie
|
||||
netease_cloud_music_api.DEBUG = True # 开启调试模式
|
||||
|
||||
|
||||
@ -42,7 +42,6 @@ def user_account_test():
|
||||
|
||||
|
||||
def comment_new_test():
|
||||
# 获取用户账号信息
|
||||
response = netease_cloud_music_api.request("comment_new", {
|
||||
"type": "0",
|
||||
"id": "1407551413",
|
||||
@ -73,16 +72,13 @@ def top_playlist_highquality_test():
|
||||
|
||||
|
||||
def captcha_sent_test():
|
||||
response = netease_cloud_music_api.request("/captcha/sent", {"phone": "15234941791"})
|
||||
response = netease_cloud_music_api.request("/captcha/sent", {"phone": "15229954305"})
|
||||
pprint(response)
|
||||
|
||||
|
||||
def login_cellphone_test():
|
||||
# 注意这里需要调用login_cellphone方法,而不是api方法,具体实现可以看main.py
|
||||
# 有后续操作的api都需要自己实现一下
|
||||
pass
|
||||
# response = netease_cloud_music_api.login_cellphone("15234941791", "9464")
|
||||
# pprint(response)
|
||||
response = netease_cloud_music_api.request("/login/cellphone",{"phone": "15229954305", "captcha": "4273"})
|
||||
pprint(response)
|
||||
|
||||
|
||||
def personalized_djprogram_test():
|
||||
@ -100,7 +96,7 @@ if __name__ == '__main__':
|
||||
# print(api_list())
|
||||
# print(api_help())
|
||||
# song_url_v1_test()
|
||||
top_mv_test()
|
||||
# top_mv_test()
|
||||
# search_test()
|
||||
# search_default_test()
|
||||
# user_account_test()
|
||||
@ -109,4 +105,4 @@ if __name__ == '__main__':
|
||||
# playlist_detail_test()
|
||||
# top_playlist_highquality_test()
|
||||
# captcha_sent_test()
|
||||
# login_cellphone_test()
|
||||
login_cellphone_test()
|
||||
|
Loading…
Reference in New Issue
Block a user