Fetch data from MusicBrainz

This commit is contained in:
Dan Jones 2023-09-09 21:02:43 -05:00
commit 1e78a95e8a
3 changed files with 89 additions and 5 deletions

View file

@ -38,8 +38,18 @@ func testFp() {
quit()
}
func testMb() {
id := "497f2f22-809b-4c9e-a692-72f7d8dcaaa2"
mb, err := media.GetMbRecording(id)
if err != nil {
panic(err)
}
fmt.Printf("%+v\n", mb)
quit()
}
func Run(step AppStep) {
testFp()
testMb()
for step < Quit {
switch step {
case Pick:

78
media/brainz.go Normal file
View file

@ -0,0 +1,78 @@
package media
import (
"encoding/json"
"fmt"
"io"
"net/http"
//"codeberg.org/danjones000/strip-beats/config"
)
type MbRecording struct {
Id string
FirstReleaseDate string `json:"first-release-date"`
Length int
Title string
Video bool
Releases []MbRelease
}
type MbRelease struct {
Id string
Country string
Date string
Media []MbMedia
Status string
StatusId string `json:"status-id"`
Title string
// ReleaseEvents []MbReleaseEvent `json:"release-events"`
}
type MbMedia struct {
FormatId string `json:"format-id"`
Position int
TrackOffset int `json:"track-offset"`
Format string
TrackCount int `json:"track-count"`
Tracks []MbTrack
}
type MbTrack struct {
Id string
Number string
Title string
Position int
Length int
}
func GetMbRecording(id string) (MbRecording, error) {
rec := MbRecording{Id: id}
err := FillMbRecording(&rec)
return rec, err
}
func FillMbRecording(rec *MbRecording) error {
url := fmt.Sprintf("https://musicbrainz.org/ws/2/recording/%s", rec.Id)
req, err := http.NewRequest(http.MethodGet, url, nil)
if err != nil {
return err
}
q := req.URL.Query()
q.Add("fmt", "json")
q.Add("inc", "releases+media")
req.URL.RawQuery = q.Encode()
req.Header.Set("User-Agent", "strip-beats/0.1.0 (https://codeberg.org/danjones000/strip-beats/)")
resp, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
return err
}
err = json.Unmarshal(body, rec)
return err
}

View file

@ -54,10 +54,6 @@ type IdError struct {
Message string
}
type MbRecording struct {
Id string
}
func LookupFingerprint(print FPrint) (IdResults, error) {
res := IdResults{}
key := config.GetConfig().AcousticIdKey