From 258671004fb0b25fadb9aadd1960004bb894597a Mon Sep 17 00:00:00 2001 From: Mathis Maquenne <124215603+mathismqn@users.noreply.github.com> Date: Tue, 8 Oct 2024 01:37:10 +0200 Subject: [PATCH] feat(song): get media data --- internal/models/media.go | 29 +++++++++++++++++++++++++++++ internal/song/main.go | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 internal/models/media.go create mode 100644 internal/song/main.go diff --git a/internal/models/media.go b/internal/models/media.go new file mode 100644 index 0000000..b95a809 --- /dev/null +++ b/internal/models/media.go @@ -0,0 +1,29 @@ +package models + +type Media []struct { + Type string `json:"media_type"` + Cipher Cipher `json:"cipher"` + Format string `json:"format"` + Sources []Source `json:"sources"` +} + +type Cipher struct { + Type string `json:"type"` +} + +type Source struct { + URL string `json:"url"` + Provider string `json:"provider"` +} + +type MediaResponse struct { + Errors []MediaError `json:"errors"` + Data []struct { + Media Media `json:"media"` + } +} + +type MediaError struct { + Code int `json:"code"` + Message string `json:"message"` +} diff --git a/internal/song/main.go b/internal/song/main.go new file mode 100644 index 0000000..1208dfa --- /dev/null +++ b/internal/song/main.go @@ -0,0 +1,40 @@ +package song + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "net/http" + + "github.com/mathismqn/godeez/internal/models" +) + +func GetMedia(s models.Song) (*models.MediaResponse, error) { + licenseToken := "" + reqBody := fmt.Sprintf(`{"license_token":"%s","media":[{"type":"FULL","formats":[{"cipher":"BF_CBC_STRIPE","format":"FLAC"}]}],"track_tokens":["%s"]}`, licenseToken, s.Token) + + resp, err := http.Post("https://media.deezer.com/v1/get_url", "application/json", bytes.NewBuffer([]byte(reqBody))) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, _ := io.ReadAll(resp.Body) + + var media models.MediaResponse + err = json.Unmarshal(body, &media) + if err != nil { + return nil, err + } + + if len(media.Errors) > 0 { + if media.Errors[0].Code == 1000 { + return nil, fmt.Errorf("invalid license token") + } + + return nil, fmt.Errorf("%s", media.Errors[0].Message) + } + + return &media, nil +}