Skip to content

Titlehub provider

Titlehub - Get Title history and info

pythonxbox.api.provider.titlehub.TitlehubProvider(client)

Bases: BaseProvider

Initialize Baseclass, set 'Accept-Language' header from client instance

Parameters:

Name Type Description Default
client (

class:XboxLiveClient): Instance of client

required
Source code in src/pythonxbox/api/provider/titlehub/__init__.py
def __init__(self, client: "XboxLiveClient") -> None:
    """
    Initialize Baseclass, set 'Accept-Language' header from client instance

    Args:
        client (:class:`XboxLiveClient`): Instance of client
    """
    super().__init__(client)
    self._headers = {
        "x-xbl-contract-version": "2",
        "x-xbl-client-name": "XboxApp",
        "x-xbl-client-type": "UWA",
        "x-xbl-client-version": "39.39.22001.0",
        "Accept-Language": self.client.language.locale,
    }

TITLEHUB_URL = 'https://titlehub.xboxlive.com' class-attribute instance-attribute

SEPARATOR = ',' class-attribute instance-attribute

get_title_history(xuid, fields=None, max_items=5, **kwargs) async

Get recently played titles

Parameters:

Name Type Description Default
xuid str

Xuid

required
fields list[TitleFields] | None

List of titlefield

None
max_items int | None

Maximum items

5

Returns:

Type Description
TitleHubResponse

class:TitleHubResponse: Title Hub Response

Source code in src/pythonxbox/api/provider/titlehub/__init__.py
async def get_title_history(
    self,
    xuid: str,
    fields: list[TitleFields] | None = None,
    max_items: int | None = 5,
    **kwargs,
) -> TitleHubResponse:
    """
    Get recently played titles

    Args:
        xuid: Xuid
        fields: List of titlefield
        max_items: Maximum items

    Returns:
        :class:`TitleHubResponse`: Title Hub Response
    """
    if not fields:
        fields = [
            TitleFields.ACHIEVEMENT,
            TitleFields.IMAGE,
            TitleFields.SERVICE_CONFIG_ID,
        ]
    fields = self.SEPARATOR.join(fields)

    url = f"{self.TITLEHUB_URL}/users/xuid({xuid})/titles/titlehistory/decoration/{fields}"
    params = {"maxItems": max_items}
    resp = await self.client.session.get(
        url, params=params, headers=self._headers, **kwargs
    )
    resp.raise_for_status()
    return TitleHubResponse.model_validate_json(resp.text)

get_title_info(title_id, fields=None, **kwargs) async

Get info for specific title

Parameters:

Name Type Description Default
title_id str

Title Id

required
fields list[TitleFields] | None

List of title fields

None

Returns:

Type Description
TitleHubResponse

class:TitleHubResponse: Title Hub Response

Source code in src/pythonxbox/api/provider/titlehub/__init__.py
async def get_title_info(
    self, title_id: str, fields: list[TitleFields] | None = None, **kwargs
) -> TitleHubResponse:
    """
    Get info for specific title

    Args:
        title_id: Title Id
        fields: List of title fields

    Returns:
        :class:`TitleHubResponse`: Title Hub Response
    """
    return await self._get_title_info(f"titleid({title_id})", fields, **kwargs)

get_title_info_by_pfn(pfn, fields=None, **kwargs) async

Get info for specific title by PFN

Parameters:

Name Type Description Default
pfn str

Package family name

required
fields list[TitleFields] | None

List of title fields

None

Returns:

Type Description
TitleHubResponse

class:TitleHubResponse: Title Hub Response

Source code in src/pythonxbox/api/provider/titlehub/__init__.py
async def get_title_info_by_pfn(
    self, pfn: str, fields: list[TitleFields] | None = None, **kwargs
) -> TitleHubResponse:
    """
    Get info for specific title by PFN

    Args:
        pfn: Package family name
        fields: List of title fields

    Returns:
        :class:`TitleHubResponse`: Title Hub Response
    """
    return await self._get_title_info(f"pfn({pfn})", fields, **kwargs)

get_titles_batch(pfns, fields=None, **kwargs) async

Get Title info via PFN ids

Parameters:

Name Type Description Default
pfns list[str]

List of Package family names (e.g. 'Microsoft.XboxApp_8wekyb3d8bbwe')

required
fields list[TitleFields] | None

List of title fields

None

Returns:

Type Description
TitleHubResponse

class:TitleHubResponse: Title Hub Response

Source code in src/pythonxbox/api/provider/titlehub/__init__.py
async def get_titles_batch(
    self, pfns: list[str], fields: list[TitleFields] | None = None, **kwargs
) -> TitleHubResponse:
    """
    Get Title info via PFN ids

    Args:
        pfns: List of Package family names (e.g. 'Microsoft.XboxApp_8wekyb3d8bbwe')
        fields: List of title fields

    Returns:
        :class:`TitleHubResponse`: Title Hub Response
    """
    if not fields:
        fields = [
            TitleFields.ACHIEVEMENT,
            TitleFields.DETAIL,
            TitleFields.IMAGE,
            TitleFields.SERVICE_CONFIG_ID,
        ]
    fields = self.SEPARATOR.join(fields)

    url = self.TITLEHUB_URL + f"/titles/batch/decoration/{fields}"
    post_data = {"pfns": pfns, "windowsPhoneProductIds": []}
    resp = await self.client.session.post(
        url, json=post_data, headers=self._headers, **kwargs
    )
    resp.raise_for_status()
    return TitleHubResponse.model_validate_json(resp.text)