Documentation
¶
Overview ¶
Package poeapi provides a client for the Path of Exile API.
Features include support for all API endpoints, thread-safe operations, built-in caching and ratelimiting, and no reliance on external packages.
Usage:
clientOpts := poeapi.ClientOptions{
Host: "api.pathofexile.com", // The primary API domain.
NinjaHost: "poe.ninja", // Used to get latest stash ID.
UseSSL: true, // Use HTTPS for requests.
UseCache: true, // Enable the in-memory cache.
UseDNSCache: true, // Enable the in-memory DNS resolution cache.
CacheSize: 200, // Number of items to store.
RateLimit: 4.0, // Requests per second.
StashRateLimit: 1.0, // Requests per second for trade API.
RequestTimeout: 5 * time.Second // Time to wait before canceling requests.
} // This is equivalent to poeapi.DefaultClientOptions.
client, err := poeapi.NewAPIClient(clientOpts)
if err != nil {
// Handle error.
}
ladder, err := client.GetLadder(poeapi.GetLadderOptions{
ID: "SSF Hardcore",
Realm: "pc",
Type: "league",
})
// Etc.
See the APIClient interface for the full description of methods available.
Index ¶
- Constants
- Variables
- type APIClient
- type Account
- type Challenges
- type Character
- type ClientOptions
- type GetLadderOptions
- type GetLeagueOptions
- type GetLeagueRuleOptions
- type GetLeaguesOptions
- type GetPVPMatchesOptions
- type GetStashOptions
- type Item
- type Ladder
- type LadderEntry
- type League
- type LeagueRule
- type PVPMatch
- type Property
- type Requirement
- type Socket
- type Stash
- type StashResponse
- type TwitchInfo
Constants ¶
const ( // DefaultHost sets the hostname used by the client. This is set to // api.pathofexile.com, but may be overridden for testing purposes. DefaultHost = "api.pathofexile.com" // DefaultNinjaHost sets the hostname used to retrieve the latest stash // change ID from poe.ninja. This is set to "poe.ninja" but may be // overridden for testing purposes. DefaultNinjaHost = "poe.ninja" // DefaultRateLimit sets the rate limit for all endpoints except for the // stash endpoint. Most endpoints have a rate limit of 5 requests per // second. Tests performed with the ratetest program (cmd/ratetest) show // occasional failures at this rate, so we back down to 4 requests per // second by default to err on the side of caution. DefaultRateLimit = 4.0 // DefaultStashRateLimit sets the rate limit for the stash endpoint. // The stash API has a rate limit of 1 request per second. DefaultStashRateLimit = 1.0 // DefaultCacheSize sets the number of items which can be stores in the // in-memory LRU cache. A typical response from the API is around 500KB. // By default, allow around 200x500KB=100MB total cache memory usage. DefaultCacheSize = 200 // DefaultRequestTimeout sets the time to wait before canceling HTTP // requests. Some endpoits take over 2-3s to respond, so we use 5s as a // a default. DefaultRequestTimeout = 5 * time.Second )
const (
// UnlimitedRate disables rate limiting when used as a rate limit.
UnlimitedRate = 0
)
Variables ¶
var ( // ErrBadRequest is raised when we have sent a malformed request to the API. ErrBadRequest = errors.New("bad request") // ErrNotFound is raised when we have requested an invalid URL. ErrNotFound = errors.New("url not found") // ErrRateLimited is raised when we exceed the API rate limits. ErrRateLimited = errors.New("rate limited") // ErrServerFailure is raised when the API returns a 5xx response for any // reason. ErrServerFailure = errors.New("server error") // ErrUnknownFailure is raised when an undocumented status code is returned // by the API. This should never occur, but is handled anyway. ErrUnknownFailure = errors.New("unknown server failure") // ErrInvalidHost is raised when an unsupported hostname is provided. ErrInvalidHost = errors.New("invalid API host") // ErrInvalidNinjaHost is raised when the poe.ninja hostname is omitted. ErrInvalidNinjaHost = errors.New("invalid poe.ninja host") // ErrInvalidRateLimit is raised when the general rate limit is out of // range. ErrInvalidRateLimit = errors.New("invalid rate limit") // ErrInvalidStashRateLimit is raised when the stash rate limit is out of // range. ErrInvalidStashRateLimit = errors.New("invalid stash rate limit") // ErrInvalidRequestTimeout is raised when request timeout is too small. ErrInvalidRequestTimeout = errors.New("invalid request timeout") // ErrInvalidCacheSize is raised when the cache size is out of range. ErrInvalidCacheSize = errors.New("invalid cache size") // ErrNotFoundInCache is raised when a value is requested from the cache // before it is written. ErrNotFoundInCache = errors.New("not found in cache") // ErrInvalidAddress is raised when a malformed IP address is returned by // the DNS cache. ErrInvalidAddress = errors.New("invalid ip address") // ErrMissingID is raised when the user fails to provide a league ID for a // ladder request. ErrMissingID = errors.New("missing league id") // ErrInvalidRealm is raised when the provided realm is not pc, xbox, or // sony. ErrInvalidRealm = errors.New("invalid realm") // ErrInvalidLimit is raised when the page size limit is out of bounds. ErrInvalidLimit = errors.New("invalid limit") // ErrInvalidOffset is raised when the page offset is out of bounds. ErrInvalidOffset = errors.New("invalid offset") // ErrInvalidLadderType is raised when the provided type is not league, pvp, // or labyrinth. ErrInvalidLadderType = errors.New("invalid ladder type") // ErrInvalidDifficulty is raised when the provided difficulty is not Normal, // Cruel, Merciless, or Eternal. ErrInvalidDifficulty = errors.New("invalid difficulty") // ErrInvalidLabyrinthStartTime is raised when the provided Unix timestamp // is below zero, above zero but earlier than the release of the Labyrinth, // or is an invalid timestamp. ErrInvalidLabyrinthStartTime = errors.New("invalid labyrinth start time") // ErrInvalidLeagueRuleID is raised when the ID is missing in a league rule // request. ErrInvalidLeagueRuleID = errors.New("missing league rule id") // ErrInvalidSeason is raised when requesting a season league with a missing // season name. ErrInvalidSeason = errors.New("invalid season") // ErrInvalidLeagueType is raised when requesting a league whose type is not // supported by the API. ErrInvalidLeagueType = errors.New("invalid league type") // ErrInvalidLeagueID is raised when the league ID is omitted from a league // request. ErrInvalidLeagueID = errors.New("invalid league id") // ErrInvalidStashID is raised when the stash ID is omitted from a stash // request. ErrInvalidStashID = errors.New("invalid stash id") )
var DefaultClientOptions = ClientOptions{ Host: DefaultHost, NinjaHost: DefaultNinjaHost, UseSSL: true, UseCache: true, CacheSize: DefaultCacheSize, UseDNSCache: true, RateLimit: DefaultRateLimit, StashRateLimit: DefaultStashRateLimit, RequestTimeout: DefaultRequestTimeout, }
DefaultClientOptions initializes the client with the most common settings.
Functions ¶
This section is empty.
Types ¶
type APIClient ¶
type APIClient interface {
// GetLadder sends multiple ladder requests to construct the entire ladder
// for a given league in a single call. Ladders contain information about
// the top-ranked characters in a given league. Up to 15,000 characters may
// be returned.
GetLadder(GetLadderOptions) (Ladder, error)
// GetLeague retrieves all league (Standard, Hardcore, etc.) from the API.
// Responses include information such as start and end times and rules for
// the league.
GetLeagues(GetLeaguesOptions) ([]League, error)
// GetLeague retrieves a single league from the API by ID.
GetLeague(GetLeagueOptions) (League, error)
// GetLeagueRules retrieves all available league modifiers from the API.
// These modifiers affect league mechanics, such as the 'Turbo' rule
// granting increased attack, cast, and movement speed to monsters.
GetLeagueRules() ([]LeagueRule, error)
// GetLeagueRule retrieves a single rule from the API by ID.
GetLeagueRule(GetLeagueRuleOptions) (LeagueRule, error)
// GetPVPMatches retrieves past or upcoming PVP matches from the API.
// Specific seasons may be requested in order to view past events.
// Alternatively, not specifying a season returns all upcoming events.
GetPVPMatches(GetPVPMatchesOptions) ([]PVPMatch, error)
// GetStashes retrieves a batch of stashes from the trade API. Each response
// contains a set of stashes which can be parsed for specific items.
// Responses also include a "next change ID" which is used to request the
// next set of stashes in chronological order (by publish time).
GetStashes(GetStashOptions) (StashResponse, error)
// GetLatestStashID retrieves the latest stash tab ID from poe.ninja. This
// is helpful when building real-time trade applications, as not specifying
// a stash ID starts from the beginning of time. This makes a single request
// to poe.ninja's API, and caches the response to avoid subsequent traffic.
GetLatestStashID() (string, error)
}
APIClient provides methods for interacting with the Path of Exile API.
func NewAPIClient ¶
func NewAPIClient(opts ClientOptions) (APIClient, error)
NewAPIClient configures and returns an APIClient.
type Account ¶
type Account struct {
Name string `json:"name"`
Realm string `json:"realm"`
Challenges Challenges `json:"challenges"`
TwitchInfo TwitchInfo `json:"twitch"`
}
Account represents an account for a ladder entry.
type Challenges ¶
type Challenges struct {
Total int `json:"total"`
}
Challenges represents an account's completed challenges.
type Character ¶
type Character struct {
Name string `json:"name"`
Level int `json:"level"`
Class string `json:"class"`
ID string `json:"id"`
Experience int `json:"experience"`
}
Character represents a player in a ladder entry.
type ClientOptions ¶
type ClientOptions struct {
// The hostname used by the client.
Host string
// The hostname used for poe.ninja requests.
NinjaHost string
// Set to false if your network does not allow outbound HTTPS traffic.
UseSSL bool
// Set to false to always hit the API for requests instead of using a local
// cache. Caching is always disabled for stash requests, since retrieving
// a cached stash means we will never get a new change ID.
UseCache bool
// The number of items which can be stored in the cache. Most endpoints
// have a response size up to 500KB or so.
CacheSize int
// Set to true to cache DNS resolution locally, speeding up subsequent
// requests. Go's resolver does not cache by default.
UseDNSCache bool
// The number of requests per second for all API endpoints except the stash
// tab endpoint. The API will ratelimit clients above 5rps.
RateLimit float64
// The number of requests per second for the stash endpoint. The API
// will ratelimit clients above 1rps.
StashRateLimit float64
// Time to wait before canceling HTTP requests.
RequestTimeout time.Duration
}
ClientOptions contains settings for client initialization.
type GetLadderOptions ¶
type GetLadderOptions struct {
// The name of the league whose ladder you want to retrieve.
ID string
// The realm of the ladder.
// Valid options: 'pc', 'xbox', or 'sony'.
Realm string
// The type of league whose ladder you want to retrieve.
// Valid options: 'league', 'pvp', or 'labyrinth'.
Type string
// Associate UUIDs with each character returned for tracking purposes.
UniqueIDs bool
// Only include the given account in results.
AccountName string
// Difficulty of the Labyrinth ladder to retrieve.
// Valid options: 'Normal', 'Cruel', 'Merciless', or 'Eternal'.
LabyrinthDifficulty string
// Start time of the Labyrinth ladder to retrieve. This is a Unix timestamp.
LabyrinthStartTime int
// contains filtered or unexported fields
}
GetLadderOptions contains the request parameters for the ladder endpoint. All parameters are optional with the exception of ID.
type GetLeagueOptions ¶
type GetLeagueOptions struct {
// The name of the league to retrieve.
ID string
// The realm of the ladder.
// Valid options: 'pc', 'xbox', or 'sony'.
Realm string
}
GetLeagueOptions contains the request parameters for the league endpoint. ID is a required option, and Realm is optional. The API allows callers to request the ladder alongside the league, but this is not implemented. Use the GetLadder() method instead.
type GetLeagueRuleOptions ¶
type GetLeagueRuleOptions struct {
// The identifier of the league rule to retrieve.
ID string
}
GetLeagueRuleOptions contains the request parameters for the league rules endpoint. The only parameter, ID, is required.
type GetLeaguesOptions ¶
type GetLeaguesOptions struct {
// The type of leagues to retrieve.
// Valid options: 'main', 'event', or 'season'.
Type string
// The realm of leagues to retrieve.
// Valid options: 'pc', 'xbox', or 'sony'.
Realm string
// The name of the season to retrieve. Requires when Type is 'season'.
Season string
// Set to true to omit rules, registration time, and description from the
// response.
Compact bool
// Number of leagues to retrieve. Defaults to 50, and is capped at 50 when
// Compact is false, but can go up to 230 when Compact is true. This is only
// needed when retrieving seasonal leagues, such as the 'Medallion' season
// which had 139 leagues.
Limit int
// Starting index for bulk league retrieval. Only needed when requesting
// more than 50 leagues.
Offset int
}
GetLeaguesOptions contains the request parameters for the leagues endpoint. All parameters are optional.
type GetPVPMatchesOptions ¶
type GetPVPMatchesOptions struct {
// The type of matches to find. Set to 'season' to search for a specific PVP
// season, or leave blank to return all upcoming PVP matches.
Type string
// The name of the season for which to retrieve matches.
Season string
// The realm of PVP matches to retrieve.
// Valid options: 'pc', 'xbox', or 'sony'.
Realm string
}
GetPVPMatchesOptions contains the request parameters for the PVP matches endpoint. All parameters are optional.
type GetStashOptions ¶
type GetStashOptions struct {
// ID is the unique change ID containing a set of stashes. If ID is omitted,
// the API will return the oldest stash tab possible.
ID string
}
GetStashOptions contains the request parameters for the stash endpoint.
type Item ¶
type Item struct {
Corrupted bool `json:"corrupted"`
ExplicitMods []string `json:"explicitMods"`
FlavorText []string `json:"flavourText"`
FrameType int64 `json:"frameType"`
Height int64 `json:"h"`
ID string `json:"id"`
Icon string `json:"icon"`
Identified bool `json:"identified"`
ImplicitMods []string `json:"implicitMods"`
InventoryID string `json:"inventoryId"`
ItemLevel int64 `json:"ilvl"`
League string `json:"league"`
LockedToCharacter bool `json:"lockedToCharacter"`
Name string `json:"name"`
Note string `json:"note"`
Properties []Property `json:"properties"`
Requirements []Requirement `json:"requirements"`
SocketedItems interface{} `json:"socketedItems"`
Sockets []Socket `json:"sockets"`
Support bool `json:"support"`
TalismanTier int64 `json:"talismanTier"`
TypeLine string `json:"typeLine"`
Verified bool `json:"verified"`
Width int64 `json:"w"`
XPosition int64 `json:"x"`
YPosition int64 `json:"y"`
}
Item represents an item listing in the stash tab API.
type Ladder ¶
type Ladder struct {
TotalEntries int `json:"total" validate:"nonzero"`
Title string `json:"title"`
StartTime int `json:"startTime"`
Entries []LadderEntry `json:"entries"`
}
Ladder represents the leaderboard for a specific league.
type LadderEntry ¶
type LadderEntry struct {
Online bool `json:"bool"`
Rank int `json:"rank"`
LabyrinthTime int `json:"time"`
Character Character `json:"character"`
Account Account `json:"account"`
}
LadderEntry represents an entry on the ladder.
type League ¶
type League struct {
Name string `json:"id" validate:"nonzero"`
Realm string `json:"realm"`
Description string `json:"description"`
LadderURL string `json:"url"`
StartTime time.Time `json:"startAt"`
EndTime time.Time `json:"endAt"`
DelveEnabled bool `json:"delveEvent"`
Rules []LeagueRule `json:"rules"`
}
League represents a permanent or challenge league.
type LeagueRule ¶
type LeagueRule struct {
ID string `json:"id" validate:"nonzero"`
Name string `json:"name"`
Description string `json:"description"`
}
LeagueRule represents a modifier placed on a league.
type PVPMatch ¶
type PVPMatch struct {
ID string `json:"id"`
Realm string `json:"realm"`
StartTime time.Time `json:"startAt"`
EndTime time.Time `json:"endAt"`
LadderURL string `json:"url"`
Description string `json:"description"`
GlickoRatings bool `json:"glickoRatings"`
PVP bool `json:"pvp"`
Style string `json:"style"`
RegisterTime time.Time `json:"registerAt"`
}
PVPMatch represents a PVP event type.
type Property ¶
type Property struct {
DisplayMode int64 `json:"displayMode"`
Name string `json:"name"`
Values [][]interface{} `json:"values"`
}
Property represents a property of an Item.
type Requirement ¶
type Requirement struct {
DisplayMode int64 `json:"displayMode"`
Name string `json:"name"`
Values [][]interface{} `json:"values"`
}
Requirement represents an attribute requirement on an Item, such as strength.
type Stash ¶
type Stash struct {
ID string `json:"id"`
AccountName string `json:"accountName"`
LastCharacterName string `json:"lastCharacterName"`
Index string `json:"stash"`
Type string `json:"stashType"`
Items []Item `json:"items"`
Public bool `json:"public"`
}
Stash represents a single public stash tab.
type StashResponse ¶
type StashResponse struct {
NextChangeID string `json:"next_change_id"`
Stashes []Stash `json:"stashes"`
}
StashResponse represents a response from the stash tab API which contains multiples stashes.
type TwitchInfo ¶
type TwitchInfo struct {
Username string `json:"name"`
}
TwitchInfo represents an account's linked Twitch user.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
ratetest
command
ratetest attempts to reverse engineer the rate limits for the PoE API.
|
ratetest attempts to reverse engineer the rate limits for the PoE API. |
|
examples
|
|
|
itemnotifier
command
|
|
|
ladderstats
command
ladderstats prints the distribution of character classes in a ladder.
|
ladderstats prints the distribution of character classes in a ladder. |
|
leaguetimer
command
leaguetimer prints the time remaining for the current challenge league.
|
leaguetimer prints the time remaining for the current challenge league. |
|
listleaguerules
command
listleaguerules prints all league rules from the API.
|
listleaguerules prints all league rules from the API. |
|
upcomingmatches
command
upcomingmatches prints the number of upcoming PVP events.
|
upcomingmatches prints the number of upcoming PVP events. |