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
|
"""
Profile
Get Userprofiles by XUID or Gamertag
"""
from typing import List
from xbox.webapi.api.provider.baseprovider import BaseProvider
from xbox.webapi.api.provider.profile.models import ProfileResponse, ProfileSettings
class ProfileProvider(BaseProvider):
PROFILE_URL = "https://profile.xboxlive.com"
HEADERS_PROFILE = {"x-xbl-contract-version": "3"}
SEPARATOR = ","
async def get_profiles(self, xuid_list: List[str], **kwargs) -> ProfileResponse:
"""
Get profile info for list of xuids
Args:
xuid_list (list): List of xuids
Returns:
:class:`ProfileResponse`: Profile Response
"""
post_data = {
"settings": [
ProfileSettings.GAME_DISPLAY_NAME,
ProfileSettings.APP_DISPLAY_NAME,
ProfileSettings.APP_DISPLAYPIC_RAW,
ProfileSettings.GAMERSCORE,
ProfileSettings.GAMERTAG,
ProfileSettings.GAME_DISPLAYPIC_RAW,
ProfileSettings.ACCOUNT_TIER,
ProfileSettings.TENURE_LEVEL,
ProfileSettings.XBOX_ONE_REP,
ProfileSettings.PREFERRED_COLOR,
ProfileSettings.LOCATION,
ProfileSettings.BIOGRAPHY,
ProfileSettings.WATERMARKS,
ProfileSettings.REAL_NAME,
],
"userIds": xuid_list,
}
url = self.PROFILE_URL + "/users/batch/profile/settings"
resp = await self.client.session.post(
url, json=post_data, headers=self.HEADERS_PROFILE, **kwargs
)
resp.raise_for_status()
return ProfileResponse(**resp.json())
async def get_profile_by_xuid(self, target_xuid: str, **kwargs) -> ProfileResponse:
"""
Get Userprofile by xuid
Args:
target_xuid: XUID to get profile for
Returns:
:class:`ProfileResponse`: Profile Response
"""
url = self.PROFILE_URL + f"/users/xuid({target_xuid})/profile/settings"
params = {
"settings": self.SEPARATOR.join(
[
ProfileSettings.GAMERTAG,
ProfileSettings.MODERN_GAMERTAG,
ProfileSettings.MODERN_GAMERTAG_SUFFIX,
ProfileSettings.UNIQUE_MODERN_GAMERTAG,
ProfileSettings.REAL_NAME_OVERRIDE,
ProfileSettings.BIOGRAPHY,
ProfileSettings.LOCATION,
ProfileSettings.GAMERSCORE,
ProfileSettings.GAME_DISPLAYPIC_RAW,
ProfileSettings.TENURE_LEVEL,
ProfileSettings.ACCOUNT_TIER,
ProfileSettings.XBOX_ONE_REP,
ProfileSettings.PREFERRED_COLOR,
ProfileSettings.WATERMARKS,
ProfileSettings.IS_QUARANTINED,
]
)
}
resp = await self.client.session.get(
url, params=params, headers=self.HEADERS_PROFILE, **kwargs
)
resp.raise_for_status()
return ProfileResponse(**resp.json())
async def get_profile_by_gamertag(self, gamertag: str, **kwargs) -> ProfileResponse:
"""
Get Userprofile by gamertag
Args:
gamertag: Gamertag to get profile for
Returns:
:class:`ProfileResponse`: Profile Response
"""
url = self.PROFILE_URL + f"/users/gt({gamertag})/profile/settings"
params = {
"settings": self.SEPARATOR.join(
[
ProfileSettings.GAMERTAG,
ProfileSettings.MODERN_GAMERTAG,
ProfileSettings.MODERN_GAMERTAG_SUFFIX,
ProfileSettings.UNIQUE_MODERN_GAMERTAG,
ProfileSettings.REAL_NAME_OVERRIDE,
ProfileSettings.BIOGRAPHY,
ProfileSettings.LOCATION,
ProfileSettings.GAMERSCORE,
ProfileSettings.GAME_DISPLAYPIC_RAW,
ProfileSettings.TENURE_LEVEL,
ProfileSettings.ACCOUNT_TIER,
ProfileSettings.XBOX_ONE_REP,
ProfileSettings.PREFERRED_COLOR,
ProfileSettings.WATERMARKS,
ProfileSettings.IS_QUARANTINED,
]
)
}
resp = await self.client.session.get(
url, params=params, headers=self.HEADERS_PROFILE, **kwargs
)
resp.raise_for_status()
return ProfileResponse(**resp.json())
|