5 Commits
0.0.1 ... 0.0.2

Author SHA1 Message Date
irlndts
db5bf6d2d3 Merge branch 'master' of https://github.com/irlndts/go-discogs 2016-03-11 17:54:58 +03:00
irlndts
7a047f6bd5 net/http moved inside the lib 2016-03-11 17:47:23 +03:00
Artem Piskun
fd09f103fc Update README.md 2016-03-11 17:46:37 +03:00
Artem Piskun
b8e2c017d7 Update README.md 2016-03-11 17:41:48 +03:00
irlndts
de1e81b89d Artist Releases block 2016-03-11 17:07:35 +03:00
9 changed files with 105 additions and 27 deletions

View File

@@ -1,3 +1,63 @@
# 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

View File

@@ -10,7 +10,11 @@ type ArtistService 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 {
@@ -26,6 +30,11 @@ type Artist struct {
Members []Member `json:"members"`
}
type ArtistReleases struct {
Paginastion Page `json:"pagination"`
Releases []ReleaseSource `json:"releases"`
}
func newArtistService(api *apirequest.API) *ArtistService {
return &ArtistService{
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)
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)
}

View File

@@ -2,17 +2,25 @@ package discogs
import (
"fmt"
"net/http"
"testing"
)
func TestArtistService_Artist(t *testing.T) {
expectedId := 1000
client := &http.Client{}
d := NewClient(client).UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
d := NewClient().UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
artist, _, err := d.Artist.Artist(&ArtistParams{Artist_id: "1000"})
check(t, err)
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))
}

View File

@@ -137,4 +137,7 @@ type ReleaseSource struct {
Thumb string `json:"thumb"`
Title string `json:"title"`
Year int `json:"year"`
Main_release int `json:"main_release"`
Role string `json:"role"`
Type string `json:"type"`
}

View File

@@ -20,8 +20,8 @@ type Client struct {
}
// NewClient returns a new Client.
func NewClient(httpClient *http.Client) *Client {
base := apirequest.New().Client(httpClient).Base(discogsAPI).Add("User-Agent", useragent)
func NewClient() *Client {
base := apirequest.New().Client(&http.Client{}).Base(discogsAPI).Add("User-Agent", useragent)
return &Client{
api: base,

View File

@@ -3,25 +3,23 @@ package main
import (
"fmt"
"github.com/irlndts/go-discogs"
"net/http"
)
func main() {
client := &http.Client{}
d := discogs.NewClient(client).UserAgent("TestDiscogsClient/0.0.1 +http://irlndts.moscow")
d := discogs.NewClient().UserAgent("TestDiscogsClient/0.0.1 +http://irlndts.moscow")
/*
params := &discogs.ReleaseParams{Release_id: "8138518"}
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)
if err != nil {
fmt.Println(err)
} else {
//fmt.Println(release.Title)
fmt.Println(label.Releases[0].Title)
for _, release := range label.Releases {
fmt.Println(release.Title)
}
}
//fmt.Println(resp)
}

View File

@@ -2,15 +2,13 @@ package discogs
import (
"fmt"
"net/http"
"testing"
)
func TestLabelService_Label(t *testing.T) {
expectedId := 1000
client := &http.Client{}
d := NewClient(client).UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
d := NewClient().UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
label, _, err := d.Label.Label(&LabelParams{Label_id: "1000"})
check(t, err)
@@ -20,8 +18,7 @@ func TestLabelService_Label(t *testing.T) {
func TestLabelService_Releases(t *testing.T) {
expectedId := "Good Time"
client := &http.Client{}
d := NewClient(client).UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
d := NewClient().UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
label, _, err := d.Label.Releases(&LabelParams{Label_id: "1000"})
check(t, err)

View File

@@ -2,15 +2,13 @@ package discogs
import (
"fmt"
"net/http"
"testing"
)
func TestMasterService_Master(t *testing.T) {
expectedTitle := "Elephant Riddim"
client := &http.Client{}
d := NewClient(client).UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
d := NewClient().UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
master, _, err := d.Master.Master(&MasterParams{Master_id: "960657"})
check(t, err)
@@ -20,8 +18,7 @@ func TestMasterService_Master(t *testing.T) {
func TestMasterService_Versions(t *testing.T) {
expectedTitle := "Stardiver"
client := &http.Client{}
d := NewClient(client).UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
d := NewClient().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})
check(t, err)

View File

@@ -2,15 +2,13 @@ package discogs
import (
"fmt"
"net/http"
"testing"
)
func TestReleaseService_Release(t *testing.T) {
expectedTitle := "Elephant Riddim"
client := &http.Client{}
d := NewClient(client).UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
d := NewClient().UserAgent("UnitTestClient/0.0.1 +https://github.com/irlndts/go-discogs")
release, _, err := d.Release.Release(&ReleaseParams{Release_id: "8138518"})
check(t, err)