示例#1
0
    def search(self, search_type, query, page=None, key=None, value=None):
        """
        Searches for a query on MyAnimeList

        Keyword Arguments:
        search_type -- where to search (anime, manga, person, character)
        query -- query to search for
        page -- page number of the results (default None)
        key -- key for ?key=value URL query (default None)
        value -- value for ?key=value URL query (default None)
        """
        url = self.search_base.format(search_type=search_type, query=query)
        # Check if page and query are valid
        if page is not None:
            if not isinstance(page, int):
                raise ClientException('The parameter \'page\' must be an integer')
            url += '/' + page
        if key is not None:
            if value is None:
                raise ClientException('You need to pass a value with the key')
            values = SEARCH_PARAMS.get(key, d=None)
            if values is None:
                raise ClientException('The key is not valid')
            elif isinstance(values, list) and value not in values:
                raise ClientException('The value is not valid')
            url += '?' + key + '=' + value
        # Get information from the API
        response = session.get(url)
        # Check if there's an error with the response
        kwargs = {'search type': search_type, 'query': query}
        self._check_response(response, **kwargs)
        return response.json()
示例#2
0
    def top(self, type, page=None, subtype=None):
        """
        Gets top items on MyAnimeList

        Keyword Arguments:
        type -- type to get top items from (anime, manga)
        page -- page number of the results (default None)
        subtype -- subtype to get filtered top items, possible values in docs
        """
        url = self.top_base.format(type=type.lower())
        # Check if type is valid
        if type.lower() not in SUBTYPES:
            raise ClientException('Type must be anime or manga')
        # Check if page is valid
        if page is not None:
            if not isinstance(page, int):
                raise ClientException('The parameter \'page\' must be an integer')
            url += '/' + page
        # Check if subtype is valid
        if subtype is not None:
            if subtype.lower() not in SUBTYPES[type.lower()]:
                raise ClientException('Subtype is not valid for ' + type)
            url += '/' + subtype.lower()
        # Get information from the API
        response = session.get(url)
        # Check if there's an error with the response
        self._check_response(response, type=type)
        return response.json()
示例#3
0
 def genre(self,
           type: str,
           genre_id: int,
           page: Optional[int] = None) -> Dict:
     url: str = self._get_genre_url(type, genre_id, page)
     response: Any = session.get(url)
     self._check_response(response, id=genre_id, type=type)
     return response.json()
示例#4
0
 def top(self,
         type: str,
         page: Optional[int] = None,
         subtype: Optional[str] = None) -> Dict:
     url: str = self._get_top_url(type, page, subtype)
     response: Any = session.get(url)
     self._check_response(response, type=type)
     return response.json()
示例#5
0
 def _get_creator(self,
                  creator_type: str,
                  creator_id: int,
                  page: Optional[int] = None) -> Dict:
     url: str = self._get_creator_url(creator_type, creator_id, page)
     response: Any = session.get(url)
     self._check_response(response, id=creator_id, endpoint=creator_type)
     return response.json()
示例#6
0
 def meta(self, request, type, period):
     url = self._get_meta_url(request, type, period)
     response = session.get(url)
     self._check_response(response,
                          request=request,
                          type=type,
                          period=period)
     return response.json()
示例#7
0
 def _get(
     self,
     endpoint: str,
     id: int,
     extension: Optional[str],
     page: Optional[int] = None,
 ) -> Dict:
     url: str = self._get_url(endpoint, id, extension, page)
     response: Any = session.get(url)
     self._check_response(response, id=id, endpoint=endpoint)
     return response.json()
示例#8
0
 def user(
     self,
     username: str,
     request: Optional[str] = None,
     argument: Optional[Union[int, str]] = None,
     page: Optional[int] = None,
     parameters: Optional[Mapping] = None,
 ) -> Dict:
     url: str = self._get_user_url(username, request, argument, page,
                                   parameters)
     response: Any = session.get(url)
     self._check_response(response, username=username, request=request)
     return response.json()
示例#9
0
 def search(
     self,
     search_type: str,
     query: str,
     page: Optional[int] = None,
     parameters: Optional[Mapping[str, Optional[Union[int, str,
                                                      float]]]] = None,
 ) -> Dict:
     url: str = self._get_search_url(search_type, query, page, parameters)
     response: Any = session.get(url)
     kwargs: Dict[str, str] = {"search type": search_type, "query": query}
     self._check_response(response, **kwargs)
     return response.json()
示例#10
0
 def meta(
     self,
     request: str,
     type: Optional[str] = None,
     period: Optional[str] = None,
     offset: Optional[int] = None,
 ) -> Dict:
     url: str = self._get_meta_url(request, type, period, offset)
     response: Any = session.get(url)
     self._check_response(response,
                          request=request,
                          type=type,
                          period=period)
     return response.json()
示例#11
0
    def _get(self, endpoint, id, extension):
        url = self.base.format(endpoint=endpoint, id=id)
        if extension is not None:
            if extension not in EXTENSIONS[endpoint]:
                raise ClientException
            url += '/' + extension

        response = session.get(url)
        if response.status_code >= 400:
            err_str = '{}: error for id {} on endpoint {}'.format(
                response.status_code, id, endpoint)
            raise APIException(err_str)

        return response.json()
