feat: screenshots for the new games

This commit is contained in:
MyLuxy committed 2026-10-15 21:35:00 +02:00
1 parent f55b42653b
commit 7454d7be1c
25 files changed
+194

No files matched your search

+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/978300/ss_8d6a6a6c1c00e3478d45858fc916ce4958db94c6.1920x1080.jpg?t=1764671001","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/978300/ss_8d6a6a6c1c00e3478d45858fc916ce4958db94c6.600x338.jpg?t=1764671001"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/978300/ss_6ecdd9ae6067d91432c2b5fa2aeccf4ad9c69e9a.1920x1080.jpg?t=1764671001","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/978300/ss_6ecdd9ae6067d91432c2b5fa2aeccf4ad9c69e9a.600x338.jpg?t=1764671001"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/978300/ss_e60ce1cef3550df65e8042388749969930eb97df.1920x1080.jpg?t=1764671001","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/978300/ss_e60ce1cef3550df65e8042388749969930eb97df.600x338.jpg?t=1764671001"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1635590/ss_80978d6616fb532643461ad110435101dab826fc.1920x1080.jpg?t=1727090021","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1635590/ss_80978d6616fb532643461ad110435101dab826fc.600x338.jpg?t=1727090021"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1635590/ss_6a01d1f523c901212dfbb302c290981cc840a569.1920x1080.jpg?t=1727090021","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1635590/ss_6a01d1f523c901212dfbb302c290981cc840a569.600x338.jpg?t=1727090021"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1635590/ss_c3893137ba2fa5a33698acd10cbf2046092d0488.1920x1080.jpg?t=1727090021","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1635590/ss_c3893137ba2fa5a33698acd10cbf2046092d0488.600x338.jpg?t=1727090021"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1663640/ss_5e1084a85919a47a2299ab53b858f2534dfd80f2.1920x1080.jpg?t=1695827126","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1663640/ss_5e1084a85919a47a2299ab53b858f2534dfd80f2.600x338.jpg?t=1695827126"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1663640/ss_cfd66055231e0ee4766105e2eafb6db4122c54d4.1920x1080.jpg?t=1695827126","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1663640/ss_cfd66055231e0ee4766105e2eafb6db4122c54d4.600x338.jpg?t=1695827126"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1663640/ss_442bca24cda131e0c153f4784580646999a6f18d.1920x1080.jpg?t=1695827126","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1663640/ss_442bca24cda131e0c153f4784580646999a6f18d.600x338.jpg?t=1695827126"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1687950/ss_663171dc3afce8fe987e57e8659f91b69faa39bc.1920x1080.jpg?t=1783356822","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1687950/ss_663171dc3afce8fe987e57e8659f91b69faa39bc.600x338.jpg?t=1783356822"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1687950/ss_a3258aba84ae2f2ff13a02a160f7495bfc152adb.1920x1080.jpg?t=1783356822","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1687950/ss_a3258aba84ae2f2ff13a02a160f7495bfc152adb.600x338.jpg?t=1783356822"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1687950/ss_ddcc016b8e5c434ccbd1a89c0157ce73acf905ae.1920x1080.jpg?t=1783356822","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1687950/ss_ddcc016b8e5c434ccbd1a89c0157ce73acf905ae.600x338.jpg?t=1783356822"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://image.api.playstation.com/vulcan/ap/rnd/202406/0521/f431cfd88cb5f8db6b69f0488884c19bf16bce406f7464b7.jpg?w=1920&thumb=false","thumb":"https://image.api.playstation.com/vulcan/ap/rnd/202406/0521/f431cfd88cb5f8db6b69f0488884c19bf16bce406f7464b7.jpg?w=256&thumb=false"},{"url":"https://image.api.playstation.com/vulcan/ap/rnd/202406/0521/55b7f9fc3450ef1fe4afe24504f404000806d09222a32eea.jpg?w=1920&thumb=false","thumb":"https://image.api.playstation.com/vulcan/ap/rnd/202406/0521/55b7f9fc3450ef1fe4afe24504f404000806d09222a32eea.jpg?w=256&thumb=false"},{"url":"https://image.api.playstation.com/vulcan/ap/rnd/202406/0521/15ee48225dfbd5301e597daaad8473f4b4d6d6e888e97730.jpg?w=1920&thumb=false","thumb":"https://image.api.playstation.com/vulcan/ap/rnd/202406/0521/15ee48225dfbd5301e597daaad8473f4b4d6d6e888e97730.jpg?w=256&thumb=false"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://image.api.playstation.com/vulcan/ap/rnd/202402/0922/c09aa97d0b28ed9a6a4b29f31b9879f5b77d18d9aa2e2bdf.jpg?w=1920&thumb=false","thumb":"https://image.api.playstation.com/vulcan/ap/rnd/202402/0922/c09aa97d0b28ed9a6a4b29f31b9879f5b77d18d9aa2e2bdf.jpg?w=256&thumb=false"},{"url":"https://image.api.playstation.com/vulcan/ap/rnd/202402/0922/e136353bee39798e947a0dde1788ca42f555a1a7456b47d8.jpg?w=1920&thumb=false","thumb":"https://image.api.playstation.com/vulcan/ap/rnd/202402/0922/e136353bee39798e947a0dde1788ca42f555a1a7456b47d8.jpg?w=256&thumb=false"},{"url":"https://image.api.playstation.com/vulcan/ap/rnd/202402/0922/8cc01f6f652c6bcfd646e4239f0e49ba82ad692e7a0da4dc.jpg?w=1920&thumb=false","thumb":"https://image.api.playstation.com/vulcan/ap/rnd/202402/0922/8cc01f6f652c6bcfd646e4239f0e49ba82ad692e7a0da4dc.jpg?w=256&thumb=false"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://image.api.playstation.com/vulcan/ap/rnd/202307/2521/7e23720a166669df51886b722064301c548a91daae60b0da.jpg?w=1920&thumb=false","thumb":"https://image.api.playstation.com/vulcan/ap/rnd/202307/2521/7e23720a166669df51886b722064301c548a91daae60b0da.jpg?w=256&thumb=false"},{"url":"https://image.api.playstation.com/vulcan/ap/rnd/202307/2521/af28deb9c1b04bc895681c246f0f158c71c8fcde063f5532.jpg?w=1920&thumb=false","thumb":"https://image.api.playstation.com/vulcan/ap/rnd/202307/2521/af28deb9c1b04bc895681c246f0f158c71c8fcde063f5532.jpg?w=256&thumb=false"},{"url":"https://image.api.playstation.com/vulcan/ap/rnd/202307/2521/c158024bf9801307d43be1b634d79a108eceacec26ef00dd.jpg?w=1920&thumb=false","thumb":"https://image.api.playstation.com/vulcan/ap/rnd/202307/2521/c158024bf9801307d43be1b634d79a108eceacec26ef00dd.jpg?w=256&thumb=false"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://image.api.playstation.com/vulcan/ap/rnd/202406/2123/ff348dc555dc09c7a87bce4a731de9c97d3c72a30447df96.jpg?w=1920&thumb=false","thumb":"https://image.api.playstation.com/vulcan/ap/rnd/202406/2123/ff348dc555dc09c7a87bce4a731de9c97d3c72a30447df96.jpg?w=256&thumb=false"},{"url":"https://image.api.playstation.com/vulcan/ap/rnd/202406/2123/8fa0f0a56e62cf3eeb8f68dc9296982064fa37b78d6e3345.jpg?w=1920&thumb=false","thumb":"https://image.api.playstation.com/vulcan/ap/rnd/202406/2123/8fa0f0a56e62cf3eeb8f68dc9296982064fa37b78d6e3345.jpg?w=256&thumb=false"},{"url":"https://image.api.playstation.com/vulcan/ap/rnd/202406/2123/44f10e009a99af7033700d582f5434e365cb03db5145e021.jpg?w=1920&thumb=false","thumb":"https://image.api.playstation.com/vulcan/ap/rnd/202406/2123/44f10e009a99af7033700d582f5434e365cb03db5145e021.jpg?w=256&thumb=false"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2358260/ss_d3c27aaa4185c6430ed0f10b317067d85e586e56.1920x1080.jpg?t=1725870557","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2358260/ss_d3c27aaa4185c6430ed0f10b317067d85e586e56.600x338.jpg?t=1725870557"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2358260/ss_ce84a48a8ff442937b51aa77cc433fe4c3dd6bc3.1920x1080.jpg?t=1725870557","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2358260/ss_ce84a48a8ff442937b51aa77cc433fe4c3dd6bc3.600x338.jpg?t=1725870557"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2358260/ss_a932f8c3100e22eaf74af213012061bd1e6c8594.1920x1080.jpg?t=1725870557","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2358260/ss_a932f8c3100e22eaf74af213012061bd1e6c8594.600x338.jpg?t=1725870557"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1669480/3a8fe6e013d34bf9294402b5b526532d81ee66cc/ss_3a8fe6e013d34bf9294402b5b526532d81ee66cc.1920x1080.jpg?t=1784796095","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1669480/3a8fe6e013d34bf9294402b5b526532d81ee66cc/ss_3a8fe6e013d34bf9294402b5b526532d81ee66cc.600x338.jpg?t=1784796095"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1669480/56fc9c715514aac7039fd5a3fb5c653cb72208a0/ss_56fc9c715514aac7039fd5a3fb5c653cb72208a0.1920x1080.jpg?t=1784796095","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1669480/56fc9c715514aac7039fd5a3fb5c653cb72208a0/ss_56fc9c715514aac7039fd5a3fb5c653cb72208a0.600x338.jpg?t=1784796095"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1669480/760c40f0e283433346fbc4f1bbd04f630ebf9a0d/ss_760c40f0e283433346fbc4f1bbd04f630ebf9a0d.1920x1080.jpg?t=1784796095","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1669480/760c40f0e283433346fbc4f1bbd04f630ebf9a0d/ss_760c40f0e283433346fbc4f1bbd04f630ebf9a0d.600x338.jpg?t=1784796095"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2316580/ss_061a528527e35a3714276a50c1e898cb19d17d72.1920x1080.jpg?t=1777412130","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2316580/ss_061a528527e35a3714276a50c1e898cb19d17d72.600x338.jpg?t=1777412130"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2316580/ss_a9c210cdb2e163044b470c79927c42ea98b0b3c5.1920x1080.jpg?t=1777412130","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2316580/ss_a9c210cdb2e163044b470c79927c42ea98b0b3c5.600x338.jpg?t=1777412130"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2316580/ss_d20cd3294865d1e81c821fbb0f635398366832a5.1920x1080.jpg?t=1777412130","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2316580/ss_d20cd3294865d1e81c821fbb0f635398366832a5.600x338.jpg?t=1777412130"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1902960/240aea4f73f198d5680fbb690f7f93b5c5a29eb5/ss_240aea4f73f198d5680fbb690f7f93b5c5a29eb5.1920x1080.jpg?t=1783519491","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1902960/240aea4f73f198d5680fbb690f7f93b5c5a29eb5/ss_240aea4f73f198d5680fbb690f7f93b5c5a29eb5.600x338.jpg?t=1783519491"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1902960/47dd19e352aa61c3deea2273a8c859d516b83600/ss_47dd19e352aa61c3deea2273a8c859d516b83600.1920x1080.jpg?t=1783519491","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1902960/47dd19e352aa61c3deea2273a8c859d516b83600/ss_47dd19e352aa61c3deea2273a8c859d516b83600.600x338.jpg?t=1783519491"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1902960/5c76ddc075184280d8be4eff8ba9d5eb384270e7/ss_5c76ddc075184280d8be4eff8ba9d5eb384270e7.1920x1080.jpg?t=1783519491","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1902960/5c76ddc075184280d8be4eff8ba9d5eb384270e7/ss_5c76ddc075184280d8be4eff8ba9d5eb384270e7.600x338.jpg?t=1783519491"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2827820/0779d3c6775a5fbe011bde62b5a710242fe0c307/ss_0779d3c6775a5fbe011bde62b5a710242fe0c307.1920x1080.jpg?t=1789741761","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2827820/0779d3c6775a5fbe011bde62b5a710242fe0c307/ss_0779d3c6775a5fbe011bde62b5a710242fe0c307.600x338.jpg?t=1789741761"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2827820/c6311368417c8e06394ee1451eafe4699e0710f9/ss_c6311368417c8e06394ee1451eafe4699e0710f9.1920x1080.jpg?t=1789741761","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2827820/c6311368417c8e06394ee1451eafe4699e0710f9/ss_c6311368417c8e06394ee1451eafe4699e0710f9.600x338.jpg?t=1789741761"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2827820/204dd2f19f422af0908628522ba02314165724d8/ss_204dd2f19f422af0908628522ba02314165724d8.1920x1080.jpg?t=1789741761","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2827820/204dd2f19f422af0908628522ba02314165724d8/ss_204dd2f19f422af0908628522ba02314165724d8.600x338.jpg?t=1789741761"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/3036720/b840fc475cd1ea9c29d107c2781ba12a010f3be2/ss_b840fc475cd1ea9c29d107c2781ba12a010f3be2.1920x1080.jpg?t=1787835808","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/3036720/b840fc475cd1ea9c29d107c2781ba12a010f3be2/ss_b840fc475cd1ea9c29d107c2781ba12a010f3be2.600x338.jpg?t=1787835808"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/3036720/b8befc065328ef7896d78805105a1b895d504383/ss_b8befc065328ef7896d78805105a1b895d504383.1920x1080.jpg?t=1787835808","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/3036720/b8befc065328ef7896d78805105a1b895d504383/ss_b8befc065328ef7896d78805105a1b895d504383.600x338.jpg?t=1787835808"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/3036720/868380d255f52f5842e80674222f2a201124a5cb/ss_868380d255f52f5842e80674222f2a201124a5cb.1920x1080.jpg?t=1787835808","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/3036720/868380d255f52f5842e80674222f2a201124a5cb/ss_868380d255f52f5842e80674222f2a201124a5cb.600x338.jpg?t=1787835808"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2928600/ss_65bda7a462256287baf41fe28c42268ad2e385cb.1920x1080.jpg?t=1791824511","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2928600/ss_65bda7a462256287baf41fe28c42268ad2e385cb.600x338.jpg?t=1791824511"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2928600/ss_4a2fec226d07f5969a036267cb6b44119d5bfecb.1920x1080.jpg?t=1791824511","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2928600/ss_4a2fec226d07f5969a036267cb6b44119d5bfecb.600x338.jpg?t=1791824511"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2928600/ss_3fa9a6fbfa3a6370b7fd1b861b1fa6f0e25096d6.1920x1080.jpg?t=1791824511","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2928600/ss_3fa9a6fbfa3a6370b7fd1b861b1fa6f0e25096d6.600x338.jpg?t=1791824511"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/427410/ss_f57e6a13592c1dee5d903218e31d4add71dbaa83.1920x1080.jpg?t=1788195774","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/427410/ss_f57e6a13592c1dee5d903218e31d4add71dbaa83.600x338.jpg?t=1788195774"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/427410/ss_a0858ca74b521e17bc923f94d6e77c6ff224da2f.1920x1080.jpg?t=1788195774","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/427410/ss_a0858ca74b521e17bc923f94d6e77c6ff224da2f.600x338.jpg?t=1788195774"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/427410/57a1ab194abcbb53d007e2a467b6a3a0118a8e35/ss_57a1ab194abcbb53d007e2a467b6a3a0118a8e35.1920x1080.jpg?t=1788195774","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/427410/57a1ab194abcbb53d007e2a467b6a3a0118a8e35/ss_57a1ab194abcbb53d007e2a467b6a3a0118a8e35.600x338.jpg?t=1788195774"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2569760/f48693cb21dc49754514718d37ee3a85f8e60a96/ss_f48693cb21dc49754514718d37ee3a85f8e60a96.1920x1080.jpg?t=1788530496","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2569760/f48693cb21dc49754514718d37ee3a85f8e60a96/ss_f48693cb21dc49754514718d37ee3a85f8e60a96.600x338.jpg?t=1788530496"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2569760/cb42e74d6b846cdbb8ba632f844adf54cabc5de5/ss_cb42e74d6b846cdbb8ba632f844adf54cabc5de5.1920x1080.jpg?t=1788530496","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2569760/cb42e74d6b846cdbb8ba632f844adf54cabc5de5/ss_cb42e74d6b846cdbb8ba632f844adf54cabc5de5.600x338.jpg?t=1788530496"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2569760/0e238e410f6506815173807ab51a08bab98e7a26/ss_0e238e410f6506815173807ab51a08bab98e7a26.1920x1080.jpg?t=1788530496","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2569760/0e238e410f6506815173807ab51a08bab98e7a26/ss_0e238e410f6506815173807ab51a08bab98e7a26.600x338.jpg?t=1788530496"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/361420/ss_539bc5211ccdad2bc6cc70e4af40194d74eb0256.1920x1080.jpg?t=1770767049","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/361420/ss_539bc5211ccdad2bc6cc70e4af40194d74eb0256.600x338.jpg?t=1770767049"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/361420/ss_858b8bece04b753a6b35a009776a4de9dd6e0df7.1920x1080.jpg?t=1770767049","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/361420/ss_858b8bece04b753a6b35a009776a4de9dd6e0df7.600x338.jpg?t=1770767049"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/361420/ss_436f3ea0934a6ecd3fdd2f260ef535d80b8c185d.1920x1080.jpg?t=1770767049","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/361420/ss_436f3ea0934a6ecd3fdd2f260ef535d80b8c185d.600x338.jpg?t=1770767049"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/3634190/60e8a1a8ecfd852a6881ba3626e9310bcedc606f/ss_60e8a1a8ecfd852a6881ba3626e9310bcedc606f.1920x1080.jpg?t=1791538684","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/3634190/60e8a1a8ecfd852a6881ba3626e9310bcedc606f/ss_60e8a1a8ecfd852a6881ba3626e9310bcedc606f.600x338.jpg?t=1791538684"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/3634190/53e59d31359df2b854222896915c7e36e100528c/ss_53e59d31359df2b854222896915c7e36e100528c.1920x1080.jpg?t=1791538684","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/3634190/53e59d31359df2b854222896915c7e36e100528c/ss_53e59d31359df2b854222896915c7e36e100528c.600x338.jpg?t=1791538684"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/3634190/7159484edc106b80e6f8d5cc2889d9ada6e03214/ss_7159484edc106b80e6f8d5cc2889d9ada6e03214.1920x1080.jpg?t=1791538684","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/3634190/7159484edc106b80e6f8d5cc2889d9ada6e03214/ss_7159484edc106b80e6f8d5cc2889d9ada6e03214.600x338.jpg?t=1791538684"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/202970/ss_ac2194dfb623d65003f54450fb1824e5f181b27e.1920x1080.jpg?t=1780962925","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/202970/ss_ac2194dfb623d65003f54450fb1824e5f181b27e.600x338.jpg?t=1780962925"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/202970/ss_aa5f28d5d5fb0956c5de65b0a3e2a115b8283321.1920x1080.jpg?t=1780962925","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/202970/ss_aa5f28d5d5fb0956c5de65b0a3e2a115b8283321.600x338.jpg?t=1780962925"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/202970/ss_0cd41677a068a20478f96200d9775dedcba88d38.1920x1080.jpg?t=1780962925","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/202970/ss_0cd41677a068a20478f96200d9775dedcba88d38.600x338.jpg?t=1780962925"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/521890/ss_f4bf74bcbf51a0d3b5b7a0497018e824f2ec092c.1920x1080.jpg?t=1789402399","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/521890/ss_f4bf74bcbf51a0d3b5b7a0497018e824f2ec092c.600x338.jpg?t=1789402399"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/521890/ss_ac219a7c078de280a6ab21c39d925d3f1c8bb4a8.1920x1080.jpg?t=1789402399","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/521890/ss_ac219a7c078de280a6ab21c39d925d3f1c8bb4a8.600x338.jpg?t=1789402399"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/521890/ss_462735bb24790570cadc9f6ed9fa5d456c2f8035.1920x1080.jpg?t=1789402399","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/521890/ss_462735bb24790570cadc9f6ed9fa5d456c2f8035.600x338.jpg?t=1789402399"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4356430/0202201bff9e57adf4913e9c8a21062c730e0b27/ss_0202201bff9e57adf4913e9c8a21062c730e0b27.1920x1080.jpg?t=1790702884","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4356430/0202201bff9e57adf4913e9c8a21062c730e0b27/ss_0202201bff9e57adf4913e9c8a21062c730e0b27.600x338.jpg?t=1790702884"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4356430/2a04508bf934834c93cfe5c91f27f45d3043a83d/ss_2a04508bf934834c93cfe5c91f27f45d3043a83d.1920x1080.jpg?t=1790702884","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4356430/2a04508bf934834c93cfe5c91f27f45d3043a83d/ss_2a04508bf934834c93cfe5c91f27f45d3043a83d.600x338.jpg?t=1790702884"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4356430/57773a1574208a10b2a5a12fdf3e0be991461475/ss_57773a1574208a10b2a5a12fdf3e0be991461475.1920x1080.jpg?t=1790702884","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4356430/57773a1574208a10b2a5a12fdf3e0be991461475/ss_57773a1574208a10b2a5a12fdf3e0be991461475.600x338.jpg?t=1790702884"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1933000/ss_bcd9fb4d562116ee1a09b896671a2ab111909196.1920x1080.jpg?t=1779870125","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1933000/ss_bcd9fb4d562116ee1a09b896671a2ab111909196.600x338.jpg?t=1779870125"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1933000/ss_a23bbca2170a9f041984eb88dbe6a4fd179bf1bb.1920x1080.jpg?t=1779870125","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1933000/ss_a23bbca2170a9f041984eb88dbe6a4fd179bf1bb.600x338.jpg?t=1779870125"},{"url":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1933000/ss_260a8d1b6e873dcdf3a973913749b408d981e454.1920x1080.jpg?t=1779870125","thumb":"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1933000/ss_260a8d1b6e873dcdf3a973913749b408d981e454.600x338.jpg?t=1779870125"}],"summary":""}
+1
View File
@@ -0,0 +1 @@
{"about":[],"shots":[{"url":"https://image.api.playstation.com/vulcan/ap/rnd/202608/0708/6401464893c13cd54d4796deab87f5563bec2b681a36627f.jpg?w=1920&thumb=false","thumb":"https://image.api.playstation.com/vulcan/ap/rnd/202608/0708/6401464893c13cd54d4796deab87f5563bec2b681a36627f.jpg?w=256&thumb=false"},{"url":"https://image.api.playstation.com/vulcan/ap/rnd/202608/0708/3a05af71e5ca24cc0bfde093bbffbfc89478fbdd45a69d31.jpg?w=1920&thumb=false","thumb":"https://image.api.playstation.com/vulcan/ap/rnd/202608/0708/3a05af71e5ca24cc0bfde093bbffbfc89478fbdd45a69d31.jpg?w=256&thumb=false"},{"url":"https://image.api.playstation.com/vulcan/ap/rnd/202608/0708/84e5473ff8b7ecff4df348805dcd819780a0c964047f5547.jpg?w=1920&thumb=false","thumb":"https://image.api.playstation.com/vulcan/ap/rnd/202608/0708/84e5473ff8b7ecff4df348805dcd819780a0c964047f5547.jpg?w=256&thumb=false"}],"summary":""}
+170
View File
@@ -17,6 +17,12 @@ Usage, from the repository root:
python -P tools/import-pippo.py --pippo /tmp/pippo/exFAT.json --dry-run
python -P tools/import-pippo.py --pippo /tmp/pippo/exFAT.json --report /tmp/pippo/report.json
python -P tools/import-pippo.py --pippo /tmp/pippo/exFAT.json --covers
python -P tools/import-pippo.py --pippo /tmp/pippo/exFAT.json --shots
--shots gives the games this import added the screenshots their page needs, taken
from the Steam storefront, and from the PlayStation Store for the five titles that
are PlayStation classics and have no Steam page. It writes app/data/pages/<id>.json
only where that file has no screenshots yet, so it leaves a curated page alone.
It needs the "cryptography" package, and Pillow only for --covers. Use -P, not -I:
the script directory must stay off sys.path (it reads an untrusted file) while
@@ -50,6 +56,9 @@ import json
import os
import re
import sys
import time
import urllib.error
import urllib.parse
import urllib.request
try:
@@ -736,6 +745,151 @@ def fetch_covers(plan, covers_dir):
return written, failed
# --- Screenshots ------------------------------------------------------------
PAGES_DIRNAME = "pages"
SHOT_LIMIT = 3
SHOT_WIDE = "?w=1920&thumb=false"
SHOT_THUMB = "?w=256&thumb=false"
STEAM_APP = "https://store.steampowered.com/api/appdetails?appids=%s&l=english"
STORE = "https://store.playstation.com/store/api/chihiro/00_09_000/container/%s/%s/19/%s"
PSN_CDN = "https://vulcan.dl.playstation.net/"
PSN_IMAGE = "https://image.api.playstation.com/vulcan/"
# Every game this import added, and where its screenshots come from. Steam covers
# most of them; the five PlayStation classics have no Steam page, so they come
# from the PlayStation Store. The token is the part of the store's own name that
# has to match, so a wrong appid is caught instead of pasted into the catalog.
SHOTS = {
"PPSA02873": ("steam", 978300, "saintsrowthethird"), # Saints Row: The Third Remastered
"PPSA03706": ("steam", 1635590, "myfriendpeppapig"), # My Friend Peppa Pig
"PPSA04867": ("steam", 1663640, "thelastoricru"), # The Last Oricru
"PPSA05110": ("steam", 1687950, "persona5royal"), # Persona 5 Royal
"PPSA16342": ("steam", 2358260, "cricket24"), # Cricket 24
"PPSA17456": ("steam", 1669480, "firefightingsimulator"), # Firefighting Simulator: Ignite
"PPSA18054": ("steam", 3701350, "starwarszerocompany"), # Star Wars Zero Company
"PPSA18471": ("steam", 2316580, "talesofkenzera"), # Tales of Kenzera: ZAU
"PPSA19733": ("steam", 1902960, "lostrecords"), # Lost Records: Bloom & Rage
"PPSA20946": ("steam", 2827820, "therelic"), # The Relic: First Guardian
"PPSA24040": ("steam", 3036720, "mastercollectionvol2"), # MGS Master Collection Vol.2 bonus
"PPSA25427": ("steam", 2928600, "hinokamichronicles2"), # Demon Slayer: Hinokami Chronicles 2
"PPSA26012": ("steam", 427410, "abioticfactor"), # Abiotic Factor
"PPSA26223": ("steam", 2569760, "themound"), # The Mound: Omen of Cthulhu
"PPSA27623": ("steam", 361420, "astroneer"), # ASTRONEER
"PPSA30839": ("steam", 3634190, "mxgp26"), # MXGP 26
"PPSA34502": ("steam", 202970, "blackopsii"), # Call of Duty: Black Ops II
"PPSA34547": ("steam", 3669870, "controlresonant"), # CONTROL Resonant
"PPSA35154": ("steam", 521890, "helloneighbor"), # Hello Neighbor
"PPSA35889": ("steam", 4356430, "nba2k27"), # NBA 2K27
"PPSA36257": ("steam", 1933000, "lunaabyss"), # Luna Abyss
"PPSA09695": ("psn", "US", "en", "UP9000-PPSA09695_00-NPUG803290000000"), # Daxter
"PPSA14325": ("psn", "US", "en", "UP9000-PPSA14325_00-NPUG803300000000"), # Jak and Daxter
"PPSA14382": ("psn", "IT", "it", "EP1006-PPSA14382_00-0439646099833434"), # Buzz Lightyear
"PPSA14431": ("psn", "US", "en", "UP9000-PPSA14431_00-UCUS986330000000"), # Ratchet & Clank
"PPSA38272": ("psn", "US", "en", "UP0102-PPSA38272_00-CLASSICONIMUSHA0"), # Onimusha: Dawn of Dreams
}
def simple(text):
"""A name with nothing left but its letters and digits, for comparing titles."""
return re.sub(r"[^a-z0-9]+", "", str(text).lower())
def fetch_json(url, attempts=3):
"""Read a JSON document, giving the storefront a second chance after an empty answer.
Both storefronts answer an empty body when they are asked too quickly, so a
missing page is only believed after a couple of spaced retries.
"""
note = ""
for attempt in range(attempts):
try:
request = urllib.request.Request(url, headers={"User-Agent": BROWSER_UA, "Accept": "*/*"})
with urllib.request.urlopen(request, timeout=45) as response:
body = response.read()
if body:
return json.loads(body.decode("utf-8")), ""
note = "empty answer"
except urllib.error.HTTPError as error:
note = "http %s" % error.code
except ValueError:
note = "not json"
except Exception as error: # noqa: BLE001 - one unreachable page must not stop the run
note = type(error).__name__
time.sleep(2.0 * (attempt + 1))
return None, note
def steam_shots(appid, token):
"""The first screenshots of a Steam app, in the url/thumb shape the app reads."""
found, note = fetch_json(STEAM_APP % appid)
data = ((found or {}).get(str(appid)) or {}).get("data") or {}
if not data:
return [], note or "no such app"
if token not in simple(data.get("name")):
return [], "app %s is called %r" % (appid, data.get("name"))
shots = [{"url": shot["path_full"], "thumb": shot["path_thumbnail"]}
for shot in (data.get("screenshots") or [])[:SHOT_LIMIT] if shot.get("path_full")]
return shots, "" if shots else "no screenshots on the Steam page"
def psn_shots(title_id, country, language, product_id):
"""The first screenshots of a PlayStation Store product, sized like the catalog's own."""
if title_id not in product_id: # the id has to name this very title
return [], "product id does not name %s" % title_id
found, note = fetch_json(STORE % (country, language, urllib.parse.quote(product_id)))
shots = ((found or {}).get("mediaList") or {}).get("screenshots") or []
result = []
for shot in shots[:SHOT_LIMIT]:
url = str(shot.get("url") or "").split("?")[0]
if not url:
continue
if url.startswith(PSN_CDN): # the store CDN, through the host the app already loads
url = PSN_IMAGE + url[len(PSN_CDN):]
result.append({"url": url + SHOT_WIDE, "thumb": url + SHOT_THUMB})
return result, "" if result else (note or "no screenshots on the store page")
def page_shots(path):
"""The screenshots a page already carries, so a curated page is never overwritten."""
if not os.path.exists(path):
return []
with open(path, encoding="utf-8") as handle:
return json.loads(handle.read()).get("shots") or []
def fetch_shots(data_dir):
"""Write the page of every game this import added that has no screenshots yet."""
pages_dir = os.path.join(data_dir, PAGES_DIRNAME)
written, kept, failed = [], [], []
for title_id, source in sorted(SHOTS.items()):
path = os.path.join(pages_dir, title_id + ".json")
try:
current = page_shots(path)
except (OSError, ValueError) as error:
failed.append((title_id, "unreadable page: %s" % error))
continue
if current:
kept.append((title_id, len(current)))
continue
if source[0] == "steam":
shots, note = steam_shots(source[1], source[2])
origin = "steam %s" % source[1]
else:
shots, note = psn_shots(title_id, source[1], source[2], source[3])
origin = "store %s/%s" % (source[1], source[2])
if not shots:
failed.append((title_id, "%s: %s" % (origin, note)))
continue
page = collections.OrderedDict([("about", []), ("shots", shots), ("summary", "")])
body = json.dumps(page, ensure_ascii=False, separators=(",", ":")).encode("utf-8")
with open(path, "wb") as handle:
handle.write(body)
written.append((title_id, "%s, %d screenshots" % (origin, len(shots))))
time.sleep(0.5)
return written, kept, failed
# --- Reporting --------------------------------------------------------------
@@ -818,6 +972,8 @@ def main(argv=None):
parser.add_argument("--ignore-expect", action="store_true", help="do not fail when the counts moved")
parser.add_argument("--covers", action="store_true", help="also store the missing games' covers as JPEG")
parser.add_argument("--covers-dir", help="where --covers writes (default: <repo>/covers)")
parser.add_argument("--shots", action="store_true",
help="also give the games this import added the screenshots of their page")
parser.add_argument("--report", help="write the run's report as JSON to this path")
args = parser.parse_args(argv)
if not os.path.isfile(args.pippo):
@@ -856,6 +1012,20 @@ def main(argv=None):
for title_id, source, error in failed:
print("cover failed %s %s: %s" % (title_id, source, error))
if args.shots:
if args.dry_run:
print("shots dry run: %d games in the table, nothing fetched" % len(SHOTS))
else:
written, kept, failed = fetch_shots(args.data)
print("shots %d pages written in %s, %d pages left alone"
% (len(written), os.path.join(os.path.abspath(args.data), PAGES_DIRNAME), len(kept)))
for title_id, detail in written:
print(" %s %s" % (title_id, detail))
for title_id, count in kept:
print(" kept %s, it already has %d screenshots" % (title_id, count))
for title_id, detail in failed:
print("shot failed %s %s" % (title_id, detail))
if args.report:
info = {key: (dict(value) if isinstance(value, collections.Counter) else value)
for key, value in plan["info"].items()}