Днями вирішив зробити собі невеличку базу ігор, яку заповнювати, звісно, руками не будеш. Так виявилося, що у стіма є відкрита API-шка!
Можна отримати основну інформацію про гру, знаючи її ідентифікатор. Останній можна подивитися, наприклад, в урлі сторінки в магазині. І потім хоп-хоп — і вся інформація легко дістається:
let gameId = '1328670'
let info = http get https://store.steampowered.com/api/appdetails?appids=($gameId)
| get $gameId
| get data
І далі вже можна дивитися, шо там:
> $info.name
Mass Effect™ Legendary Edition
> $info.genres
╭───┬────┬─────────────╮
│ # │ id │ description │
├───┼────┼─────────────┤
│ 0 │ 1 │ Action │
│ 1 │ 3 │ RPG │
╰───┴────┴─────────────╯
> $info.ratings.pegi
╭──────────────┬──────────────╮
│ rating │ 18 │
│ descriptors │ Violence │
│ │ Bad Language │
│ │ Gambling │
│ use_age_gate │ true │
│ required_age │ 18+ │
╰──────────────┴──────────────╯
Або навіть отак:
> $info.supported_languages | split words | 'Ukrainian' in $in
false # 😭
(Підіть, може, хоча б ШБТ 💙 попросіть у дискорді, щоб вони переклали… Ех.)
Я собі так навіть знятки екрана всі стягнув. Важать вони, до речі, доволі дофіга: на ≈150 ігор вийшло близько 900 МБ 🤯 Треба, мабуть, у WebP конвертнути.
Апішка має ліміти на кількість запитів за певний проміжок часу. Скільки точно, я не знаю. Якщо робити десь два запита на секунду, то наче не рубає зʼєднання, але якщо флудити частіше, то сервер починає кидати якусь з 500-х помилок, здається. За який час його попускає, я теж хз — просто VPN перемкнув собі, і далі запрацювало норм.
Уважний читач (так, ти 🫵) міг побачити, що URL-параметр в запиті називається
appids, а не appid. Однак ні — одразу декілька передавати не можна, бо тоді їхній сервер повертає HTTP 400. Єдиний виняток — це комбінація з фільтром price_overview, яка працює:> http get https://store.steampowered.com/api/appdetails?appids=1328670,1091500&filters=price_overview | transpose -d | rename id val | select id val.data.price_overview
╭───┬─────────┬────────────────────────────────╮
│ # │ id │ val.data.price_overview │
├───┼─────────┼────────────────────────────────┤
│ 0 │ 1328670 │ ╭───────────────────┬────────╮ │
│ │ │ │ currency │ EUR │ │
│ │ │ │ initial │ 5999 │ │
│ │ │ │ final │ 479 │ │
│ │ │ │ discount_percent │ 92 │ │
│ │ │ │ initial_formatted │ 59,99€ │ │
│ │ │ │ final_formatted │ 4,79€ │ │
│ │ │ ╰───────────────────┴────────╯ │
│ 1 │ 1091500 │ ╭───────────────────┬────────╮ │
│ │ │ │ currency │ EUR │ │
│ │ │ │ initial │ 5999 │ │
│ │ │ │ final │ 5999 │ │
│ │ │ │ discount_percent │ 0 │ │
│ │ │ │ initial_formatted │ │ │
│ │ │ │ final_formatted │ 59,99€ │ │
│ │ │ ╰───────────────────┴────────╯ │
╰───┴─────────┴────────────────────────────────╯
Тепер можна нагенерувати собі сторінок в обсідіані або кудись ще покласти 😎