mirror of
https://github.com/MyLuxy/overdrive.git
synced 2026-10-19 02:10:55 -05:00
feat: screenshots for the new games
This commit is contained in:
1 parent
f55b42653b
commit
7454d7be1c
25 files changed
+194
No files matched your search
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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":""}
|
||||
@@ -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()}
|
||||
|
||||
Reference in new issue
Block a user