golang访问RAWG视频游戏数据库API插件库rawg-sdk-go的使用
Golang访问RAWG视频游戏数据库API插件库rawg-sdk-go的使用
RAWG视频游戏数据库Golang客户端
这是一个非官方的RAWG SDK GO库,包含与RAWG API交互的方法。
安装
go get github.com/dimuska139/rawg-sdk-go
使用方法
下面是一个完整的示例代码,展示如何使用rawg-sdk-go库访问RAWG API:
package main
import (
"context"
"fmt"
"net/http"
"os"
"time"
"github.com/dimuska139/rawg-sdk-go/v3"
)
func main() {
// 配置RAWG客户端
config := rawg.Config{
ApiKey: "yourapikey", // 你的个人API密钥(请在RAWG网站申请)
Language: "en", // 设置返回语言为英文
Rps: 5, // 设置每秒请求限制为5次(RAWG API限制)
}
// 创建RAWG客户端
client := rawg.NewClient(http.DefaultClient, &config)
// 创建游戏过滤器
filter := rawg.NewGamesFilter().
SetSearch("The Witcher 3"). // 搜索游戏名称
SetPage(1). // 设置页码
SetPageSize(5). // 设置每页结果数
WithoutParents() // 排除父游戏
// 创建带有超时的上下文
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
defer cancel()
// 调用API获取游戏数据
games, total, err := client.GetGames(ctx, filter)
if err != nil {
fmt.Printf("获取游戏数据失败: %v\n", err)
os.Exit(1)
}
// 输出结果
fmt.Printf("找到 %d 个结果, 当前显示 %d 个:\n", total, len(games))
for i, game := range games {
fmt.Printf("%d. %s (评分: %.1f)\n", i+1, game.Name, game.Rating)
}
}
API限制
RAWG API限制每个IP每秒最多只能发送5个请求。配置中的"Rps"参数会自动处理这个限制,所以你不需要担心这个问题。
测试
测试代码可以作为文档的一部分参考。你也可以阅读RAWG官方文档了解更多API细节。
许可证
RAWG SDK GO遵循MIT许可证发布。
更多关于golang访问RAWG视频游戏数据库API插件库rawg-sdk-go的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang访问RAWG视频游戏数据库API插件库rawg-sdk-go的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用 rawg-sdk-go 访问 RAWG 视频游戏数据库 API
RAWG 是一个强大的视频游戏数据库 API,而 rawg-sdk-go 是一个非官方的 Go 语言客户端库,用于方便地与 RAWG API 交互。下面我将介绍如何使用这个库。
安装
首先安装 rawg-sdk-go 库:
go get github.com/Davincible/go-rawg
基本使用
1. 初始化客户端
package main
import (
"context"
"fmt"
"log"
"os"
rawg "github.com/Davincible/go-rawg"
)
func main() {
// 从环境变量获取 API 密钥
apiKey := os.Getenv("RAWG_API_KEY")
if apiKey == "" {
log.Fatal("RAWG_API_KEY environment variable not set")
}
// 创建客户端
client, err := rawg.NewClient(apiKey)
if err != nil {
log.Fatalf("Failed to create RAWG client: %v", err)
}
// 设置上下文
ctx := context.Background()
// 示例调用
games, err := client.GetGames(ctx, &rawg.GamesOptions{
PageSize: 5,
})
if err != nil {
log.Fatalf("Failed to get games: %v", err)
}
for _, game := range games.Results {
fmt.Printf("%s (ID: %d)\n", game.Name, game.ID)
}
}
2. 获取游戏详情
func getGameDetails(client *rawg.Client, ctx context.Context, gameID int) {
game, err := client.GetGame(ctx, gameID)
if err != nil {
log.Printf("Failed to get game details: %v", err)
return
}
fmt.Printf("\nGame Details:\n")
fmt.Printf("Name: %s\n", game.Name)
fmt.Printf("Released: %s\n", game.Released)
fmt.Printf("Rating: %.2f\n", game.Rating)
fmt.Printf("Metacritic: %d\n", game.Metacritic)
fmt.Printf("Playtime: %d hours\n", game.Playtime)
fmt.Printf("Description: %s\n", rawg.StripHTMLTags(game.DescriptionRaw))
}
3. 搜索游戏
func searchGames(client *rawg.Client, ctx context.Context, query string) {
games, err := client.GetGames(ctx, &rawg.GamesOptions{
Search: query,
PageSize: 3,
})
if err != nil {
log.Printf("Failed to search games: %v", err)
return
}
fmt.Printf("\nSearch Results for '%s':\n", query)
for _, game := range games.Results {
fmt.Printf("- %s (ID: %d, Rating: %.2f)\n", game.Name, game.ID, game.Rating)
}
}
4. 获取游戏截图
func getGameScreenshots(client *rawg.Client, ctx context.Context, gameID int) {
screenshots, err := client.GetGameScreenshots(ctx, gameID, &rawg.ScreenshotsOptions{
PageSize: 3,
})
if err != nil {
log.Printf("Failed to get screenshots: %v", err)
return
}
fmt.Printf("\nScreenshots:\n")
for _, screenshot := range screenshots.Results {
fmt.Printf("- %s\n", screenshot.Image)
}
}
完整示例
package main
import (
"context"
"fmt"
"log"
"os"
rawg "github.com/Davincible/go-rawg"
)
func main() {
apiKey := os.Getenv("RAWG_API_KEY")
if apiKey == "" {
log.Fatal("RAWG_API_KEY environment variable not set")
}
client, err := rawg.NewClient(apiKey)
if err != nil {
log.Fatalf("Failed to create RAWG client: %v", err)
}
ctx := context.Background()
// 获取热门游戏
fmt.Println("Popular Games:")
games, err := client.GetGames(ctx, &rawg.GamesOptions{
PageSize: 5,
Ordering: "-rating",
})
if err != nil {
log.Fatalf("Failed to get games: %v", err)
}
for _, game := range games.Results {
fmt.Printf("%s (ID: %d, Rating: %.2f)\n", game.Name, game.ID, game.Rating)
}
// 获取第一个游戏的详情
if len(games.Results) > 0 {
getGameDetails(client, ctx, games.Results[0].ID)
getGameScreenshots(client, ctx, games.Results[0].ID)
}
// 搜索游戏
searchGames(client, ctx, "The Witcher 3")
}
func getGameDetails(client *rawg.Client, ctx context.Context, gameID int) {
game, err := client.GetGame(ctx, gameID)
if err != nil {
log.Printf("Failed to get game details: %v", err)
return
}
fmt.Printf("\nGame Details:\n")
fmt.Printf("Name: %s\n", game.Name)
fmt.Printf("Released: %s\n", game.Released)
fmt.Printf("Rating: %.2f\n", game.Rating)
fmt.Printf("Metacritic: %d\n", game.Metacritic)
fmt.Printf("Playtime: %d hours\n", game.Playtime)
fmt.Printf("Description: %s\n", rawg.StripHTMLTags(game.DescriptionRaw))
}
func getGameScreenshots(client *rawg.Client, ctx context.Context, gameID int) {
screenshots, err := client.GetGameScreenshots(ctx, gameID, &rawg.ScreenshotsOptions{
PageSize: 3,
})
if err != nil {
log.Printf("Failed to get screenshots: %v", err)
return
}
fmt.Printf("\nScreenshots:\n")
for _, screenshot := range screenshots.Results {
fmt.Printf("- %s\n", screenshot.Image)
}
}
func searchGames(client *rawg.Client, ctx context.Context, query string) {
games, err := client.GetGames(ctx, &rawg.GamesOptions{
Search: query,
PageSize: 3,
})
if err != nil {
log.Printf("Failed to search games: %v", err)
return
}
fmt.Printf("\nSearch Results for '%s':\n", query)
for _, game := range games.Results {
fmt.Printf("- %s (ID: %d, Rating: %.2f)\n", game.Name, game.ID, game.Rating)
}
}
其他功能
rawg-sdk-go 还支持许多其他功能,包括:
- 获取游戏系列
- 获取游戏平台
- 获取游戏开发商
- 获取游戏发行商
- 获取游戏类型
- 获取游戏标签
- 分页支持
注意事项
- 你需要在 RAWG 官网注册获取 API 密钥
- API 有速率限制,请合理使用
- 某些高级功能可能需要付费订阅
- 注意处理错误和上下文取消
这个库提供了对 RAWG API 的全面封装,使得在 Go 中访问游戏数据变得非常简单。