Skip to content

Commit 862d8d4

Browse files
Updated.
1 parent 6cf7f08 commit 862d8d4

33 files changed

Lines changed: 6231 additions & 0 deletions

core/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from core.control import run

core/api/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from core.api.aplm import AppleMusic

core/api/album.py

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
import m3u8
2+
from core import parse
3+
4+
from . import lyrics
5+
6+
def parse_data(data):
7+
media = {}
8+
media_list = []
9+
10+
attr = data["attributes"]
11+
12+
media["coverUrl"] = attr["artwork"]["url"].format(
13+
w=attr["artwork"].get("width"),
14+
h=attr["artwork"].get("height")
15+
)
16+
17+
if "editorialVideo" in attr:
18+
if "motionDetailSquare" in attr["editorialVideo"]:
19+
__data = m3u8.load(
20+
attr["editorialVideo"]["motionDetailSquare"].get("video")
21+
)
22+
23+
streamList = []
24+
25+
for i, variants in enumerate(__data.playlists):
26+
streamList.append(
27+
{
28+
"id": i,
29+
"fps": variants.stream_info.frame_rate,
30+
"codec": "AVC" if "avc" in variants.stream_info.codecs else "HEVC",
31+
"range": variants.stream_info.video_range,
32+
"bitrate": f'{round((variants.stream_info.average_bandwidth)/1000000, 2)} Mb/s',
33+
"resolution": f'{variants.stream_info.resolution[0]}x{variants.stream_info.resolution[1]}',
34+
"uri": variants.uri
35+
}
36+
)
37+
38+
media["animartwork"] = streamList
39+
40+
dirname = parse.sanitize(
41+
"{} - {} [{}]{}{}{}".format(
42+
attr.get("artistName"),
43+
attr.get("name"),
44+
data["id"],
45+
" [S]" if "Single" in attr.get("name") else "",
46+
" [EP]" if "EP" in attr.get("name") else "",
47+
" [E]" if attr.get("contentRating") == "explicit" else ""
48+
)
49+
)
50+
51+
media["dir"] = dirname.replace(' - Single', '').replace(' - EP', '')
52+
53+
a = {
54+
"copyright": attr.get("copyright"),
55+
"upc": attr.get("upc"),
56+
"recordlabel": attr.get("recordLabel"),
57+
"trackcount": attr.get("trackCount"),
58+
"album": attr.get("name"),
59+
"albumartist": attr.get("artistName")
60+
}
61+
62+
for item in data["relationships"]["tracks"]["data"]:
63+
attr = item.get("attributes")
64+
65+
filename = parse.sanitize(
66+
"{} - {}{}".format(
67+
str(attr.get("trackNumber")).zfill(2),
68+
attr.get("name"),
69+
" [E]" if attr.get("contentRating") == "explicit" else ""
70+
)
71+
)
72+
73+
s = {
74+
"id": item.get("id"),
75+
"genre": attr.get("genreNames"),
76+
"releasedate": attr.get("releaseDate"),
77+
"trackno": attr.get("trackNumber"),
78+
"isrc": attr.get("isrc"),
79+
"composer": attr.get("composerName"),
80+
"discno": attr.get("discNumber"),
81+
"song": attr.get("name"),
82+
"songartist": attr.get("artistName"),
83+
"rating": 4 if attr.get("contentRating") == "explicit" else 0,
84+
"file": filename
85+
}
86+
87+
rela = item.get("relationships")
88+
if not rela: rela = {}
89+
90+
if "credits" in rela:
91+
credits = rela["credits"].get("data")
92+
if credits:
93+
94+
roles = []
95+
creds = {}
96+
97+
for catagory in credits:
98+
for credit in catagory["relationships"]["credit-artists"]["data"]:
99+
for role in credit["attributes"]["roleNames"]:
100+
if not role in roles:
101+
roles.append(role)
102+
creds[role] = [credit["attributes"]["name"]]
103+
else:
104+
roleArtist: list = creds[role]
105+
roleArtist.append(credit["attributes"]["name"])
106+
creds[role] = roleArtist
107+
108+
s["credits"] = creds
109+
110+
if "lyrics" in rela:
111+
if rela["lyrics"].get("data"):
112+
if rela["lyrics"]["data"][0].get("attributes"):
113+
s.update(
114+
lyrics.parse(
115+
rela["lyrics"]["data"][0]["attributes"]["ttml"]
116+
)
117+
)
118+
119+
if item.get("type") == "songs":
120+
s["type"] = 1
121+
elif item.get("type") == "music-videos":
122+
s["type"] = 6
123+
124+
s.update(a)
125+
media_list.append(
126+
parse.opt(s)
127+
)
128+
129+
media["tracks"] = media_list
130+
return media

0 commit comments

Comments
 (0)