golang The Movie Database API v3 封装插件库golang-tmdb的使用
golang The Movie Database API v3 封装插件库golang-tmdb的使用
这是一个用于TMDb API的Golang封装库。
要求
- Go 1.18.x 或更高版本。我们旨在支持Go的最新版本。
安装
go get -u github.com/cyruzin/golang-tmdb
使用方法
首先导入tmdb
包并初始化客户端:
import "github.com/cyruzin/golang-tmdb"
// 使用API v3
tmdbClient, err := tmdb.Init(os.Getenv("YOUR_APIKEY"))
if err != nil {
fmt.Println(err)
}
// 使用API v4
tmdbClient, err := tmdb.InitV4(os.Getenv("YOUR_BEARER_TOKEN"))
if err != nil {
fmt.Println(err)
}
// 可选:启用自动重试功能
// 如果之前的请求失败(429 TOO MANY REQUESTS),此选项将重试
tmdbClient.SetClientAutoRetry()
// 可选:如果默认URL有问题,设置备用基本URL
// 使用https://api.tmdb.org/3代替https://api.themoviedb.org/3
tmdbClient.SetAlternateBaseURL()
// 可选:用于测试,设置自定义基本URL
tmdbClient.SetCustomBaseURL("http://localhost:3000")
// 获取当前基本URL
tmdbClient.GetBaseURL()
// 可选:为http.Client设置自定义配置
// 默认超时为10秒。在这里你可以设置其他选项如Timeout和Transport
customClient := http.Client{
Timeout: time.Second * 5,
Transport: &http.Transport{
MaxIdleConns: 10,
IdleConnTimeout: 15 * time.Second,
},
}
tmdbClient.SetClientConfig(customClient)
// 可选:如果你要使用需要session id的端点,启用此选项
tmdbClient.SetSessionID(os.Getenv("YOUR_SESSION_ID"))
// 获取电影详情
movie, err := tmdbClient.GetMovieDetails(297802, nil)
if err != nil {
fmt.Println(err)
}
fmt.Println(movie.Title)
带可选参数:
options := map[string]string{
"language": "pt-BR",
"append_to_response": "credits,images",
}
movie, err := tmdbClient.GetMovieDetails(297802, options)
if err != nil {
fmt.Println(err)
}
fmt.Println(movie.Title)
辅助功能
生成图片和视频URL:
options := map[string]string{
"append_to_response": "videos",
}
movie, err := tmdbClient.GetMovieDetails(297802, options)
if err != nil {
fmt.Println(err)
}
// 获取图片URL
fmt.Println(tmdb.GetImageURL(movie.BackdropPath, tmdb.W500))
// 输出: https://image.tmdb.org/t/p/w500/bOGkgRGdhrBYJSLpXaxhXVstddV.jpg
fmt.Println(tmdb.GetImageURL(movie.PosterPath, tmdb.Original))
// 输出: https://image.tmdb.org/t/p/original/bOGkgRGdhrBYJSLpXaxhXVstddV.jpg
// 获取视频URL
for _, video := range movie.MovieVideosAppend.Videos.Results {
if video.Key != "" {
fmt.Println(tmdb.GetVideoURL(video.Key))
// 输出: https://www.youtube.com/watch?v=6ZfuNTqbHE8
}
}
性能
获取电影详情:
迭代次数 | ns/op | B/op | allocs/op |
---|---|---|---|
19 | 60886648 | 60632 | 184 |
多搜索:
迭代次数 | ns/op | B/op | allocs/op |
---|---|---|---|
16 | 66596963 | 107109 | 608 |
测试
要进行本地测试,只需运行:
go test -v
许可证
MIT
更多关于golang The Movie Database API v3 封装插件库golang-tmdb的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang The Movie Database API v3 封装插件库golang-tmdb的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang TMDB API v3 封装库使用指南
TMDB (The Movie Database) 是一个流行的电影和电视节目数据库,提供了丰富的API。golang-tmdb
是一个用于访问TMDB API v3的Golang封装库。
安装
首先安装golang-tmdb库:
go get github.com/cyruzin/golang-tmdb
基本使用
初始化客户端
package main
import (
"fmt"
"log"
tmdb "github.com/cyruzin/golang-tmdb"
)
func main() {
// 使用你的TMDB API密钥初始化客户端
tmdbClient, err := tmdb.Init("your-api-key-here")
if err != nil {
log.Fatal(err)
}
// 可选: 设置语言(默认为en-US)
tmdbClient.SetClientAutoRetry()
tmdbClient.SetLanguage("zh-CN")
}
获取电影详情
func getMovieDetails(client *tmdb.Client, movieID int64) {
// 获取电影详情
movie, err := client.GetMovieDetails(movieID, nil)
if err != nil {
log.Fatal(err)
}
fmt.Printf("电影标题: %s\n", movie.Title)
fmt.Printf("上映日期: %s\n", movie.ReleaseDate)
fmt.Printf("简介: %s\n", movie.Overview)
fmt.Printf("评分: %.1f\n", movie.VoteAverage)
}
搜索电影
func searchMovies(client *tmdb.Client, query string) {
options := map[string]string{
"query": query,
}
// 搜索电影
result, err := client.GetSearchMovies(options)
if err != nil {
log.Fatal(err)
}
fmt.Printf("找到 %d 部电影\n", result.TotalResults)
for _, movie := range result.Results {
fmt.Printf("- %s (%s)\n", movie.Title, movie.ReleaseDate)
}
}
获取热门电影
func getPopularMovies(client *tmdb.Client) {
options := map[string]string{
"page": "1",
}
// 获取热门电影
movies, err := client.GetMoviePopular(options)
if err != nil {
log.Fatal(err)
}
fmt.Println("当前热门电影:")
for _, movie := range movies.Results {
fmt.Printf("- %s (评分: %.1f)\n", movie.Title, movie.VoteAverage)
}
}
获取电影图片
func getMovieImages(client *tmdb.Client, movieID int64) {
// 获取电影图片
images, err := client.GetMovieImages(movieID, nil)
if err != nil {
log.Fatal(err)
}
if len(images.Backdrops) > 0 {
// 获取第一张背景图
imageURL := "https://image.tmdb.org/t/p/original" + images.Backdrops[0].FilePath
fmt.Printf("背景图URL: %s\n", imageURL)
}
if len(images.Posters) > 0 {
// 获取第一张海报
posterURL := "https://image.tmdb.org/t/p/original" + images.Posters[0].FilePath
fmt.Printf("海报URL: %s\n", posterURL)
}
}
高级功能
使用选项参数
许多API方法接受选项参数来过滤结果:
func getMoviesWithOptions(client *tmdb.Client) {
options := map[string]string{
"page": "1",
"language": "zh-CN",
"region": "CN",
"include_adult": "false",
"primary_release_year": "2023",
}
movies, err := client.GetDiscoverMovie(options)
if err != nil {
log.Fatal(err)
}
fmt.Println("2023年发行的电影:")
for _, movie := range movies.Results {
fmt.Printf("- %s\n", movie.Title)
}
}
处理分页
func getAllPopularMovies(client *tmdb.Client) {
var allMovies []*tmdb.MovieShort
page := 1
totalPages := 1
for page <= totalPages {
options := map[string]string{
"page": fmt.Sprintf("%d", page),
}
result, err := client.GetMoviePopular(options)
if err != nil {
log.Fatal(err)
}
allMovies = append(allMovies, result.Results...)
totalPages = result.TotalPages
page++
}
fmt.Printf("总共获取了 %d 部热门电影\n", len(allMovies))
}
错误处理
func safeGetMovieDetails(client *tmdb.Client, movieID int64) {
movie, err := client.GetMovieDetails(movieID, nil)
if err != nil {
if tmdbErr, ok := err.(*tmdb.Error); ok {
fmt.Printf("TMDB API错误: %s (状态码: %d)\n", tmdbErr.Message, tmdbErr.StatusCode)
return
}
log.Fatal(err)
}
fmt.Printf("成功获取电影: %s\n", movie.Title)
}
完整示例
package main
import (
"fmt"
"log"
tmdb "github.com/cyruzin/golang-tmdb"
)
func main() {
// 初始化客户端
tmdbClient, err := tmdb.Init("your-api-key-here")
if err != nil {
log.Fatal(err)
}
// 设置中文
tmdbClient.SetLanguage("zh-CN")
// 搜索电影
searchMovies(tmdbClient, "复仇者联盟")
// 获取特定电影详情
getMovieDetails(tmdbClient, 299536) // 复仇者联盟3:无限战争
// 获取热门电影
getPopularMovies(tmdbClient)
}
// 其他函数定义同上...
注意事项
- 确保遵守TMDB API的使用条款
- 考虑实现缓存机制以减少API调用
- 处理API速率限制(默认每秒40次请求)
- 对于生产环境,考虑使用环境变量存储API密钥
这个封装库提供了对TMDB API的全面访问,包括电影、电视节目、人物、搜索等功能。更多详细用法可以参考库的GitHub页面和TMDB官方API文档。