forked from nite/go-igdb
u
This commit is contained in:
107
README.md
107
README.md
@@ -1,15 +1,15 @@
|
||||
# go-igdb
|
||||
|
||||
A Go client library for the IGDB (Internet Game Database) API v4. This library provides a simple and efficient way to interact with IGDB's protobuf-based API.
|
||||
A Go client library for the IGDB (Internet Game Database) API v4. This library provides a convenient way to interact with IGDB's protobuf-based API endpoints.
|
||||
|
||||
## Features
|
||||
|
||||
- Full support for IGDB API v4
|
||||
- Protobuf-based communication for better performance
|
||||
- Full support for IGDB API v4 endpoints
|
||||
- Protobuf-based communication for efficient data transfer
|
||||
- Rate limiting support
|
||||
- Automatic token management for Twitch authentication
|
||||
- Built-in retry mechanism for failed requests
|
||||
- Optional Cloudflare bypass support via FlareSolverr
|
||||
- All endpoints are supported
|
||||
- Retry mechanism for failed requests
|
||||
- Optional FlareSolverr integration for handling Cloudflare protection
|
||||
|
||||
## Installation
|
||||
|
||||
@@ -20,41 +20,94 @@ go get github.com/bestnite/go-igdb
|
||||
## Quick Start
|
||||
|
||||
```go
|
||||
// Create a new IGDB client
|
||||
client := igdb.New("your-client-id", "your-client-secret")
|
||||
package main
|
||||
|
||||
// Get a game by ID
|
||||
game, err := client.GetGameByID(1942)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/bestnite/go-igdb"
|
||||
pb "github.com/bestnite/go-igdb/proto"
|
||||
)
|
||||
|
||||
func Test1(c *igdb.Client) {
|
||||
game, err := igdb.GetItemByID[pb.Game](1942, c.Games.Query)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Printf("Name of game %d: %s\n", 1942, game.Name)
|
||||
}
|
||||
fmt.Printf("Game: %s\n", game.Name)
|
||||
|
||||
// Search games with custom query
|
||||
games, err := client.GetGames("search \"Zelda\"; fields name,rating,release_dates.*;")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
func Test2(c *igdb.Client) {
|
||||
games, err := igdb.GetItemsByIDs[pb.Game]([]uint64{119171, 119133}, c.Games.Query)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Printf("Names of games %d and %d: %s and %s\n", 119171, 119133, games[0].Name, games[1].Name)
|
||||
}
|
||||
|
||||
func Test3(c *igdb.Client) {
|
||||
total, err := igdb.GetItemsLength[pb.Game](c.Games.Query)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Printf("Total number of games: %d\n", total)
|
||||
}
|
||||
|
||||
func Test4(c *igdb.Client) {
|
||||
games, err := igdb.GetItemsPagniated[pb.Game](0, 10, c.Games.Query)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Printf("Names of ids 0 to 10 games:\n")
|
||||
for _, game := range games {
|
||||
log.Println(game.Name)
|
||||
}
|
||||
}
|
||||
|
||||
func Test5(c *igdb.Client) {
|
||||
game, err := igdb.AssertSingle[pb.Game](c.Games.Query("fields name,rating; sort rating desc; limit 1;"))
|
||||
if err != nil {
|
||||
log.Fatalf("failed to get game: %s", err)
|
||||
}
|
||||
log.Printf("Name of first game with highest rating: %s\n", game.Name)
|
||||
}
|
||||
|
||||
func Test6(c *igdb.Client) {
|
||||
games, err := igdb.AssertSlice[pb.Game](c.Games.Query("fields *; where rating > 70; limit 10;"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
log.Printf("Names of games with rating > 70 limit 10:\n")
|
||||
for _, game := range games {
|
||||
log.Println(game.Name)
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
client := igdb.New("your-client-id", "your-client-secret")
|
||||
Test1(client)
|
||||
Test2(client)
|
||||
Test3(client)
|
||||
Test4(client)
|
||||
Test5(client)
|
||||
Test6(client)
|
||||
}
|
||||
```
|
||||
|
||||
## Advanced Usage
|
||||
|
||||
### Query Format
|
||||
|
||||
The library uses IGDB's query syntax. For example:
|
||||
### Using with FlareSolverr
|
||||
|
||||
```go
|
||||
// Get games released in 2023
|
||||
games, err := client.GetGames("where release_dates.y = 2023; fields name,rating;")
|
||||
import "github.com/bestnite/go-flaresolverr"
|
||||
|
||||
// Get specific fields for a company
|
||||
companies, err := client.GetCompanies("where id = 1234; fields name,description,country;")
|
||||
flaresolverr := flaresolverr.New("http://localhost:8191")
|
||||
client := igdb.NewWithFlaresolverr("your-client-id", "your-client-secret", flaresolverr)
|
||||
```
|
||||
|
||||
## Requirements
|
||||
### Rate Limiting
|
||||
|
||||
- Go 1.24 or higher
|
||||
- IGDB/Twitch API credentials (Client ID and Client Secret)
|
||||
The client automatically handles rate limiting with a default of 4 requests per second. This helps prevent hitting IGDB's rate limits.
|
||||
|
||||
## Contributing
|
||||
|
||||
|
||||
Reference in New Issue
Block a user