feat: parsed script json
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
parent
f61b34dd40
commit
7b4eee858a
@ -9,6 +9,7 @@ if __name__ == "__main__":
|
|||||||
"s: #a Crystal F",
|
"s: #a Crystal F",
|
||||||
"10",
|
"10",
|
||||||
"1",
|
"1",
|
||||||
|
"3",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -256,8 +256,38 @@ class Genius(Page):
|
|||||||
|
|
||||||
return album
|
return album
|
||||||
|
|
||||||
|
def get_json_content_from_response(self, response, start: str, end: str) -> Optional[str]:
|
||||||
|
content = response.text
|
||||||
|
start_index = content.find(start)
|
||||||
|
if start_index < 0:
|
||||||
|
return None
|
||||||
|
start_index += len(start)
|
||||||
|
end_index = content.find(end, start_index)
|
||||||
|
if end_index < 0:
|
||||||
|
return None
|
||||||
|
return content[start_index:end_index]
|
||||||
|
|
||||||
def fetch_song(self, source: Source, stop_at_level: int = 1) -> Song:
|
def fetch_song(self, source: Source, stop_at_level: int = 1) -> Song:
|
||||||
song = Song()
|
song: Song = Song()
|
||||||
|
|
||||||
|
r = self.connection.get(source.url, name=source.url)
|
||||||
|
if r is None:
|
||||||
|
return song
|
||||||
|
|
||||||
|
# get the contents that are between `JSON.parse('` and `');`
|
||||||
|
content = self.get_json_content_from_response(r, start="window.__PRELOADED_STATE__ = JSON.parse('", end="');\n window.__APP_CONFIG__ = ")
|
||||||
|
if content is not None:
|
||||||
|
content = content.replace("\\\\", "\\").replace('\\"', '"').replace("\\'", "'")
|
||||||
|
data = json.loads(content)
|
||||||
|
|
||||||
|
dump_to_file("genius_song_script_json.json", content, is_json=True, exit_after_dump=False)
|
||||||
|
|
||||||
|
soup = self.get_soup_from_response(r)
|
||||||
|
for lyrics in soup.find_all("div", {"data-lyrics-container": "true"}):
|
||||||
|
lyrics_object = Lyrics(FormattedText(html=lyrics.prettify()))
|
||||||
|
song.lyrics_collection.append(lyrics_object)
|
||||||
|
|
||||||
|
song.source_collection.append(source)
|
||||||
return song
|
return song
|
||||||
|
|
||||||
def download_song_to_target(self, source: Source, target: Target, desc: str = None) -> DownloadResult:
|
def download_song_to_target(self, source: Source, target: Target, desc: str = None) -> DownloadResult:
|
||||||
|
Loading…
Reference in New Issue
Block a user