diff --git a/gamdl/cli.py b/gamdl/cli.py index 3ed374c..71c720d 100644 --- a/gamdl/cli.py +++ b/gamdl/cli.py @@ -609,13 +609,24 @@ def main( itunes_page = itunes_api.get_itunes_page( "music-video", music_video_id_alt ) - logger.debug("Getting webplayback") - webplayback = apple_music_api.get_webplayback(track_metadata["id"]) - stream_url_master = webplayback["hls-playlist-url"] + if music_video_id_alt == track_metadata["id"]: + stream_url = ( + downloader_music_video.get_stream_url_from_itunes_page( + itunes_page + ) + ) + else: + logger.debug("Getting webplayback") + webplayback = apple_music_api.get_webplayback( + track_metadata["id"] + ) + stream_url = ( + downloader_music_video.get_stream_url_from_webplayback( + webplayback + ) + ) logger.debug("Getting M3U8 data") - m3u8_master_data = downloader_music_video.get_m3u8_master_data( - stream_url_master - ) + m3u8_data = downloader_music_video.get_m3u8_master_data(stream_url) tags = downloader_music_video.get_tags( music_video_id_alt, itunes_page, @@ -643,12 +654,8 @@ def main( else: logger.debug("Getting stream info") stream_info_video, stream_info_audio = ( - downloader_music_video.get_stream_info_video( - m3u8_master_data - ), - downloader_music_video.get_stream_info_audio( - m3u8_master_data - ), + downloader_music_video.get_stream_info_video(m3u8_data), + downloader_music_video.get_stream_info_audio(m3u8_data), ) decryption_key_video = downloader.get_decryption_key( stream_info_video.pssh, track_metadata["id"] diff --git a/gamdl/downloader_music_video.py b/gamdl/downloader_music_video.py index 0375cf4..6c8862d 100644 --- a/gamdl/downloader_music_video.py +++ b/gamdl/downloader_music_video.py @@ -25,9 +25,18 @@ class DownloaderMusicVideo: self.downloader = downloader self.codec = codec - def get_stream_url_master(self, webplayback: dict) -> str: + def get_stream_url_from_webplayback(self, webplayback: dict) -> str: return webplayback["hls-playlist-url"] + def get_stream_url_from_itunes_page(self, itunes_page: dict) -> dict: + stream_url = itunes_page["offers"][0]["assets"][0]["hlsUrl"] + url_parts = urllib.parse.urlparse(stream_url) + query = urllib.parse.parse_qs(url_parts.query, keep_blank_values=True) + query.update({"aec": "HD", "dsid": "1"}) + return url_parts._replace( + query=urllib.parse.urlencode(query, doseq=True) + ).geturl() + def get_m3u8_master_data(self, stream_url_master: str) -> dict: return m3u8.load(stream_url_master).data