示例#12
0
    def season(self, year, season):
        """
        Gets information on anime of the specific season

        Keyword Arguments:
        year -- year to get anime of
        season -- season to get anime of (winter, spring, summer, fall)
        """
        url = self.season_base.format(year=year, season=season.lower())
        # Check if year and season are valid
        if not (isinstance(year, int) and season.lower() in SEASONS):
            raise ClientException('Season or year is not valid')
        # Get information from the API
        response = session.get(url)
        # Check if there's an error with the response
        self._check_response(response, year=year, season=season)
        return response.json()
示例#13
0
    def schedule(self, day=None):
        """
        Gets anime scheduled for the specific day

        Keyword Arguments:
        day -- day to get anime of (default None)
        """
        url = self.schedule_base
        # Check if day is valid
        if day is not None:
            if day.lower() not in DAYS:
                raise ClientException('Day is not valid')
            else:
                url += '/' + day.lower()
        # Get information from the API
        response = session.get(url)
        # Check if there's an error with the response
        self._check_response(response, day=day)
        return response.json()
示例#14
0
    def meta(self, request, type, period):
        """
        Gets meta information regarding the Jikan REST API

        Keyword Arguments:
        request -- requests (requests, status)
        type -- type to get info on, possible values in docs
        period -- time period (today, weekly, monthly)
        """
        url = self.meta_base.format(request=request, type=type, period=period)
        # Check if request is valid
        if request not in META['request']:
            raise ClientException('Request must be \'requests\' or \'status\'')
        if type not in META['type']:
            raise ClientException('Type is not valid')
        if period not in META['period']:
            raise ClientException('Period must be \'today\', \'weekly\', or \'monthly\'')
        # Get information from the API
        response = session.get(url)
        # Check if there's an error with the response
        self._check_response(response, request=request, type=type, period=period)
        return response.json()
示例#15
0
    def _get(self, endpoint, id, extension, page=None):
        """
        Gets the response from Jikan API given the endpoint

        Keyword Arguments:
        endpoint -- endpoint of API (anime, manga, character, person)
        id -- id of what to get the information of
        extension -- special information to get, possible values in the docs
        page -- page number of the results (default None)
        """
        url = self.base.format(endpoint=endpoint, id=id)
        # Check if extension is valid
        if extension is not None:
            if extension not in EXTENSIONS[endpoint]:
                raise ClientException('The extension is not valid')
            url += '/' + extension
            if extension == 'episodes' and isinstance(page, int):
                url += '/' + page
        # Get information from the API
        response = session.get(url)
        # Check if there's an error with the response
        self._check_response(response, id=id, endpoint=endpoint)
        return response.json()
示例#16
0
 def _get(self, endpoint, id, extension, page=None):
     url = self._get_url(endpoint, id, extension, page)
     response = session.get(url)
     self._check_response(response, id=id, endpoint=endpoint)
     return response.json()
示例#17
0
 def user(self, username, request=None, argument=None, page=None):
     url = self._get_user_url(username, request, argument, page)
     response = session.get(url)
     self._check_response(response, username=username, request=request)
     return response.json()
示例#18
0
 def genre(self, type, genre_id, page=None):
     url = self._get_genre_url(type, genre_id, page)
     response = session.get(url)
     self._check_response(response, id=genre_id, type=type)
     return response.json()
示例#19
0
 def top(self, type, page=None, subtype=None):
     url = self._get_top_url(type, page, subtype)
     response = session.get(url)
     self._check_response(response, type=type)
     return response.json()
示例#20
0
 def schedule(self, day=None):
     url = self._get_schedule_url(day)
     response = session.get(url)
     self._check_response(response, day=day)
     return response.json()
示例#21
0
 def season_later(self):
     response = session.get(self.season_later_url)
     self._check_response(response)
     return response.json()
示例#22
0
 def season_archive(self):
     response = session.get(self.season_archive_url)
     self._check_response(response)
     return response.json()
示例#23
0
 def season(self, year, season):
     url = self._get_season_url(year, season)
     response = session.get(url)
     self._check_response(response, year=year, season=season)
     return response.json()
示例#24
0
 def search(self, search_type, query, page=None, parameters=None):
     url = self._get_search_url(search_type, query, page, parameters)
     response = session.get(url)
     kwargs = {'search type': search_type, 'query': query}
     self._check_response(response, **kwargs)
     return response.json()
示例#25
0
 def _get_creator(self, creator_type, creator_id, page=None):
     url = self._get_creator_url(creator_type, creator_id, page)
     response = session.get(url)
     self._check_response(response, id=creator_id, endpoint=creator_type)
     return response.json()
示例#26
0
 def season(self, year: int, season: str) -> Dict:
     url: str = self._get_season_url(year, season)
     response: Any = session.get(url)
     self._check_response(response, year=year, season=season)
     return response.json()
示例#27
0
 def schedule(self, day: Optional[str] = None) -> Dict:
     url: str = self._get_schedule_url(day)
     response: Any = session.get(url)
     self._check_response(response, day=day)
     return response.json()