diff --git a/core/agents/deezer/client.go b/core/agents/deezer/client.go index e75526d80..2c07d53db 100644 --- a/core/agents/deezer/client.go +++ b/core/agents/deezer/client.go @@ -8,8 +8,11 @@ import ( "io" "net/http" "net/url" + "regexp" "strconv" + "strings" + "github.com/microcosm-cc/bluemonday" "github.com/navidrome/navidrome/log" ) @@ -81,3 +84,94 @@ func (c *client) parseError(data []byte) error { } return fmt.Errorf("deezer error(%d): %s", deezerError.Error.Code, deezerError.Error.Message) } + +func (c *client) getRelatedArtists(ctx context.Context, artistID int) ([]Artist, error) { + req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("%s/artist/%d/related", apiBaseURL, artistID), nil) + if err != nil { + return nil, err + } + + var results RelatedArtists + err = c.makeRequest(req, &results) + if err != nil { + return nil, err + } + + return results.Data, nil +} + +func (c *client) getTopTracks(ctx context.Context, artistID int, limit int) ([]Track, error) { + params := url.Values{} + params.Add("limit", strconv.Itoa(limit)) + req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("%s/artist/%d/top", apiBaseURL, artistID), nil) + if err != nil { + return nil, err + } + req.URL.RawQuery = params.Encode() + + var results TopTracks + err = c.makeRequest(req, &results) + if err != nil { + return nil, err + } + + return results.Data, nil +} + +var dzrAppStateRegex = regexp.MustCompile(`window\.__DZR_APP_STATE__\s*=\s*({.+?})\s*`) +var strictPolicy = bluemonday.StrictPolicy() + +func (c *client) getArtistBio(ctx context.Context, artistID int) (string, error) { + u := fmt.Sprintf("https://www.deezer.com/en/artist/%d/biography", artistID) + req, err := http.NewRequestWithContext(ctx, "GET", u, nil) + if err != nil { + return "", err + } + + log.Trace(ctx, "Fetching Deezer artist biography", "url", u) + resp, err := c.httpDoer.Do(req) + if err != nil { + return "", err + } + defer resp.Body.Close() + + if resp.StatusCode != 200 { + return "", fmt.Errorf("deezer: failed to fetch biography: %s", resp.Status) + } + + body, err := io.ReadAll(resp.Body) + if err != nil { + return "", err + } + + matches := dzrAppStateRegex.FindSubmatch(body) + if len(matches) < 2 { + return "", errors.New("deezer: could not find __DZR_APP_STATE__") + } + + type appState struct { + Bio struct { + Bio string `json:"BIO"` + Resume string `json:"RESUME"` + } `json:"BIO"` + } + + var state appState + if err := json.Unmarshal(matches[1], &state); err != nil { + return "", fmt.Errorf("deezer: failed to parse __DZR_APP_STATE__: %w", err) + } + + var bio string + if state.Bio.Bio != "" { + bio = state.Bio.Bio + } else { + bio = state.Bio.Resume + } + + return cleanBio(bio), nil +} + +func cleanBio(bio string) string { + bio = strings.ReplaceAll(bio, "
", "\n") + return strictPolicy.Sanitize(bio) +} diff --git a/core/agents/deezer/client_test.go b/core/agents/deezer/client_test.go index 5e47460d4..d2162c1fe 100644 --- a/core/agents/deezer/client_test.go +++ b/core/agents/deezer/client_test.go @@ -43,6 +43,20 @@ var _ = Describe("client", func() { Expect(err).To(MatchError(ErrNotFound)) }) }) + + Describe("ArtistBio", func() { + It("returns artist bio from a successful request", func() { + f, err := os.Open("tests/fixtures/deezer.artist.bio.html") + Expect(err).To(BeNil()) + httpClient.mock("https://www.deezer.com/en/artist/27/biography", http.Response{Body: f, StatusCode: 200}) + + bio, err := client.getArtistBio(context.TODO(), 27) + Expect(err).To(BeNil()) + Expect(bio).To(ContainSubstring("Schoolmates Thomas and Guy-Manuel")) + Expect(bio).ToNot(ContainSubstring("")) + Expect(bio).ToNot(ContainSubstring("
")) + }) + }) }) type fakeHttpClient struct { diff --git a/core/agents/deezer/deezer.go b/core/agents/deezer/deezer.go index 8cabfbcfb..df286e828 100644 --- a/core/agents/deezer/deezer.go +++ b/core/agents/deezer/deezer.go @@ -12,6 +12,7 @@ import ( "github.com/navidrome/navidrome/log" "github.com/navidrome/navidrome/model" "github.com/navidrome/navidrome/utils/cache" + "github.com/navidrome/navidrome/utils/slice" ) const deezerAgentName = "deezer" @@ -88,6 +89,56 @@ func (s *deezerAgent) searchArtist(ctx context.Context, name string) (*Artist, e return &artists[0], err } +func (s *deezerAgent) GetSimilarArtists(ctx context.Context, _, name, _ string, limit int) ([]agents.Artist, error) { + artist, err := s.searchArtist(ctx, name) + if err != nil { + return nil, err + } + + related, err := s.client.getRelatedArtists(ctx, artist.ID) + if err != nil { + return nil, err + } + + res := slice.Map(related, func(r Artist) agents.Artist { + return agents.Artist{ + Name: r.Name, + } + }) + if len(res) > limit { + res = res[:limit] + } + return res, nil +} + +func (s *deezerAgent) GetArtistTopSongs(ctx context.Context, _, artistName, _ string, count int) ([]agents.Song, error) { + artist, err := s.searchArtist(ctx, artistName) + if err != nil { + return nil, err + } + + tracks, err := s.client.getTopTracks(ctx, artist.ID, count) + if err != nil { + return nil, err + } + + res := slice.Map(tracks, func(r Track) agents.Song { + return agents.Song{ + Name: r.Title, + } + }) + return res, nil +} + +func (s *deezerAgent) GetArtistBiography(ctx context.Context, _, name, _ string) (string, error) { + artist, err := s.searchArtist(ctx, name) + if err != nil { + return "", err + } + + return s.client.getArtistBio(ctx, artist.ID) +} + func init() { conf.AddHook(func() { if conf.Server.Deezer.Enabled { diff --git a/core/agents/deezer/responses.go b/core/agents/deezer/responses.go index 112fe28ec..266c44c62 100644 --- a/core/agents/deezer/responses.go +++ b/core/agents/deezer/responses.go @@ -29,3 +29,38 @@ type Error struct { Code int `json:"code"` } `json:"error"` } + +type RelatedArtists struct { + Data []Artist `json:"data"` + Total int `json:"total"` +} + +type TopTracks struct { + Data []Track `json:"data"` + Total int `json:"total"` + Next string `json:"next"` +} + +type Track struct { + ID int `json:"id"` + Title string `json:"title"` + Link string `json:"link"` + Duration int `json:"duration"` + Rank int `json:"rank"` + Preview string `json:"preview"` + Artist Artist `json:"artist"` + Album Album `json:"album"` + Contributors []Artist `json:"contributors"` +} + +type Album struct { + ID int `json:"id"` + Title string `json:"title"` + Cover string `json:"cover"` + CoverSmall string `json:"cover_small"` + CoverMedium string `json:"cover_medium"` + CoverBig string `json:"cover_big"` + CoverXl string `json:"cover_xl"` + Tracklist string `json:"tracklist"` + Type string `json:"type"` +} diff --git a/core/agents/deezer/responses_test.go b/core/agents/deezer/responses_test.go index 95a7f43f4..a9de5c5fb 100644 --- a/core/agents/deezer/responses_test.go +++ b/core/agents/deezer/responses_test.go @@ -35,4 +35,35 @@ var _ = Describe("Responses", func() { Expect(errorResp.Error.Message).To(Equal("Missing parameters: q")) }) }) + + Describe("Related Artists", func() { + It("parses the related artists response correctly", func() { + var resp RelatedArtists + body, err := os.ReadFile("tests/fixtures/deezer.artist.related.json") + Expect(err).To(BeNil()) + err = json.Unmarshal(body, &resp) + Expect(err).To(BeNil()) + + Expect(resp.Data).To(HaveLen(20)) + justice := resp.Data[0] + Expect(justice.Name).To(Equal("Justice")) + Expect(justice.ID).To(Equal(6404)) + }) + }) + + Describe("Top Tracks", func() { + It("parses the top tracks response correctly", func() { + var resp TopTracks + body, err := os.ReadFile("tests/fixtures/deezer.artist.top.json") + Expect(err).To(BeNil()) + err = json.Unmarshal(body, &resp) + Expect(err).To(BeNil()) + + Expect(resp.Data).To(HaveLen(5)) + track := resp.Data[0] + Expect(track.Title).To(Equal("Instant Crush (feat. Julian Casablancas)")) + Expect(track.ID).To(Equal(67238732)) + Expect(track.Album.Title).To(Equal("Random Access Memories")) + }) + }) }) diff --git a/tests/fixtures/deezer.artist.bio.html b/tests/fixtures/deezer.artist.bio.html new file mode 100644 index 000000000..0db72cd91 --- /dev/null +++ b/tests/fixtures/deezer.artist.bio.html @@ -0,0 +1,12008 @@ + + + + +
+ |
+
+ 05
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Julian Casablancas - Guy-Manuel de Homem-Christo / Composers: Thomas Bangalter - Julian Casablancas - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 01
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ One More Time
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Discovery
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Anthony Moore - Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 01
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Pharrell Williams - Guy-Manuel de Homem-Christo - Nile Rodgers / Composers: Thomas Bangalter - Pharrell Williams - Guy-Manuel de Homem-Christo - Nile Rodgers
+ |
+ |||||
|
+
+ 08
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Pharrell Williams - Nile Rodgers - Thomas Bangalter - Guy-Manuel de Homem-Christo / Composers: Pharrell Williams - Nile Rodgers - Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 07
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Around the World
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Homework
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter / Composers: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 11
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Veridis Quo
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Discovery
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 04
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Da Funk
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Homework
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter / Composers: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 04
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+
+
+ Discovery
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Edwin Birdsong - Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 03
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Giorgio by Moroder
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Composers: Thomas Bangalter - Giorgio Moroder - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 06
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Pharrell Williams - Guy-Manuel de Homem-Christo - Nile Rodgers / Composers: Thomas Bangalter - Pharrell Williams - Guy-Manuel de Homem-Christo - Nile Rodgers
+ |
+ |||||
|
+
+ 01
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Guy-Manuel de Homem-Christo - Paul Jackson Jr. - Nile Rodgers / Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo - Paul Jackson Jr. - Nile Rodgers
+ |
+ |||||
|
+
+ 13
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Face to Face
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Discovery
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter - Todd Imperatrice
+ |
+ |||||
|
+
+ 09
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Beyond
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Chris Caswell - Guy-Manuel de Homem-Christo - Paul Williams / Composers: Thomas Bangalter - Chris Caswell - Guy-Manuel de Homem-Christo - Paul Williams
+ |
+ |||||
|
+
+ 09
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Something About Us
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Discovery
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 04
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Within
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Guy-Manuel de Homem-Christo - Jason "Chilly Gonzales" Beck / Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo - Jason "Chilly Gonzales" Beck
+ |
+ |||||
|
+
+ 02
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Aerodynamic
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Discovery
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 03
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Digital Love
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Discovery
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Carlos Sosa - George Duke - Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 03
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+
+
+ Alive 2007
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 02
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ The Game of Love
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Guy-Manuel de Homem-Christo / Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 11
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Guy-Manuel de Homem-Christo - Todd Imperatrice / Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo - Todd Imperatrice
+ |
+ |||||
|
+
+ 12
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ End of Line
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 10
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Voyager
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Discovery
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 10
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Robot Rock
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Musique, Vol. 1
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Kae Williams Jr. - Thomas Bangalter
+ |
+ |||||
|
+
+ 04
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+
+
+ Alive 2007
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Anthony Wayne Moore - Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 09
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Technologic
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Human After All
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 05
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Make Love
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Human After All
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 08
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ The Game Has Changed
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 03
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ The Son of Flynn
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 05
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+
+
+ Alive 2007
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Edwin Birdsong - Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 02
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Horizon (Japan CD)
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Guy-Manuel de Homem-Christo / Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 03
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Revolution 909
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Homework
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter / Composers: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 06
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Guy-Manuel de Homem-Christo / Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 13
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Derezzed
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Guy-Manuel de Homem-Christo / Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 10
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Motherboard
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 04
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Guy-Manuel de Homem-Christo / Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 06
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Nightvision
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Discovery
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 01
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Robot Rock / Oh Yeah
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Alive 2007
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Kae Williams Jr. - Thomas Bangalter
+ |
+ |||||
|
+
+ 01
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+
+
+ One More Time
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Anthony Moore - Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 05
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Crescendolls
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Discovery
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 21
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Guy-Manuel de Homem-Christo / Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 01
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Musique
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Musique, Vol. 1
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 08
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+
+
+ Human After All
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 14
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Indo Silver Club
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Homework
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 13
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Burnin'
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Homework
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter / Composers: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 15
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Alive
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Homework
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 02
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+
+
+ Alive 2007
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Swizz Beatz - Thomas Bangalter - Trevor Smith
+ |
+ |||||
|
+
+ 09
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Teachers
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Homework
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 06
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Burnin' / Too Long
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Alive 2007
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 18
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ C.L.U.
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 11
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Rock'n Roll
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Homework
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 01
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+
+
+ Around the World
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter / Composers: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 05
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Julian Casablancas - Thomas Bangalter - Guy-Manuel de Homem-Christo / Composers: Julian Casablancas - Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 23
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Sea of Simulation
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Guy-Manuel de Homem-Christo / Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 08
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Rollin' & Scratchin'
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Homework
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 04
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Steam Machine
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Human After All
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 08
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ High Life
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Discovery
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 12
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Short Circuit
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Discovery
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 11
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+
+
+ Alive 2007
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 27
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Castor
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Guy-Manuel de Homem-Christo / Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 12
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Oh Yeah
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Homework
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 05
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Phoenix
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Homework
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 02
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+
+
+ Human After All
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 07
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Superheroes
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Discovery
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 01
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Human After All
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Human After All
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 06
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Fresh
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Homework
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 01
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 14
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Too Long
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Discovery
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Anthony Wayne Moore - Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 10
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ High Fidelity
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Homework
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 08
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+
+
+ Alive 2007
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Anthony Moore - Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 11
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 02
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+
+
+ Daft Club
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 10
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+
+
+ Alive 2007
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 01
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Veridis Quo (Edit)
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Veridis Quo
+
+ |
+ + + | ++ + | ++ + | +
|
+
+ 07
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+
+
+ Alive 2007
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter - Todd Imperatrice
+ |
+ |||||
|
+
+ 06
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ The Brainwasher
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Human After All
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 01
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: E Birdsong - Guy-Manuel de Homem-Christo - Thomas Bangalter / Composers: E Birdsong - Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 01
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Daftendirekt
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Homework
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 12
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Aerodynamite
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Daft Club
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 09
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 12
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+
+
+ Alive 2007
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 04
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 01
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Guy-Manuel de Homem-Christo / Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 01
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Pharrell Williams - Nile Rodgers - Thomas Bangalter - Guy-Manuel de Homem-Christo / Composers: Pharrell Williams - Nile Rodgers - Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 11
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+
+
+ Musique, Vol. 1
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 01
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Alive 1997
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Alive 1997
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 01
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 02
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 07
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Pharrell Williams - Guy-Manuel de Homem-Christo - Nile Rodgers / Composers: Thomas Bangalter - Pharrell Williams - Guy-Manuel de Homem-Christo - Nile Rodgers
+ |
+ |||||
|
+
+ 01
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Ouverture
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Daft Club
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 09
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+
+
+ Alive 2007
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Andy Dean - Ben Barson - Ben Wolff - Gabrielle - Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 10
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Emotion
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+
+
+ Human After All
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||
|
+
+ 07
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 01
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Guy-Manuel de Homem-Christo - Paul Jackson Jr. - Nile Rodgers / Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo - Paul Jackson Jr. - Nile Rodgers
+ |
+ |||||
|
+
+ 09
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Paul Williams - Chris Caswell - Guy-Manuel de Homem-Christo / Composers: Thomas Bangalter - Paul Williams - Chris Caswell - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 05
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 05
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Pharrell Williams - Nile Rodgers - Thomas Bangalter - Guy-Manuel de Homem-Christo / Composers: Pharrell Williams - Nile Rodgers - Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 06
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Pharrell Williams - Thomas Bangalter - Guy-Manuel de Homem-Christo - Nile Rodgers / Composers: Pharrell Williams - Thomas Bangalter - Guy-Manuel de Homem-Christo - Nile Rodgers
+ |
+ |||||
|
+
+ 01
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ Horizon Ouverture
+
+
+
+ |
+
+
+ Daft Punk
+
+ |
+ + + | ++ + | ++ + | ++ + | +
| + |
+ Writer: Thomas Bangalter - Guy-Manuel de Homem-Christo / Composers: Thomas Bangalter - Guy-Manuel de Homem-Christo
+ |
+ |||||
|
+
+ 04
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+
+
+ Sky Sailor EP
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: James Rajeck / Composers: James Rajeck
+ |
+ |||||
|
+
+ 03
+
+
+
+
+
+ |
+ + + + + + + + | +
+
+ Daft Punk
+
+ |
+
+
+ One More Time
+
+ |
+ + + | ++ + | ++ + | +
| + |
+ Writer: Anthony Moore - Guy-Manuel de Homem-Christo - Thomas Bangalter
+ |
+ |||||