Skip to content

Commit

Permalink
updated the support to the new setlistfm api
Browse files Browse the repository at this point in the history
  • Loading branch information
sirLisko committed Apr 14, 2018
1 parent b606a40 commit f13c485
Show file tree
Hide file tree
Showing 7 changed files with 279 additions and 59 deletions.
23 changes: 18 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,28 @@
#Setlist.fm Parser
# Setlist.fm Parser

[![Build Status](https://travis-ci.org/sirLisko/setlistfm-parser.svg)](https://travis-ci.org/sirLisko/setlistfm-parser)
[![Coverage Status](https://coveralls.io/repos/sirLisko/setlistfm-parser/badge.svg?branch=master&service=github)](https://coveralls.io/github/sirLisko/setlistfm-parser?branch=master)
[![dependency Status](https://david-dm.org/sirlisko/setlistfm-parser/status.svg)](https://david-dm.org/sirlisko/setlistfm-parser#info=dependencies)
[![devDependency Status](https://david-dm.org/sirlisko/setlistfm-parser/dev-status.svg)](https://david-dm.org/sirlisko/setlistfm-parser#info=devDependencies)

A Promises based parser for [http://www.setlist.fm](http://www.setlist.fm).
A Promises based parser for [https://www.setlist.fm](https://www.setlist.fm).

## Methods

### setList.getTracks(artist)

### Methods
#### setList.getTracks(artist)
Return all the tracks played by an `artist`, in the last year of gigs.
### Example

## Example

```js
var setList = require('setlist');

setList.getTracks('the strokes').then(console.log).done();
```

output:

```js
{
artist: 'The Strokes',
Expand All @@ -32,3 +37,11 @@ output:
setsTot: 4
}
```

### API key

A [SetListFM API key](https://api.setlist.fm/docs/1.0/index.html) is needed.

```bash
export SETLISTFMAPIKEY={token}
```
8 changes: 3 additions & 5 deletions modules/parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ function getArtist (sets) {
return _
.chain(sets)
.first()
.get('artist[@name]')
.get('artist.name')
.value()
}

function formatTracks (tracks) {
return _
.chain(tracks)
.countBy(function (track) {
return track['@name'].toLowerCase()
return track.name.toLowerCase()
})
.omit('')
.map(function (count, track) {
Expand Down Expand Up @@ -46,10 +46,8 @@ function getSets (setsLists) {
.value()
}

function parse (setListBlob) {
var setList = [].concat(setListBlob.setlist)
function parse (setList) {
var tracks = getTracks(getSets(setList))

return {
artist: getArtist(setList),
tracks: formatTracks(tracks),
Expand Down
18 changes: 14 additions & 4 deletions modules/setListFm.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,27 @@
var q = require('q')
var request = require('request')

var domain = 'http://api.setlist.fm'
var path = '/rest/0.1/search/setlists.json?artistName={{artist}}'
var domain = 'https://api.setlist.fm'
var path = '/rest/1.0/search/setlists?artistName={{artist}}'

var headers = {
'Accept': 'application/json',
'x-api-key': process.env.SETLISTFMAPIKEY
}

function getSets (artist) {
var defer = q.defer()

var url = domain + path.replace('{{artist}}', artist)

request(url, function (err, resp, body) {
var options = {
headers: headers,
url: url
}

request(options, function (err, resp, body) {
if (!err && resp.statusCode === 200) {
defer.resolve(JSON.parse(body).setlists)
defer.resolve(JSON.parse(body).setlist)
} else if (resp.statusCode === 404) {
defer.reject({ statusCode: 404 })
} else {
Expand Down
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "setlistfm-parser",
"version": "0.2.0",
"version": "1.0.0",
"description": "Parse the tracks played by an artist from SetListFM",
"main": "index.js",
"scripts": {
Expand All @@ -18,7 +18,7 @@
"gig"
],
"author": "Luca Lischetti",
"license": "ISC",
"license": "MIT",
"bugs": {
"url": "https://github.com/sirLisko/setlistfm-parser/issues"
},
Expand All @@ -27,7 +27,7 @@
"async": "^1.4.0",
"lodash": "^3.10.1",
"q": "^1.4.1",
"request": "^2.60.0"
"request": "^2.85.0"
},
"devDependencies": {
"coveralls": "^2.11.3",
Expand Down
32 changes: 2 additions & 30 deletions test/parserTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
var test = require('tape')
var parser = require('../modules/parser.js')

var fakeJson = {'@total': '5', 'setlist': [{'artist': {'@name': 'best_artist'}, 'sets': {'set': [{'song': [{'@name': 'fOo'}, {'@name': 'bar'}, {'@name': 'foobar'}]}, {'@encore': '1', 'song': [{'@name': 'foo'}, {'@name': 'barfoo'}]}]}}, {'sets': ''}, {'sets': {'set': {'song': {'@name': 'bar'}}}}, {'sets': {'set': [{'song': [{'@name': 'foo'}, {'@name': 'bar'}]}, {'@encore': '1', 'song': [{'@name': 'bar'}]}, {'@encore': '2', 'song': [{'@name': 'bar'}, {'@name': 'foobar'}]}]}}]}
var fakeJson = [{'artist': {'name': 'best_artist'}, 'sets': {'set': [{'song': [{'name': 'fOo'}, {'name': 'bar'}, {'name': 'foobar'}]}, {'@encore': '1', 'song': [{'name': 'foo'}, {'name': 'barfoo'}]}]}}, {'sets': ''}, {'sets': {'set': {'song': {'name': 'bar'}}}}, {'sets': {'set': [{'song': [{'name': 'foo'}, {'name': 'bar'}]}, {'@encore': '1', 'song': [{'name': 'bar'}]}, {'@encore': '2', 'song': [{'name': 'bar'}, {'name': 'foobar'}]}]}}]

test('should return a JSON', function (t) {
t.plan(1)
Expand All @@ -22,43 +22,15 @@ test('should return a list of tracks', function (t) {

test('doesn\'t make any difference if the track name is lowerCase or upperCase', function (t) {
t.plan(1)
var json = {'@total': '5', 'setlist': [{'artist': {'@name': 'best_artist'}, 'sets': {'set': [{'song': [{'@name': 'fOo'}, {'@name': 'foo'}, {'@name': 'FOO'}, {'@name': 'Foo'}, {'@name': 'bar'}]}, {'@encore': '1', 'song': [{'@name': 'foO'}]}]}}]}
var json = [{'artist': {'name': 'best_artist'}, 'sets': {'set': [{'song': [{'name': 'fOo'}, {'name': 'foo'}, {'name': 'FOO'}, {'name': 'Foo'}, {'name': 'bar'}]}, {'@encore': '1', 'song': [{'name': 'foO'}]}]}}]
var tracks = parser.parse(json)

t.equal(JSON.stringify(tracks.tracks), '[{"title":"foo","count":5},{"title":"bar","count":1}]')
})

test('is working also with only one setlist', function (t) {
t.plan(1)
var json = {'@total': '1', 'setlist': {'artist': {'@name': 'best_artist'}, 'sets': {'set': {'song': {'@name': 'fOo'}}}}}
var tracks = parser.parse(json)

t.equal(JSON.stringify(tracks.tracks), '[{"title":"foo","count":1}]')
})

test('should return the correct arstist name', function (t) {
t.plan(1)
var tracks = parser.parse(fakeJson)

t.equal(tracks.artist, 'best_artist', 'the correct artist is present')
})

test('should return the correct number of sets', function (t) {
t.plan(2)
var tracks = parser.parse(fakeJson)
t.equal(tracks.setsTot, 4, 'the number of sets has to be 4')

var json = {'@total': '1', 'setlist': {'artist': {'@name': 'best_artist'}, 'sets': {'set': {'song': {'@name': 'fOo'}}}}}
tracks = parser.parse(json)
t.equal(tracks.setsTot, 1, 'the number of sets has to be 1')
})

test('should return the correct number of tracks', function (t) {
t.plan(2)
var tracks = parser.parse(fakeJson)
t.equal(tracks.tracksTot, 11, 'the number of sets has to be 11')

var json = {'@total': '1', 'setlist': {'artist': {'@name': 'best_artist'}, 'sets': {'set': {'song': {'@name': 'fOo'}}}}}
tracks = parser.parse(json)
t.equal(tracks.tracksTot, 1, 'the number of tracks has to be 1')
})
14 changes: 7 additions & 7 deletions test/setListFmTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ var nock = require('nock')
var setList = require('../modules/setListFm.js')

test('should parse the result if api.setlist.fm returns 200', function (t) {
var apiSetList = nock('http://api.setlist.fm')
.get('/rest/0.1/search/setlists.json?artistName=best_artist')
.reply(200, {setlists: 'foo'})
var apiSetList = nock('https://api.setlist.fm')
.get('/rest/1.0/search/setlists?artistName=best_artist')
.reply(200, {setlist: 'foo'})

setList.getSets('best_artist').then(function (payload) {
t.equal(payload, 'foo', 'the content of setlists is passed to the parser')
Expand All @@ -18,8 +18,8 @@ test('should parse the result if api.setlist.fm returns 200', function (t) {
})

test('should return 404 if api.setlist.fm returns not found', function (t) {
var apiSetList = nock('http://api.setlist.fm')
.get('/rest/0.1/search/setlists.json?artistName=best_artist')
var apiSetList = nock('https://api.setlist.fm')
.get('/rest/1.0/search/setlists?artistName=best_artist')
.reply(404, {})

setList.getSets('best_artist').then(null, function (err) {
Expand All @@ -31,8 +31,8 @@ test('should return 404 if api.setlist.fm returns not found', function (t) {
})

test('should return 500 if api.setlist.fm returns not 200 nor 404', function (t) {
var apiSetList = nock('http://api.setlist.fm')
.get('/rest/0.1/search/setlists.json?artistName=best_artist')
var apiSetList = nock('https://api.setlist.fm')
.get('/rest/1.0/search/setlists?artistName=best_artist')
.reply(502, {})

setList.getSets('best_artist').then(null, function (err) {
Expand Down

0 comments on commit f13c485

Please sign in to comment.