Skip to content

Achievements provider

Achievements

Get Xbox 360 and Xbox One Achievement data

pythonxbox.api.provider.achievements.AchievementsProvider(client)

Bases: RateLimitedProvider

Source code in src/pythonxbox/api/provider/ratelimitedprovider.py
def __init__(self, client: "XboxLiveClient") -> None:
    """
    Initialize Baseclass

    Args:
        client (:class:`XboxLiveClient`): Instance of XboxLiveClient
    """
    super().__init__(client)

    # Check that RATE_LIMITS set defined in the child class
    if hasattr(self, "RATE_LIMITS"):
        # Note: we cannot check (type(self.RATE_LIMITS) == dict) as the type hints have already defined it as such
        if "burst" and "sustain" in self.RATE_LIMITS:
            # We have the required keys, attempt to parse.
            # (type-checking for the values is performed in __parse_rate_limit_key)
            self.__handle_rate_limit_setup()
        else:
            raise XboxException(
                "RATE_LIMITS object missing required keys 'burst', 'sustain'"
            )
    else:
        raise XboxException(
            "RateLimitedProvider as parent class but RATE_LIMITS not set!"
        )

ACHIEVEMENTS_URL = 'https://achievements.xboxlive.com' class-attribute instance-attribute

HEADERS_GAME_360_PROGRESS = {'x-xbl-contract-version': '1'} class-attribute instance-attribute

HEADERS_GAME_PROGRESS = {'x-xbl-contract-version': '2'} class-attribute instance-attribute

RATE_LIMITS = {'burst': 100, 'sustain': 300} class-attribute instance-attribute

get_achievements_detail_item(xuid, service_config_id, achievement_id, **kwargs) async

Get achievement detail for specific item

Parameters:

Name Type Description Default
xuid str

Xbox User Id

required
service_config_id str

Service Config Id

required
achievement_id str

Achievement Id

required

Returns:

Type Description
AchievementResponse

class:AchievementResponse: Achievement Response

Source code in src/pythonxbox/api/provider/achievements/__init__.py
async def get_achievements_detail_item(
    self, xuid: str, service_config_id: str, achievement_id: str, **kwargs
) -> AchievementResponse:
    """
    Get achievement detail for specific item

    Args:
        xuid (str): Xbox User Id
        service_config_id (str): Service Config Id
        achievement_id (str): Achievement Id

    Returns:
        :class:`AchievementResponse`: Achievement Response
    """
    url = f"{self.ACHIEVEMENTS_URL}/users/xuid({xuid})/achievements/{service_config_id}/{achievement_id}"
    resp = await self.client.session.get(
        url,
        headers=self.HEADERS_GAME_PROGRESS,
        rate_limits=self.rate_limit_read,
        **kwargs,
    )
    resp.raise_for_status()
    return AchievementResponse.model_validate_json(resp.text)

get_achievements_xbox360_all(xuid, title_id, **kwargs) async

Get all achievements for specific X360 title Id

Parameters:

Name Type Description Default
xuid str

Xbox User Id

required
title_id str

Xbox 360 Title Id

required

Returns:

Type Description
Achievement360Response

class:Achievement360Response: Achievement 360 Response

Source code in src/pythonxbox/api/provider/achievements/__init__.py
async def get_achievements_xbox360_all(
    self, xuid: str, title_id: str, **kwargs
) -> Achievement360Response:
    """
    Get all achievements for specific X360 title Id

    Args:
        xuid (str): Xbox User Id
        title_id (str): Xbox 360 Title Id

    Returns:
        :class:`Achievement360Response`: Achievement 360 Response
    """
    url = f"{self.ACHIEVEMENTS_URL}/users/xuid({xuid})/titleachievements?"
    params = {"titleId": title_id}
    resp = await self.client.session.get(
        url,
        params=params,
        headers=self.HEADERS_GAME_360_PROGRESS,
        rate_limits=self.rate_limit_read,
        **kwargs,
    )
    resp.raise_for_status()
    return Achievement360Response.model_validate_json(resp.text)

get_achievements_xbox360_earned(xuid, title_id, **kwargs) async

Get earned achievements for specific X360 title id

Parameters:

Name Type Description Default
xuid str

Xbox User Id

required
title_id str

Xbox 360 Title Id

