golang MusicBrainz WS2 API客户端插件库GoMusicBrainz的使用
GoMusicBrainz - Golang MusicBrainz WS2 API 客户端库
GoMusicBrainz 是一个用于访问 MusicBrainz WS2 API 的 Golang 客户端库,目前仍在开发中。
当前状态
目前 GoMusicBrainz 提供了执行搜索和查找请求的方法,暂不支持浏览请求。
安装
$ go get github.com/michiwend/gomusicbrainz
搜索请求
GoMusicBrainz 为每种 WS2 搜索请求提供了搜索方法,形式如下:
func (*WS2Client) Search<ENTITY>(searchTerm, limit, offset) (<ENTITY>SearchResponse, error)
searchTerm 遵循 Apache Lucene 语法,可以包含多个带有逻辑运算符的字段,也可以只是一个简单的搜索字符串。关于 lucene 语法的更多细节,请参考 lucene.apache.org。MusicBrainz 网站提供了所有可能的查询字段信息。
示例
这个示例演示了一个简单的搜索请求,用于查找艺术家 “Parov Stelar”。你可以在示例文件夹中找到可运行的 Go 程序。
// 创建一个新的 WS2Client
client := gomusicbrainz.NewWS2Client(
"https://musicbrainz.org/ws/2",
"A GoMusicBrainz example",
"0.0.1-beta",
"http://github.com/michiwend/gomusicbrainz")
// 搜索艺术家
resp, _ := client.SearchArtist(`artist:"Parov Stelar"`, -1, -1)
// 打印每个返回艺术家的名称和分数
for _, artist := range resp.Artists {
fmt.Printf("Name: %-25sScore: %d\n", artist.Name, resp.Scores[artist])
}
上面的代码将产生以下输出:
Name: Parov Stelar Score: 100
Name: Parov Stelar Trio Score: 80
Name: Parov Stelar & the Band Score: 70
查找请求
GoMusicBrainz 提供了两种执行查找请求的方式:对于每个具有查找端点的实体,都有特定的查找方法,形式如下:
func(*WS2Client) Lookup<ETITY>(id MBID, inc ...string) (*<ENTITY>, error)
或者如果你已经有一个实现了 MBLookupEntity 接口的实体(带有 MBID),可以使用通用的查找方法:
func(*WS2Client) Lookup(entity MBLookupEntity, inc ...string) error
示例
以下示例演示了(特定的)LookupArtist 方法。你可以在示例文件夹中找到可运行的 Go 程序。
// 创建一个新的 WS2Client
client, _ := gomusicbrainz.NewWS2Client(
"https://musicbrainz.org/ws/2",
"A GoMusicBrainz example",
"0.0.1-beta",
"http://github.com/michiwend/gomusicbrainz")
// 通过 ID 查找艺术家
artist, err := client.LookupArtist("9a709693-b4f8-4da9-8cc1-038c911a61be")
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%+v", artist)
包文档
完整的包文档可以在 GoDoc 和 GoWalker 上找到。
更多关于golang MusicBrainz WS2 API客户端插件库GoMusicBrainz的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang MusicBrainz WS2 API客户端插件库GoMusicBrainz的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
GoMusicBrainz - MusicBrainz WS2 API 客户端库
GoMusicBrainz 是一个用于与 MusicBrainz 数据库交互的 Go 语言客户端库,实现了 MusicBrainz WS2 API。下面我将介绍如何使用这个库进行常见操作。
安装
首先安装 GoMusicBrainz 库:
go get github.com/michiwend/gomusicbrainz
基本使用
初始化客户端
package main
import (
"fmt"
"log"
"github.com/michiwend/gomusicbrainz"
)
func main() {
// 创建客户端实例
client, err := gomusicbrainz.NewWS2Client(
"https://musicbrainz.org/ws/2",
"YourAppName/Version (contact@example.com)",
gomusicbrainz.RateLimit25PerSecond,
)
if err != nil {
log.Fatal(err)
}
// 使用客户端进行查询...
}
搜索艺术家
func searchArtist(client *gomusicbrainz.WS2Client, name string) {
// 构建搜索查询
query := fmt.Sprintf(`artist:"%s"`, name)
// 执行搜索
resp, err := client.SearchArtist(query, -1, -1)
if err != nil {
log.Fatal(err)
}
// 输出结果
for _, artist := range resp.Artists {
fmt.Printf("ID: %s, Name: %s, Type: %s\n",
artist.ID, artist.Name, artist.Type)
}
}
获取艺术家详细信息
func getArtistDetails(client *gomusicbrainz.WS2Client, mbid string) {
// 设置要包含的额外信息
inc := gomusicbrainz.Inc{
Recordings: true,
Releases: true,
}
// 获取艺术家信息
artist, err := client.LookupArtist(mbid, inc)
if err != nil {
log.Fatal(err)
}
fmt.Printf("艺术家: %s\n", artist.Name)
fmt.Println("专辑:")
for _, release := range artist.Releases {
fmt.Printf("- %s (%s)\n", release.Title, release.Date)
}
}
搜索专辑
func searchRelease(client *gomusicbrainz.WS2Client, title string) {
query := fmt.Sprintf(`release:"%s"`, title)
resp, err := client.SearchRelease(query, -1, -1)
if err != nil {
log.Fatal(err)
}
for _, release := range resp.Releases {
fmt.Printf("ID: %s, Title: %s, Artist: %s\n",
release.ID, release.Title, release.ArtistCredit.NameCredit())
}
}
获取专辑曲目列表
func getReleaseTracks(client *gomusicbrainz.WS2Client, mbid string) {
// 包含曲目信息
inc := gomusicbrainz.Inc{
Recordings: true,
}
release, err := client.LookupRelease(mbid, inc)
if err != nil {
log.Fatal(err)
}
fmt.Printf("专辑: %s\n", release.Title)
fmt.Println("曲目列表:")
for _, medium := range release.Media {
for _, track := range medium.Tracks {
fmt.Printf("%d. %s (%s)\n",
track.Position, track.Recording.Title, track.Length)
}
}
}
高级功能
使用缓存
import (
"github.com/michiwend/gomusicbrainz/cache"
)
func createClientWithCache() *gomusicbrainz.WS2Client {
// 创建内存缓存
memCache := cache.NewMemoryCache()
client, err := gomusicbrainz.NewWS2Client(
"https://musicbrainz.org/ws/2",
"YourAppName/Version",
gomusicbrainz.RateLimit25PerSecond,
)
if err != nil {
log.Fatal(err)
}
// 设置缓存
client.SetCache(memCache)
return client
}
批量查询
func batchLookup(client *gomusicbrainz.WS2Client, mbids []string) {
// 批量查询艺术家
artists, err := client.BrowseArtists("", "", mbids, -1, -1)
if err != nil {
log.Fatal(err)
}
for _, artist := range artists.Artists {
fmt.Println(artist.Name)
}
}
注意事项
- 遵守 MusicBrainz 的使用条款
- 设置合理的用户代理字符串(包含应用名称和联系方式)
- 遵守 API 请求频率限制(默认25次/秒)
- 考虑使用缓存减少重复请求
GoMusicBrainz 提供了完整的 MusicBrainz WS2 API 覆盖,包括艺术家、专辑、曲目、标签等所有主要实体类型的查询功能。更多详细用法可以参考项目的GitHub页面。