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 还支持许多其他功能,包括:

  • 获取游戏系列
  • 获取游戏平台
  • 获取游戏开发商
  • 获取游戏发行商
  • 获取游戏类型
  • 获取游戏标签
  • 分页支持

注意事项

  1. 你需要在 RAWG 官网注册获取 API 密钥
  2. API 有速率限制,请合理使用
  3. 某些高级功能可能需要付费订阅
  4. 注意处理错误和上下文取消

这个库提供了对 RAWG API 的全面封装,使得在 Go 中访问游戏数据变得非常简单。

回到顶部