diff --git a/mopidy_ytmusic/__init__.py b/mopidy_ytmusic/__init__.py index 75b7e2a..8bb535c 100644 --- a/mopidy_ytmusic/__init__.py +++ b/mopidy_ytmusic/__init__.py @@ -21,6 +21,7 @@ def get_default_config(self): def get_config_schema(self): schema = super().get_config_schema() schema["auth_json"] = config.Path(optional=True) + schema["oauth_json"] = config.Path(optional=True) schema["auto_playlist_refresh"] = config.Integer( minimum=0, optional=True ) diff --git a/mopidy_ytmusic/backend.py b/mopidy_ytmusic/backend.py index 0da4e84..cab38c9 100644 --- a/mopidy_ytmusic/backend.py +++ b/mopidy_ytmusic/backend.py @@ -16,7 +16,7 @@ TITLE_TEXT, nav, ) -from ytmusicapi.ytmusic import YTMusic +from ytmusicapi import YTMusic from mopidy_ytmusic import logger @@ -36,6 +36,7 @@ def __init__(self, config, audio): self.audio = audio self.uri_schemes = ["ytmusic"] self.auth = False + self.oauth = False self._auto_playlist_refresh_rate = ( config["ytmusic"]["auto_playlist_refresh"] * 60 @@ -61,8 +62,14 @@ def __init__(self, config, audio): self._ytmusicapi_auth_json = config["ytmusic"]["auth_json"] self.auth = True - if self.auth: - self.api = YTMusic(self._ytmusicapi_auth_json) + if config["ytmusic"]["oauth_json"]: + self._ytmusicapi_oauth_json = config["ytmusic"]["oauth_json"] + self.oauth = True + + if self.auth and not self.oauth: + self.api = YTMusic(auth=self._ytmusicapi_auth_json) + elif self.oauth: + self.api = YTMusic(auth=self._ytmusicapi_oauth_json) else: self.api = YTMusic() @@ -103,6 +110,7 @@ def _refresh_youtube_player(self): def _get_youtube_player(self): # Refresh our js player URL so YDL can decode the signature correctly. try: + self.api.headers.pop('filepath', None) response = requests.get( "https://music.youtube.com", headers=self.api.headers, diff --git a/mopidy_ytmusic/command.py b/mopidy_ytmusic/command.py index 932e52e..e767cd5 100644 --- a/mopidy_ytmusic/command.py +++ b/mopidy_ytmusic/command.py @@ -17,27 +17,20 @@ class SetupCommand(commands.Command): help = "Generate auth.json" def run(self, args, config): - from ytmusicapi.ytmusic import YTMusic + from ytmusicapi.setup import setup_oauth filepath = input( "Enter the path where you want to save auth.json [default=current dir]: " ) if not filepath: filepath = os.getcwd() - path = Path(filepath + "/auth.json") + path = Path(filepath + "/oauth.json") print('Using "' + str(path) + '"') if path.exists(): print("File already exists!") return 1 - print( - "Open Youtube Music, open developer tools (F12), go to Network tab," - ) - print( - 'right click on a POST request and choose "Copy request headers".' - ) - print("Then paste (CTRL+SHIFT+V) them here and press CTRL+D.") try: - print(YTMusic.setup(filepath=str(path))) + setup_oauth(filepath=str(path)) except Exception: logger.exception("YTMusic setup failed") return 1 @@ -54,22 +47,29 @@ class ReSetupCommand(commands.Command): help = "Regenerate auth.json" def run(self, args, config): - from ytmusicapi.ytmusic import YTMusic + from ytmusicapi import YTMusic path = config["ytmusic"]["auth_json"] + usingOauth = False if not path: logger.error("auth_json path not defined in config") return 1 + if config["ytmusic"]["oauth_json"] is not None: + path = config["ytmusic"]["oauth_json"] + usingOauth = True print('Updating credentials in "' + str(path) + '"') - print( - "Open Youtube Music, open developer tools (F12), go to Network tab," - ) - print( - 'right click on a POST request and choose "Copy request headers".' - ) - print("Then paste (CTRL+SHIFT+V) them here and press CTRL+D.") + if not usingOauth: + print( + "Open Youtube Music, open developer tools (F12), go to Network tab," + ) + print( + 'right click on a POST request and choose "Copy request headers".' + ) + print("Then paste (CTRL+SHIFT+V) them here and press CTRL+D.") + else: + print("Updating via oauth, follow the instructions from ytmusicapi") try: - print(YTMusic.setup(filepath=str(path))) + print(YTMusic(auth=path)) except Exception: logger.exception("YTMusic setup failed") return 1 diff --git a/setup.py b/setup.py index f56bf4f..2c75924 100644 --- a/setup.py +++ b/setup.py @@ -7,8 +7,8 @@ install_requires = [ "Mopidy>=3,<4", - "pytube>=12.1.0,<13.0.0", - "ytmusicapi>=0.22.0,<0.30.0", + "pytube>=12.1.0", + "ytmusicapi>=0.22.0,<2.0.0", ] entry_points = {"mopidy.ext": ["ytmusic = mopidy_ytmusic:Extension"]}