1 # -*- coding: utf-8 -*-
8 def allmusic_albumfind(data
, artist
, album
):
9 data
= data
.decode('utf-8')
11 albumlist
= re
.findall('class="album">\s*(.*?)\s*</li', data
, re
.S
)
12 for item
in albumlist
:
14 albumartist
= re
.search('class="artist">.*?>(.*?)</a', item
, re
.S
)
16 albumdata
['artist'] = albumartist
.group(1)
17 else: # classical album
19 albumname
= re
.search('class="title">.*?>(.*?)</a', item
, re
.S
)
21 albumdata
['album'] = albumname
.group(1)
22 else: # not likely to happen, but just in case
24 # filter inaccurate results
25 artistmatch
= difflib
.SequenceMatcher(None, artist
.lower(), albumdata
['artist'].lower()).ratio()
26 albummatch
= difflib
.SequenceMatcher(None, album
.lower(), albumdata
['album'].lower()).ratio()
27 if artistmatch
> 0.90 and albummatch
> 0.90:
28 albumurl
= re
.search('class="title">\s*<a href="(.*?)"', item
)
30 albumdata
['url'] = albumurl
.group(1)
31 else: # not likely to happen, but just in case
33 albums
.append(albumdata
)
34 # we are only interested in the top result
38 def allmusic_albumdetails(data
):
39 data
= data
.decode('utf-8')
41 releasedata
= re
.search('class="release-date">.*?<span>(.*?)<', data
, re
.S
)
43 dateformat
= releasedata
.group(1)
44 if len(dateformat
) > 4:
47 albumdata
['releasedate'] = datetime
.datetime(*(time
.strptime(dateformat
, '%B %d, %Y')[0:3])).strftime('%Y-%m-%d')
50 albumdata
['releasedate'] = datetime
.datetime(*(time
.strptime(dateformat
, '%B, %Y')[0:3])).strftime('%Y-%m')
53 albumdata
['releasedate'] = dateformat
54 yeardata
= re
.search('class="year".*?>\s*(.*?)\s*<', data
)
56 albumdata
['year'] = yeardata
.group(1)
57 genredata
= re
.search('class="genre">.*?">(.*?)<', data
, re
.S
)
59 albumdata
['genre'] = genredata
.group(1)
60 styledata
= re
.search('class="styles">.*?div>\s*(.*?)\s*</div', data
, re
.S
)
62 stylelist
= re
.findall('">(.*?)<', styledata
.group(1))
64 albumdata
['styles'] = ' / '.join(stylelist
)
65 mooddata
= re
.search('class="moods">.*?div>\s*(.*?)\s*</div', data
, re
.S
)
67 moodlist
= re
.findall('">(.*?)<', mooddata
.group(1))
69 albumdata
['moods'] = ' / '.join(moodlist
)
70 themedata
= re
.search('class="themes">.*?div>\s*(.*?)\s*</div', data
, re
.S
)
72 themelist
= re
.findall('">(.*?)<', themedata
.group(1))
74 albumdata
['themes'] = ' / '.join(themelist
)
75 ratingdata
= re
.search('itemprop="ratingValue">\s*(.*?)\s*</div', data
)
77 albumdata
['rating'] = ratingdata
.group(1)
78 albumdata
['votes'] = ''
79 titledata
= re
.search('class="album-title".*?>\s*(.*?)\s*<', data
, re
.S
)
81 albumdata
['album'] = titledata
.group(1)
82 labeldata
= re
.search('class="label-catalog".*?<.*?>(.*?)<', data
, re
.S
)
84 albumdata
['label'] = labeldata
.group(1)
85 artistdata
= re
.search('class="album-artist".*?<span.*?>\s*(.*?)\s*</span', data
, re
.S
)
87 artistlist
= re
.findall('">(.*?)<', artistdata
.group(1))
89 for item
in artistlist
:
91 artistinfo
['artist'] = item
92 artists
.append(artistinfo
)
94 albumdata
['artist'] = artists
95 albumdata
['artist_description'] = ' / '.join(artistlist
)
96 thumbsdata
= re
.search('class="album-contain".*?src="(.*?)"', data
, re
.S
)
100 thumb
= thumbsdata
.group(1).rstrip('?partner=allrovi.com')
101 # ignore internal blank thumb
102 if thumb
.startswith('http'):
103 # 0=largest / 1=75 / 2=150 / 3=250 / 4=400 / 5=500 / 6=1080
104 if thumb
.endswith('f=5'):
105 thumbdata
['image'] = thumb
.replace('f=5', 'f=0')
106 thumbdata
['preview'] = thumb
.replace('f=5', 'f=2')
108 thumbdata
['image'] = thumb
109 thumbdata
['preview'] = thumb
110 thumbdata
['aspect'] = 'thumb'
111 thumbs
.append(thumbdata
)
112 albumdata
['thumb'] = thumbs