1.0.5 release
- Update version number - Refactor cookie check to raise error when no cookies are found (required)
This commit is contained in:
		
							parent
							
								
									b553865ff5
								
							
						
					
					
						commit
						61befd1a2a
					
				@ -25,7 +25,7 @@ class CR(Service):
 | 
				
			|||||||
    """
 | 
					    """
 | 
				
			||||||
    Service code for Crunchyroll
 | 
					    Service code for Crunchyroll
 | 
				
			||||||
    Author: TPD94
 | 
					    Author: TPD94
 | 
				
			||||||
    Version: 1.0.4
 | 
					    Version: 1.0.5
 | 
				
			||||||
    Authorization: Cookies for web endpoints, Credentials for TV endpoints, Cookies/Credentials for both. Cookies required.
 | 
					    Authorization: Cookies for web endpoints, Credentials for TV endpoints, Cookies/Credentials for both. Cookies required.
 | 
				
			||||||
    Security: FHD@L3
 | 
					    Security: FHD@L3
 | 
				
			||||||
    Use Series ID/URL (for example - https://www.crunchyroll.com/series/GG5H5XQ7D/kaiju-no-8) or Series ID (for example - GG5H5XQ7D).
 | 
					    Use Series ID/URL (for example - https://www.crunchyroll.com/series/GG5H5XQ7D/kaiju-no-8) or Series ID (for example - GG5H5XQ7D).
 | 
				
			||||||
@ -36,7 +36,7 @@ class CR(Service):
 | 
				
			|||||||
                   help="""
 | 
					                   help="""
 | 
				
			||||||
                       Service code for Crunchyroll\n
 | 
					                       Service code for Crunchyroll\n
 | 
				
			||||||
                       Author: TPD94\n
 | 
					                       Author: TPD94\n
 | 
				
			||||||
                       Version: 1.0.4\n
 | 
					                       Version: 1.0.5\n
 | 
				
			||||||
                       Authorization: Cookies for web endpoints, Credentials for TV endpoints, Cookies/Credentials for both. Cookies required.\n
 | 
					                       Authorization: Cookies for web endpoints, Credentials for TV endpoints, Cookies/Credentials for both. Cookies required.\n
 | 
				
			||||||
                       Security: FHD@L3\n
 | 
					                       Security: FHD@L3\n
 | 
				
			||||||
                       Use Series ID/URL (for example - https://www.crunchyroll.com/series/GG5H5XQ7D/kaiju-no-8) or Series ID (for example - GG5H5XQ7D).
 | 
					                       Use Series ID/URL (for example - https://www.crunchyroll.com/series/GG5H5XQ7D/kaiju-no-8) or Series ID (for example - GG5H5XQ7D).
 | 
				
			||||||
@ -84,6 +84,9 @@ class CR(Service):
 | 
				
			|||||||
        # Run the super method to load the cookies without writing redundant code
 | 
					        # Run the super method to load the cookies without writing redundant code
 | 
				
			||||||
        if not self.initial_login:
 | 
					        if not self.initial_login:
 | 
				
			||||||
            super().authenticate(cookies, credential)
 | 
					            super().authenticate(cookies, credential)
 | 
				
			||||||
 | 
					            # Raise error if no cookies, Crunchyroll has implemented recaptcha, so authorization via credentials is not implemented
 | 
				
			||||||
 | 
					            if not cookies and not self.initial_login:
 | 
				
			||||||
 | 
					                raise EnvironmentError("Service requires cookies for authentication.")
 | 
				
			||||||
            if cookies:
 | 
					            if cookies:
 | 
				
			||||||
                self.cookies = cookies
 | 
					                self.cookies = cookies
 | 
				
			||||||
            elif hasattr(self, 'cookies'):
 | 
					            elif hasattr(self, 'cookies'):
 | 
				
			||||||
@ -96,10 +99,6 @@ class CR(Service):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            self.initial_login = True
 | 
					            self.initial_login = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Raise error if no cookies, Crunchyroll has implemented recaptcha, so authorization via credentials is not implemented
 | 
					 | 
				
			||||||
        if not cookies and not self.initial_login:
 | 
					 | 
				
			||||||
            raise EnvironmentError("Service requires cookies for authentication.")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # If authenticate is being called for the first time and cookies are present, retrieve an authorization token
 | 
					        # If authenticate is being called for the first time and cookies are present, retrieve an authorization token
 | 
				
			||||||
        if cookies and self.auth_token_web is None:
 | 
					        if cookies and self.auth_token_web is None:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										59
									
								
								HMAX/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								HMAX/__init__.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,59 @@
 | 
				
			|||||||
 | 
					import base64
 | 
				
			||||||
 | 
					import hashlib
 | 
				
			||||||
 | 
					import json
 | 
				
			||||||
 | 
					import re
 | 
				
			||||||
 | 
					from codecs import Codec
 | 
				
			||||||
 | 
					from collections.abc import Generator
 | 
				
			||||||
 | 
					from datetime import datetime, timedelta
 | 
				
			||||||
 | 
					from http.cookiejar import CookieJar
 | 
				
			||||||
 | 
					from typing import Optional, Union
 | 
				
			||||||
 | 
					import click
 | 
				
			||||||
 | 
					from langcodes import Language
 | 
				
			||||||
 | 
					from unshackle.core.console import console
 | 
				
			||||||
 | 
					from unshackle.core.constants import AnyTrack
 | 
				
			||||||
 | 
					from unshackle.core.credential import Credential
 | 
				
			||||||
 | 
					from unshackle.core.manifests import DASH
 | 
				
			||||||
 | 
					from unshackle.core.search_result import SearchResult
 | 
				
			||||||
 | 
					from unshackle.core.service import Service
 | 
				
			||||||
 | 
					from unshackle.core.session import session
 | 
				
			||||||
 | 
					from unshackle.core.titles import Episode, Movie, Movies, Series, Title_T, Titles_T
 | 
				
			||||||
 | 
					from unshackle.core.tracks import Chapter, Subtitle, Tracks, Video, Chapters
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class HMAX(Service):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    Service code for HBO Max
 | 
				
			||||||
 | 
					    Author: TPD94
 | 
				
			||||||
 | 
					    Version: 1.0.0
 | 
				
			||||||
 | 
					    Authorization:
 | 
				
			||||||
 | 
					    Security:
 | 
				
			||||||
 | 
					    Use Series ID/URL (for example - ).
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @staticmethod
 | 
				
			||||||
 | 
					    @click.command(name="HMAX", short_help="https://hbomax.com/",
 | 
				
			||||||
 | 
					                   help="""
 | 
				
			||||||
 | 
					                       Service code for HBO Max\n
 | 
				
			||||||
 | 
					                       Author: TPD94\n
 | 
				
			||||||
 | 
					                       Version: 1.0.0\n
 | 
				
			||||||
 | 
					                       Authorization:\n
 | 
				
			||||||
 | 
					                       Security:\n
 | 
				
			||||||
 | 
					                       Use full URL (for example - ).
 | 
				
			||||||
 | 
					                       """
 | 
				
			||||||
 | 
					                   )
 | 
				
			||||||
 | 
					    @click.argument("title", type=str)
 | 
				
			||||||
 | 
					    @click.pass_context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def cli(ctx, **kwargs):
 | 
				
			||||||
 | 
					        return HMAX(ctx, **kwargs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __init__(self, ctx, title):
 | 
				
			||||||
 | 
					        super().__init__(ctx)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_session(self):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Create a session using curl_cffi as it can impersonate browsers and avoid bot detection by HBO Max
 | 
				
			||||||
 | 
					        return session("chrome124")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def authenticate(self, cookies: Optional[CookieJar] = None, credential: Optional[Credential] = None) -> None:
 | 
				
			||||||
 | 
					        super().authenticate(cookies, credential)
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user