summaryrefslogtreecommitdiffstats
path: root/addons/metadata.generic.albums/lib/discogs.py
diff options
context:
space:
mode:
Diffstat (limited to 'addons/metadata.generic.albums/lib/discogs.py')
-rw-r--r--addons/metadata.generic.albums/lib/discogs.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/addons/metadata.generic.albums/lib/discogs.py b/addons/metadata.generic.albums/lib/discogs.py
new file mode 100644
index 0000000..448c354
--- /dev/null
+++ b/addons/metadata.generic.albums/lib/discogs.py
@@ -0,0 +1,64 @@
+# -*- coding: utf-8 -*-
+import difflib
+
+def discogs_albumfind(data, artist, album):
+ albums = []
+ masters = []
+ # sort results by lowest release id (first version of a release)
+ releases = sorted(data.get('results',[]), key=lambda k: k['id'])
+ for item in releases:
+ masterid = item['master_id']
+ # we are not interested in multiple versions that belong to the same master release
+ if masterid not in masters:
+ masters.append(masterid)
+ albumdata = {}
+ albumdata['artist'] = item['title'].split(' - ',1)[0]
+ albumdata['album'] = item['title'].split(' - ',1)[1]
+ albumdata['artist_description'] = item['title'].split(' - ',1)[0]
+ albumdata['year'] = str(item.get('year', ''))
+ albumdata['label'] = item['label'][0]
+ albumdata['thumb'] = item['thumb']
+ albumdata['dcalbumid'] = item['id']
+ # discogs does not provide relevance, use our own
+ artistmatch = difflib.SequenceMatcher(None, artist.lower(), albumdata['artist'].lower()).ratio()
+ albummatch = difflib.SequenceMatcher(None, album.lower(), albumdata['album'].lower()).ratio()
+ if artistmatch > 0.90 and albummatch > 0.90:
+ score = round(((artistmatch + albummatch) / 2), 2)
+ albumdata['relevance'] = str(score)
+ albums.append(albumdata)
+ return albums
+
+def discogs_albummain(data):
+ if data:
+ if 'main_release_url' in data:
+ url = data['main_release_url'].rsplit('/', 1)[1]
+ return url
+
+def discogs_albumdetails(data):
+ albumdata = {}
+ albumdata['album'] = data['title']
+ if 'styles' in data:
+ albumdata['styles'] = ' / '.join(data['styles'])
+ albumdata['genres'] = ' / '.join(data['genres'])
+ albumdata['year'] = str(data['year'])
+ albumdata['label'] = data['labels'][0]['name']
+ artists = []
+ for artist in data['artists']:
+ artistdata = {}
+ artistdata['artist'] = artist['name']
+ artists.append(artistdata)
+ albumdata['artist'] = artists
+ albumdata['artist_description'] = data['artists_sort']
+ albumdata['rating'] = str(int((float(data['community']['rating']['average']) * 2) + 0.5))
+ albumdata['votes'] = str(data['community']['rating']['count'])
+ if 'images' in data:
+ thumbs = []
+ for thumb in data['images']:
+ thumbdata = {}
+ thumbdata['image'] = thumb['uri']
+ thumbdata['preview'] = thumb['uri150']
+ # not accurate: discogs can provide any art type, there is no indication if it is an album front cover (thumb)
+ thumbdata['aspect'] = 'thumb'
+ thumbs.append(thumbdata)
+ albumdata['thumb'] = thumbs
+ return albumdata