qqmusic-api-python 0.2.2__py3-none-any.whl → 0.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- qqmusic_api/__init__.py +4 -8
- qqmusic_api/album.py +36 -70
- qqmusic_api/login.py +361 -342
- qqmusic_api/lyric.py +34 -34
- qqmusic_api/mv.py +57 -96
- qqmusic_api/search.py +57 -64
- qqmusic_api/singer.py +207 -153
- qqmusic_api/song.py +180 -248
- qqmusic_api/songlist.py +43 -52
- qqmusic_api/top.py +25 -43
- qqmusic_api/user.py +175 -246
- qqmusic_api/utils/common.py +0 -19
- qqmusic_api/utils/credential.py +5 -31
- qqmusic_api/utils/device.py +3 -2
- qqmusic_api/utils/network.py +386 -248
- qqmusic_api/utils/qimei.py +13 -5
- qqmusic_api/utils/session.py +45 -109
- {qqmusic_api_python-0.2.2.dist-info → qqmusic_api_python-0.3.0.dist-info}/METADATA +9 -2
- qqmusic_api_python-0.3.0.dist-info/RECORD +26 -0
- qqmusic_api/data/api/album.json +0 -22
- qqmusic_api/data/api/login.json +0 -196
- qqmusic_api/data/api/lyric.json +0 -25
- qqmusic_api/data/api/mv.json +0 -26
- qqmusic_api/data/api/search.json +0 -74
- qqmusic_api/data/api/singer.json +0 -48
- qqmusic_api/data/api/song.json +0 -118
- qqmusic_api/data/api/songlist.json +0 -17
- qqmusic_api/data/api/top.json +0 -20
- qqmusic_api/data/api/user.json +0 -171
- qqmusic_api/data/file_type.json +0 -58
- qqmusic_api/data/search_type.json +0 -11
- qqmusic_api/login_utils.py +0 -141
- qqmusic_api/utils/sync.py +0 -31
- qqmusic_api_python-0.2.2.dist-info/RECORD +0 -40
- {qqmusic_api_python-0.2.2.dist-info → qqmusic_api_python-0.3.0.dist-info}/WHEEL +0 -0
- {qqmusic_api_python-0.2.2.dist-info → qqmusic_api_python-0.3.0.dist-info}/licenses/LICENSE +0 -0
qqmusic_api/__init__.py
CHANGED
|
@@ -1,31 +1,27 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
|
|
3
|
-
from . import album, login,
|
|
3
|
+
from . import album, login, lyric, mv, search, singer, song, songlist, top, user
|
|
4
4
|
from .utils.credential import Credential
|
|
5
|
-
from .utils.session import
|
|
6
|
-
from .utils.sync import sync
|
|
5
|
+
from .utils.session import Session, get_session, set_session
|
|
7
6
|
|
|
8
|
-
__version__ = "0.
|
|
7
|
+
__version__ = "0.3.0"
|
|
9
8
|
|
|
10
9
|
logger = logging.getLogger("qqmusicapi")
|
|
11
10
|
|
|
12
11
|
|
|
13
12
|
__all__ = [
|
|
14
13
|
"Credential",
|
|
14
|
+
"Session",
|
|
15
15
|
"album",
|
|
16
|
-
"create_session",
|
|
17
16
|
"get_session",
|
|
18
17
|
"login",
|
|
19
|
-
"login_utils",
|
|
20
18
|
"lyric",
|
|
21
19
|
"mv",
|
|
22
20
|
"search",
|
|
23
21
|
"set_session",
|
|
24
|
-
"set_session_credential",
|
|
25
22
|
"singer",
|
|
26
23
|
"song",
|
|
27
24
|
"songlist",
|
|
28
|
-
"sync",
|
|
29
25
|
"top",
|
|
30
26
|
"user",
|
|
31
27
|
]
|
qqmusic_api/album.py
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
"""专辑相关 API"""
|
|
2
2
|
|
|
3
|
-
from typing import Literal
|
|
3
|
+
from typing import Any, Literal
|
|
4
4
|
|
|
5
|
-
from .utils.
|
|
6
|
-
from .utils.network import Api
|
|
5
|
+
from .utils.network import NO_PROCESSOR, api_request
|
|
7
6
|
|
|
8
|
-
API = get_api("album")
|
|
9
7
|
|
|
10
|
-
|
|
11
|
-
def get_album_cover(mid: str, size: Literal[150, 300, 500, 800] = 300) -> str:
|
|
8
|
+
def get_cover(mid: str, size: Literal[150, 300, 500, 800] = 300) -> str:
|
|
12
9
|
"""获取专辑封面链接
|
|
13
10
|
|
|
14
11
|
Args:
|
|
@@ -23,70 +20,39 @@ def get_album_cover(mid: str, size: Literal[150, 300, 500, 800] = 300) -> str:
|
|
|
23
20
|
return f"https://y.gtimg.cn/music/photo_new/T002R{size}x{size}M000{mid}.jpg"
|
|
24
21
|
|
|
25
22
|
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
@api_request("music.musichallAlbum.AlbumInfoServer", "GetAlbumDetail")
|
|
24
|
+
async def get_detail(value: str | int):
|
|
25
|
+
"""获取专辑详细信息
|
|
28
26
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
id: 专辑 id
|
|
27
|
+
Args:
|
|
28
|
+
value: 专辑 id 或 mid
|
|
32
29
|
"""
|
|
30
|
+
if isinstance(value, int):
|
|
31
|
+
return {"albumId": value}, NO_PROCESSOR
|
|
32
|
+
|
|
33
|
+
return {"albumMId": value}, NO_PROCESSOR
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@api_request("music.musichallAlbum.AlbumSongList", "GetAlbumSongList")
|
|
37
|
+
async def get_song(value: str | int, num: int = 10, page: int = 1):
|
|
38
|
+
"""获取专辑歌曲
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
value: 专辑 id 或 mid
|
|
42
|
+
num: 返回数量
|
|
43
|
+
page: 页码
|
|
44
|
+
"""
|
|
45
|
+
params: dict[str, Any] = {
|
|
46
|
+
"begin": num * (page - 1),
|
|
47
|
+
"num": num,
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
def _processor(data: dict[str, Any]) -> list[dict[str, Any]]:
|
|
51
|
+
return [song["songInfo"] for song in data["songList"]]
|
|
52
|
+
|
|
53
|
+
if isinstance(value, int):
|
|
54
|
+
params["albumId"] = value
|
|
55
|
+
else:
|
|
56
|
+
params["albumMid"] = value
|
|
33
57
|
|
|
34
|
-
|
|
35
|
-
self,
|
|
36
|
-
*,
|
|
37
|
-
mid: str | None = None,
|
|
38
|
-
id: int | None = None,
|
|
39
|
-
):
|
|
40
|
-
"""初始化专辑类
|
|
41
|
-
|
|
42
|
-
Note:
|
|
43
|
-
歌曲 mid 和 id,两者至少提供一个
|
|
44
|
-
|
|
45
|
-
Args:
|
|
46
|
-
mid: 专辑 mid
|
|
47
|
-
id: 专辑 id
|
|
48
|
-
"""
|
|
49
|
-
if mid is None and id is None:
|
|
50
|
-
raise ValueError("mid or id must be provided")
|
|
51
|
-
self.mid = mid or ""
|
|
52
|
-
self.id = id or 0
|
|
53
|
-
self._info: dict | None = None
|
|
54
|
-
|
|
55
|
-
async def get_mid(self) -> str:
|
|
56
|
-
"""获取专辑 mid
|
|
57
|
-
|
|
58
|
-
Returns:
|
|
59
|
-
专辑 mid
|
|
60
|
-
"""
|
|
61
|
-
if not self.mid:
|
|
62
|
-
self.mid = (await self.get_detail())["basicInfo"]["albumMid"]
|
|
63
|
-
return self.mid
|
|
64
|
-
|
|
65
|
-
async def get_id(self) -> int:
|
|
66
|
-
"""获取专辑 id
|
|
67
|
-
|
|
68
|
-
Returns:
|
|
69
|
-
专辑 id
|
|
70
|
-
"""
|
|
71
|
-
if not self.id:
|
|
72
|
-
self.id = (await self.get_detail())["basicInfo"]["albumID"]
|
|
73
|
-
return self.id
|
|
74
|
-
|
|
75
|
-
async def get_detail(self) -> dict:
|
|
76
|
-
"""获取专辑详细信息
|
|
77
|
-
|
|
78
|
-
Returns:
|
|
79
|
-
专辑详细信息
|
|
80
|
-
"""
|
|
81
|
-
if not self._info:
|
|
82
|
-
self._info = await Api(**API["detail"]).update_params(albumMid=self.mid, albumId=self.id).result
|
|
83
|
-
return self._info
|
|
84
|
-
|
|
85
|
-
async def get_song(self) -> list[dict]:
|
|
86
|
-
"""获取专辑歌曲
|
|
87
|
-
|
|
88
|
-
Returns:
|
|
89
|
-
歌曲列表
|
|
90
|
-
"""
|
|
91
|
-
result = await Api(**API["song"]).update_params(albumMid=self.mid, albumId=self.id, begin=0, num=0).result
|
|
92
|
-
return [song["songInfo"] for song in result["songList"]]
|
|
58
|
+
return params, _processor
|