required

Returns:

Type Description
Achievement360Response

class:Achievement360Response: Achievement 360 Response

Source code in src/pythonxbox/api/provider/achievements/__init__.py
async def get_achievements_xbox360_earned(
    self, xuid: str, title_id: str, **kwargs
) -> Achievement360Response:
    """
    Get earned achievements for specific X360 title id

    Args:
        xuid (str): Xbox User Id
        title_id (str): Xbox 360 Title Id

    Returns:
        :class:`Achievement360Response`: Achievement 360 Response
    """
    url = f"{self.ACHIEVEMENTS_URL}/users/xuid({xuid})/achievements?"
    params = {"titleId": title_id}
    resp = await self.client.session.get(
        url,
        params=params,
        headers=self.HEADERS_GAME_360_PROGRESS,
        rate_limits=self.rate_limit_read,
        **kwargs,
    )
    resp.raise_for_status()
    return Achievement360Response.model_validate_json(resp.text)

get_achievements_xbox360_recent_progress_and_info(xuid, **kwargs) async

Get recent achievement progress and information

Parameters:

Name Type Description Default
xuid str

Xbox User Id

required

Returns:

Type Description
Achievement360ProgressResponse

class:Achievement360Response: Achievement 360 Response

Source code in src/pythonxbox/api/provider/achievements/__init__.py
async def get_achievements_xbox360_recent_progress_and_info(
    self, xuid: str, **kwargs
) -> Achievement360ProgressResponse:
    """
    Get recent achievement progress and information

    Args:
        xuid (str): Xbox User Id

    Returns:
        :class:`Achievement360Response`: Achievement 360 Response
    """
    url = f"{self.ACHIEVEMENTS_URL}/users/xuid({xuid})/history/titles"
    resp = await self.client.session.get(
        url,
        headers=self.HEADERS_GAME_360_PROGRESS,
        rate_limits=self.rate_limit_read,
        **kwargs,
    )
    resp.raise_for_status()
    return Achievement360ProgressResponse.model_validate_json(resp.text)

get_achievements_xboxone_gameprogress(xuid, title_id, **kwargs) async

Get gameprogress for Xbox One title

Parameters:

Name Type Description Default
xuid str

Xbox User Id

required
title_id str

Xbox One Title Id

required

Returns:

Type Description
AchievementResponse

class:AchievementResponse: Achievement Response

Source code in src/pythonxbox/api/provider/achievements/__init__.py
async def get_achievements_xboxone_gameprogress(
    self, xuid: str, title_id: str, **kwargs
) -> AchievementResponse:
    """
    Get gameprogress for Xbox One title

    Args:
        xuid (str): Xbox User Id
        title_id (str): Xbox One Title Id

    Returns:
        :class:`AchievementResponse`: Achievement Response
    """
    url = f"{self.ACHIEVEMENTS_URL}/users/xuid({xuid})/achievements?"
    params = {"titleId": title_id}
    resp = await self.client.session.get(
        url,
        params=params,
        headers=self.HEADERS_GAME_PROGRESS,
        rate_limits=self.rate_limit_read,
        **kwargs,
    )
    resp.raise_for_status()
    return AchievementResponse.model_validate_json(resp.text)

get_achievements_xboxone_recent_progress_and_info(xuid, **kwargs) async

Get recent achievement progress and information

Parameters:

Name Type Description Default
xuid str

Xbox User Id

required

Returns:

Type Description
RecentProgressResponse

class:RecentProgressResponse: Recent Progress Response

Source code in src/pythonxbox/api/provider/achievements/__init__.py
async def get_achievements_xboxone_recent_progress_and_info(
    self, xuid: str, **kwargs
) -> RecentProgressResponse:
    """
    Get recent achievement progress and information

    Args:
        xuid (str): Xbox User Id

    Returns:
        :class:`RecentProgressResponse`: Recent Progress Response
    """
    url = f"{self.ACHIEVEMENTS_URL}/users/xuid({xuid})/history/titles"
    resp = await self.client.session.get(
        url,
        headers=self.HEADERS_GAME_PROGRESS,
        rate_limits=self.rate_limit_read,
        **kwargs,
    )
    resp.raise_for_status()
    return RecentProgressResponse.model_validate_json(resp.text)