package models import ( "encoding/json" "fmt" "io" "net/http" ) type LastFMResponse struct { RecentTracks struct { Track []struct { Name string `json:"name"` Artist struct { Name string `json:"#text"` } `json:"artist"` Album struct { Name string `json:"#text"` } `json:"album"` Date struct { Unix string `json:"#text"` } `json:"date"` } `json:"track"` } `json:"recenttracks"` } func GetRecentTracks(username, apiKey string) (*LastFMResponse, error) { url := fmt.Sprintf("https://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=%s&api_key=%s&format=json", username, apiKey) resp, err := http.Get(url) if err != nil { return nil, fmt.Errorf("lastfm get resp err: %v", err) } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { return nil, fmt.Errorf("lastfm read resp body err: %v", err) } var lastFMResponse LastFMResponse if err := json.Unmarshal(body, &lastFMResponse); err != nil { return nil, fmt.Errorf("lastfm unmarshal err: %v", err) } return &lastFMResponse, nil }