Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
db5bf6d2d3 | ||
![]() |
7a047f6bd5 | ||
![]() |
fd09f103fc | ||
![]() |
b8e2c017d7 | ||
![]() |
de1e81b89d |
62
README.md
62
README.md
@@ -1,3 +1,63 @@
|
|||||||
# REST API 2.0 Discogs.com client
|
# REST API 2.0 Discogs.com client
|
||||||
|
|
||||||
..work in progress..
|
go-discogs is a Go client library for the [Discogs API](https://www.discogs.com/developers/). Check the usage section or try the examples to see how to access the Discogs API.
|
||||||
|
|
||||||
|
### Feauteres
|
||||||
|
* Database
|
||||||
|
* Releases
|
||||||
|
* Master Releases
|
||||||
|
* Release Versions
|
||||||
|
* Artists
|
||||||
|
* Artist Releases
|
||||||
|
* Label
|
||||||
|
* All Label Releases
|
||||||
|
|
||||||
|
#### ToDo
|
||||||
|
- Search
|
||||||
|
|
||||||
|
|
||||||
|
Install
|
||||||
|
--------
|
||||||
|
go get github.com/irlndts/go-discogs
|
||||||
|
|
||||||
|
Usage
|
||||||
|
---------
|
||||||
|
The discogs package provides a client for accessing the Discogs API.
|
||||||
|
First of all import library and init client variable. According to discogs api documentation you [must provide your user-agent](https://www.discogs.com/developers/#page:home,header:home-general-information).
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/irlndts/go-discogs"
|
||||||
|
)
|
||||||
|
```
|
||||||
|
```go
|
||||||
|
client := discogs.NewClient().UserAgent("TestDiscogsClient/0.0.1 +example.com")
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Releases
|
||||||
|
```go
|
||||||
|
params := &discogs.ReleaseParams{Release_id: "8138518"}
|
||||||
|
release, _, err := d.Release.Release(params)
|
||||||
|
|
||||||
|
fmt.Println(fmt.Println(release.Artists[0].Name, " - ", release.Title)) // St. Petersburg Ska-Jazz Review - Elephant Riddim
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Artists
|
||||||
|
```go
|
||||||
|
params := &discogs.LabelParams{Label_id: "890477", Page: 2, Per_page: 3}
|
||||||
|
label, _, err := d.Label.Releases(params)
|
||||||
|
|
||||||
|
for _, release := range label.Releases {
|
||||||
|
fmt.Println(release.Title)
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Someday / I Hate Everything About You
|
||||||
|
Spy Potion
|
||||||
|
Surf Attack From Russia
|
||||||
|
*/
|
||||||
|
```
|
||||||
|
|
||||||
|
etc.
|
||||||
|
More examples - soon
|
||||||
|
19
artists.go
19
artists.go
@@ -10,7 +10,11 @@ type ArtistService struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ArtistParams struct {
|
type ArtistParams struct {
|
||||||
Artist_id string
|
Artist_id string
|
||||||
|
Sort string // year, title, format
|
||||||
|
Sort_order string // asc, desc
|
||||||
|
Page int
|
||||||
|
Per_page int
|
||||||
}
|
}
|
||||||
|
|
||||||
type Artist struct {
|
type Artist struct {
|
||||||
@@ -26,6 +30,11 @@ type Artist struct {
|
|||||||
Members []Member `json:"members"`
|
Members []Member `json:"members"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ArtistReleases struct {
|
||||||
|
Paginastion Page `json:"pagination"`
|
||||||
|
Releases []ReleaseSource `json:"releases"`
|
||||||
|
}
|
||||||
|
|
||||||
func newArtistService(api *apirequest.API) *ArtistService {
|
func newArtistService(api *apirequest.API) *ArtistService {
|
||||||
return &ArtistService{
|
return &ArtistService{
|
||||||
api: api.Path("artists/"),
|
api: api.Path("artists/"),
|
||||||
@@ -39,3 +48,11 @@ func (self *ArtistService) Artist(params *ArtistParams) (*Artist, *http.Response
|
|||||||
resp, err := self.api.New().Get(params.Artist_id).Receive(artist, apiError)
|
resp, err := self.api.New().Get(params.Artist_id).Receive(artist, apiError)
|
||||||
return artist, resp, relevantError(err, *apiError)
|
return artist, resp, relevantError(err, *apiError)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (self *ArtistService) Releases(params *ArtistParams) (*ArtistReleases, *http.Response, error) {
|
||||||
|
releases := new(ArtistReleases)
|
||||||
|
apiError := new(APIError)
|
||||||
|
|
||||||
|
resp, err := self.api.New().Get(params.Artist_id+"/releases").QueryStruct(params).Receive(releases, apiError)
|
||||||
|
return releases, resp, relevantError(err, *apiError)
|
||||||
|
}
|
||||||
|
@@ -2,17 +2,25 @@ package discogs
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestArtistService_Artist(t *testing.T) {
|
func TestArtistService_Artist(t *testing.T) {
|
||||||
expectedId := 1000
|
expectedId := 1000
|
||||||
|
|
||||||
client := &http.Client{}
|
d := NewClient().UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
|
||||||
d := NewClient(client).UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
|
|
||||||
artist, _, err := d.Artist.Artist(&ArtistParams{Artist_id: "1000"})
|
artist, _, err := d.Artist.Artist(&ArtistParams{Artist_id: "1000"})
|
||||||
|
|
||||||
check(t, err)
|
check(t, err)
|
||||||
assert(t, artist.Id == expectedId, fmt.Sprintf("Release.Title looked for %s, and received %s ", expectedId, artist.Id))
|
assert(t, artist.Id == expectedId, fmt.Sprintf("Release.Title looked for %s, and received %s ", expectedId, artist.Id))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestArtistService_Releases(t *testing.T) {
|
||||||
|
expectedArtist := "Dave Clarke"
|
||||||
|
|
||||||
|
d := NewClient().UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
|
||||||
|
releases, _, err := d.Artist.Releases(&ArtistParams{Artist_id: "1000", Sort: "year", Sort_order: "desc"})
|
||||||
|
|
||||||
|
check(t, err)
|
||||||
|
assert(t, releases.Releases[0].Artist == expectedArtist, fmt.Sprintf("Releses.Artist looked for %s, and received %s ", expectedArtist, releases.Releases[0].Artist))
|
||||||
|
}
|
||||||
|
@@ -137,4 +137,7 @@ type ReleaseSource struct {
|
|||||||
Thumb string `json:"thumb"`
|
Thumb string `json:"thumb"`
|
||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
Year int `json:"year"`
|
Year int `json:"year"`
|
||||||
|
Main_release int `json:"main_release"`
|
||||||
|
Role string `json:"role"`
|
||||||
|
Type string `json:"type"`
|
||||||
}
|
}
|
||||||
|
@@ -20,8 +20,8 @@ type Client struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewClient returns a new Client.
|
// NewClient returns a new Client.
|
||||||
func NewClient(httpClient *http.Client) *Client {
|
func NewClient() *Client {
|
||||||
base := apirequest.New().Client(httpClient).Base(discogsAPI).Add("User-Agent", useragent)
|
base := apirequest.New().Client(&http.Client{}).Base(discogsAPI).Add("User-Agent", useragent)
|
||||||
|
|
||||||
return &Client{
|
return &Client{
|
||||||
api: base,
|
api: base,
|
||||||
|
@@ -3,25 +3,23 @@ package main
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/irlndts/go-discogs"
|
"github.com/irlndts/go-discogs"
|
||||||
"net/http"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
client := &http.Client{}
|
d := discogs.NewClient().UserAgent("TestDiscogsClient/0.0.1 +http://irlndts.moscow")
|
||||||
d := discogs.NewClient(client).UserAgent("TestDiscogsClient/0.0.1 +http://irlndts.moscow")
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
params := &discogs.ReleaseParams{Release_id: "8138518"}
|
params := &discogs.ReleaseParams{Release_id: "8138518"}
|
||||||
release, _, err := d.Release.Release(params)
|
release, _, err := d.Release.Release(params)
|
||||||
*/
|
*/
|
||||||
params := &discogs.LabelParams{Label_id: "1000"}
|
params := &discogs.LabelParams{Label_id: "890477", Page: 2, Per_page: 3}
|
||||||
label, _, err := d.Label.Releases(params)
|
label, _, err := d.Label.Releases(params)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
} else {
|
} else {
|
||||||
//fmt.Println(release.Title)
|
for _, release := range label.Releases {
|
||||||
fmt.Println(label.Releases[0].Title)
|
fmt.Println(release.Title)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//fmt.Println(resp)
|
|
||||||
}
|
}
|
||||||
|
@@ -2,15 +2,13 @@ package discogs
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestLabelService_Label(t *testing.T) {
|
func TestLabelService_Label(t *testing.T) {
|
||||||
expectedId := 1000
|
expectedId := 1000
|
||||||
|
|
||||||
client := &http.Client{}
|
d := NewClient().UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
|
||||||
d := NewClient(client).UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
|
|
||||||
label, _, err := d.Label.Label(&LabelParams{Label_id: "1000"})
|
label, _, err := d.Label.Label(&LabelParams{Label_id: "1000"})
|
||||||
|
|
||||||
check(t, err)
|
check(t, err)
|
||||||
@@ -20,8 +18,7 @@ func TestLabelService_Label(t *testing.T) {
|
|||||||
func TestLabelService_Releases(t *testing.T) {
|
func TestLabelService_Releases(t *testing.T) {
|
||||||
expectedId := "Good Time"
|
expectedId := "Good Time"
|
||||||
|
|
||||||
client := &http.Client{}
|
d := NewClient().UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
|
||||||
d := NewClient(client).UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
|
|
||||||
label, _, err := d.Label.Releases(&LabelParams{Label_id: "1000"})
|
label, _, err := d.Label.Releases(&LabelParams{Label_id: "1000"})
|
||||||
|
|
||||||
check(t, err)
|
check(t, err)
|
||||||
|
@@ -2,15 +2,13 @@ package discogs
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMasterService_Master(t *testing.T) {
|
func TestMasterService_Master(t *testing.T) {
|
||||||
expectedTitle := "Elephant Riddim"
|
expectedTitle := "Elephant Riddim"
|
||||||
|
|
||||||
client := &http.Client{}
|
d := NewClient().UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
|
||||||
d := NewClient(client).UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
|
|
||||||
master, _, err := d.Master.Master(&MasterParams{Master_id: "960657"})
|
master, _, err := d.Master.Master(&MasterParams{Master_id: "960657"})
|
||||||
|
|
||||||
check(t, err)
|
check(t, err)
|
||||||
@@ -20,8 +18,7 @@ func TestMasterService_Master(t *testing.T) {
|
|||||||
func TestMasterService_Versions(t *testing.T) {
|
func TestMasterService_Versions(t *testing.T) {
|
||||||
expectedTitle := "Stardiver"
|
expectedTitle := "Stardiver"
|
||||||
|
|
||||||
client := &http.Client{}
|
d := NewClient().UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
|
||||||
d := NewClient(client).UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
|
|
||||||
versions, _, err := d.Master.Versions(&MasterVersionParams{Master_id: "1000", Page: 1, Per_page: 1})
|
versions, _, err := d.Master.Versions(&MasterVersionParams{Master_id: "1000", Page: 1, Per_page: 1})
|
||||||
|
|
||||||
check(t, err)
|
check(t, err)
|
||||||
|
@@ -2,15 +2,13 @@ package discogs
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestReleaseService_Release(t *testing.T) {
|
func TestReleaseService_Release(t *testing.T) {
|
||||||
expectedTitle := "Elephant Riddim"
|
expectedTitle := "Elephant Riddim"
|
||||||
|
|
||||||
client := &http.Client{}
|
d := NewClient().UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
|
||||||
d := NewClient(client).UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
|
|
||||||
release, _, err := d.Release.Release(&ReleaseParams{Release_id: "8138518"})
|
release, _, err := d.Release.Release(&ReleaseParams{Release_id: "8138518"})
|
||||||
|
|
||||||
check(t, err)
|
check(t, err)
|
||||||
|
Reference in New Issue
Block a user