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())
|