File: __init__.py

package info (click to toggle)
python-xbox-webapi 2.1.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,916 kB
  • sloc: python: 4,973; makefile: 79
file content (140 lines) | stat: -rw-r--r-- 4,709 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
"""
Achievements

Get Xbox 360 and Xbox One Achievement data
"""
from xbox.webapi.api.provider.achievements.models import (
    Achievement360ProgressResponse,
    Achievement360Response,
    AchievementResponse,
    RecentProgressResponse,
)
from xbox.webapi.api.provider.baseprovider import BaseProvider


class AchievementsProvider(BaseProvider):
    ACHIEVEMENTS_URL = "https://achievements.xboxlive.com"
    HEADERS_GAME_360_PROGRESS = {"x-xbl-contract-version": "1"}
    HEADERS_GAME_PROGRESS = {"x-xbl-contract-version": "2"}

    async def get_achievements_detail_item(
        self, xuid, service_config_id, achievement_id, **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, **kwargs
        )
        resp.raise_for_status()
        return AchievementResponse(**resp.json())

    async def get_achievements_xbox360_all(
        self, xuid, title_id, **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, **kwargs
        )
        resp.raise_for_status()
        return Achievement360Response(**resp.json())

    async def get_achievements_xbox360_earned(
        self, xuid, title_id, **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, **kwargs
        )
        resp.raise_for_status()
        return Achievement360Response(**resp.json())

    async def get_achievements_xbox360_recent_progress_and_info(
        self, xuid, **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, **kwargs
        )
        resp.raise_for_status()
        return Achievement360ProgressResponse(**resp.json())

    async def get_achievements_xboxone_gameprogress(
        self, xuid, title_id, **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, **kwargs
        )
        resp.raise_for_status()
        return AchievementResponse(**resp.json())

    async def get_achievements_xboxone_recent_progress_and_info(
        self, xuid, **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, **kwargs
        )
        resp.raise_for_status()
        return RecentProgressResponse(**resp.json())