A Steam Store extractor would let mort track game prices — useful for a new eggwatch-style price monitoring feature but for games. This ties into the mortbux economy nicely: users could be notified of sales, or bet on whether a game will go on sale.
Proposed API
packagesteamtypeGamePricestruct{AppIDintNamestringPricefloat64OrigPricefloat64// 0 if not on saleDiscountPctint// 0 if not on saleOnSaleboolFreeToPlayboolCurrencystring}typeConfigstruct{}varDefaultConfig=Config{}// GetGamePrice extracts price info for a Steam appfunc(cConfig)GetGamePrice(ctxcontext.Context,bextractor.Browser,appIDint)(*GamePrice,error)// SearchGames searches the Steam store and returns resultsfunc(cConfig)SearchGames(ctxcontext.Context,bextractor.Browser,querystring)([]GamePrice,error)
URL Patterns
Store page: https://store.steampowered.com/app/{appid}
Steam has an age gate on some pages — the extractor would need to handle clicking through it
Prices are region-dependent — the browser's geolocation / store preferences affect what you see
Steam's HTML is relatively stable since they don't change the store layout often
## Description
A Steam Store extractor would let mort track game prices — useful for a new eggwatch-style price monitoring feature but for games. This ties into the mortbux economy nicely: users could be notified of sales, or bet on whether a game will go on sale.
## Proposed API
```go
package steam
type GamePrice struct {
AppID int
Name string
Price float64
OrigPrice float64 // 0 if not on sale
DiscountPct int // 0 if not on sale
OnSale bool
FreeToPlay bool
Currency string
}
type Config struct{}
var DefaultConfig = Config{}
// GetGamePrice extracts price info for a Steam app
func (c Config) GetGamePrice(ctx context.Context, b extractor.Browser, appID int) (*GamePrice, error)
// SearchGames searches the Steam store and returns results
func (c Config) SearchGames(ctx context.Context, b extractor.Browser, query string) ([]GamePrice, error)
```
## URL Patterns
- Store page: `https://store.steampowered.com/app/{appid}`
- Search: `https://store.steampowered.com/search/?term={query}`
## Notes
- Steam has an age gate on some pages — the extractor would need to handle clicking through it
- Prices are region-dependent — the browser's geolocation / store preferences affect what you see
- Steam's HTML is relatively stable since they don't change the store layout often
Implemented in PR #47. Added sites/steam package with GetGamePrice() (by app ID) and SearchGames() (by query). Handles regular prices, discounts, free-to-play, age gate bypass, and USD/EUR/GBP currency detection. Full mock-based test coverage.
Implemented in PR #47. Added `sites/steam` package with `GetGamePrice()` (by app ID) and `SearchGames()` (by query). Handles regular prices, discounts, free-to-play, age gate bypass, and USD/EUR/GBP currency detection. Full mock-based test coverage.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Description
A Steam Store extractor would let mort track game prices — useful for a new eggwatch-style price monitoring feature but for games. This ties into the mortbux economy nicely: users could be notified of sales, or bet on whether a game will go on sale.
Proposed API
URL Patterns
https://store.steampowered.com/app/{appid}https://store.steampowered.com/search/?term={query}Notes
Implemented in PR #47. Added
sites/steampackage withGetGamePrice()(by app ID) andSearchGames()(by query). Handles regular prices, discounts, free-to-play, age gate bypass, and USD/EUR/GBP currency detection. Full mock-based test coverage.