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 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
"""
Screenshots - Get screenshot info
"""
from xbox.webapi.api.provider.baseprovider import BaseProvider
from xbox.webapi.api.provider.screenshots.models import ScreenshotResponse
class ScreenshotsProvider(BaseProvider):
SCREENSHOTS_METADATA_URL = "https://screenshotsmetadata.xboxlive.com"
HEADERS_SCREENSHOTS_METADATA = {"x-xbl-contract-version": "5"}
async def get_recent_community_screenshots_by_title_id(
self, title_id: str, **kwargs
) -> ScreenshotResponse:
"""
Get recent community screenshots by Title Id
Args:
title_id: Title Id to get screenshots for
Returns:
:class:`ScreenshotResponse`: Screenshot Response
"""
url = self.SCREENSHOTS_METADATA_URL + f"/public/titles/{title_id}/screenshots"
params = {"qualifier": "created"}
resp = await self.client.session.get(
url, params=params, headers=self.HEADERS_SCREENSHOTS_METADATA, **kwargs
)
resp.raise_for_status()
return ScreenshotResponse(**resp.json())
async def get_recent_own_screenshots(
self, title_id: str = None, skip_items: int = 0, max_items: int = 25, **kwargs
) -> ScreenshotResponse:
"""
Get own recent screenshots, optionally filter for title Id
Args:
title_id: Title ID to filter
skip_items: Item count to skip
max_items: Maximum item count to load
Returns:
:class:`ScreenshotResponse`: Screenshot Response
"""
url = self.SCREENSHOTS_METADATA_URL + "/users/me"
if title_id:
url += f"/titles/{title_id}"
url += "/screenshots"
params = {"skipItems": skip_items, "maxItems": max_items}
resp = await self.client.session.get(
url, params=params, headers=self.HEADERS_SCREENSHOTS_METADATA, **kwargs
)
resp.raise_for_status()
return ScreenshotResponse(**resp.json())
async def get_recent_screenshots_by_xuid(
self,
xuid: str,
title_id: str = None,
skip_items: int = 0,
max_items: int = 25,
**kwargs,
) -> ScreenshotResponse:
"""
Get recent screenshots by XUID, optionally filter for title Id
Args:
xuid: XUID of user to get screenshots from
title_id: Optional title id filter
skip_items: Item count to skip
max_items: Maximum item count to load
Returns:
:class:`ScreenshotResponse`: Screenshot Response
"""
url = self.SCREENSHOTS_METADATA_URL + f"/users/xuid({xuid})"
if title_id:
url += f"/titles/{title_id}"
url += "/screenshots"
params = {"skipItems": skip_items, "maxItems": max_items}
resp = await self.client.session.get(
url, params=params, headers=self.HEADERS_SCREENSHOTS_METADATA, **kwargs
)
resp.raise_for_status()
return ScreenshotResponse(**resp.json())
async def get_saved_community_screenshots_by_title_id(
self, title_id: str, **kwargs
) -> ScreenshotResponse:
"""
Get saved community screenshots by Title Id
Args:
title_id: Title Id to get screenshots for
Returns:
:class:`ScreenshotResponse`: Screenshot Response
"""
url = f"{self.SCREENSHOTS_METADATA_URL}/public/titles/{title_id}/screenshots/saved"
params = {"qualifier": "created"}
resp = await self.client.session.get(
url, params=params, headers=self.HEADERS_SCREENSHOTS_METADATA, **kwargs
)
resp.raise_for_status()
return ScreenshotResponse(**resp.json())
async def get_saved_own_screenshots(
self, title_id: str = None, skip_items: int = 0, max_items: int = 25, **kwargs
) -> ScreenshotResponse:
"""
Get own saved screenshots, optionally filter for title Id an
Args:
title_id: Optional Title ID to filter
skip_items: Item count to skip
max_items: Maximum item count to load
Returns:
:class:`ScreenshotResponse`: Screenshot Response
"""
url = self.SCREENSHOTS_METADATA_URL + "/users/me"
if title_id:
url += f"/titles/{title_id}"
url += "/screenshots/saved"
params = {"skipItems": skip_items, "maxItems": max_items}
resp = await self.client.session.get(
url, params=params, headers=self.HEADERS_SCREENSHOTS_METADATA, **kwargs
)
resp.raise_for_status()
return ScreenshotResponse(**resp.json())
async def get_saved_screenshots_by_xuid(
self,
xuid: str,
title_id: str = None,
skip_items: int = 0,
max_items: int = 25,
**kwargs,
) -> ScreenshotResponse:
"""
Get saved screenshots by XUID, optionally filter for title Id
Args:
xuid: XUID of user to get screenshots from
title_id: Optional title id filter
skip_items: Item count to skip
max_items: Maximum item count to load
Returns:
:class:`ScreenshotResponse`: Screenshot Response
"""
url = self.SCREENSHOTS_METADATA_URL + f"/users/xuid({xuid})"
if title_id:
url += f"/titles/{title_id}"
url += "/screenshots/saved"
params = {"skipItems": skip_items, "maxItems": max_items}
resp = await self.client.session.get(
url, params=params, headers=self.HEADERS_SCREENSHOTS_METADATA, **kwargs
)
resp.raise_for_status()
return ScreenshotResponse(**resp.json())
|