-
Notifications
You must be signed in to change notification settings - Fork 1
/
cover_art_getter.py
121 lines (97 loc) · 3.91 KB
/
cover_art_getter.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import base64
import json
import re
import requests
from lxml import html
API_KEY = '7ede02c397c8cf99bf26e1f8cb9681fa'
HEADER = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0'
}
def cover_art(search_term):
print('Getting cover art for ' + search_term)
search_term = re.sub(' +', '+', search_term)
try:
page = requests.get('https://www.discogs.com/search/?q=' +
search_term + '&type=all', headers=HEADER)
except (requests.ConnectionError, requests.ConnectTimeout) as exception_value:
print('Error Occurred ' + str(exception_value))
return None, False
tree = html.fromstring(page.text)
image_src = tree.xpath(
'//div[@id="search_results"]/div/a/span[2]/img/@data-src')
song_title = tree.xpath('//div[@id="search_results"]/div/h4/a/text()')
song_artist = tree.xpath(
'//div[@id="search_results"]/div/h5/span/a/text()')
if len(image_src) is 0:
return None, False
all_results = []
for i in range(0, len(image_src)):
data_set = {
'image_url': image_src[i],
'song_title': song_title[i],
'artist_name': song_artist[i]
}
all_results.append(data_set)
return all_results, True
def last_fm_cover_art(track_name, artist_name):
print(f'Getting cover art for {track_name} {artist_name}')
track = track_name
track = track.replace(' ', '%20')
artist = artist_name
artist = artist.replace(' ', '%20')
image = None
request_success = True
try:
last_fm_track_url = f'http://ws.audioscrobbler.com/2.0/?method=track.getInfo&api_key=' \
f'{API_KEY}&artist=' + artist + '&track=' + track + '&format=json'
print(last_fm_track_url)
response = requests.get(last_fm_track_url)
response = json.loads(response.text)
image = response['track']['album']['image'][3]['#text']
except (KeyError, requests.ConnectionError, requests.ConnectTimeout) as exception_value:
print('Error Occurred ' + str(exception_value))
request_success = False
if not request_success:
try:
last_fm_artist_url = f'http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&' \
f'artist={artist_name}&api_key={API_KEY}&format=json'
print(last_fm_artist_url)
response = requests.get(last_fm_artist_url)
response = json.loads(response.text)
image = response['artist']['image'][3]['#text']
request_success = True
except (KeyError, requests.ConnectionError, requests.ConnectTimeout) as exception_value:
print('Error Occurred: ' + str(exception_value))
request_success = False
if not request_success:
return None, False
return image, True
def itunes_album_art(search_term):
print('Getting cover art for ' + search_term)
track_parts = search_term.split(' - ')
track = track_parts[0]
track = track.replace(' ', '+')
artist = track_parts[1]
artist = artist.replace(' ', '+')
try:
response = requests.get(
'http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsSearch?term=' + track + '+' + artist)
response = json.loads(response.text)
except Exception as exception_value:
print('Error Occurred ' + str(exception_value))
return None, False
try:
image = response['results'][0]['artworkUrl30']
image = image.replace('30x30bb.jpg', '400x400bb.jpg')
except (KeyError, IndexError) as exception_value:
print('Error Occurred: ' + str(exception_value))
return None, False
return image, True
if __name__ == '__main__':
QUERY = input('Enter a search term: ')
RESULTS, SUCCESS = itunes_album_art(QUERY)
if SUCCESS:
print('Got Results')
print(RESULTS)
else:
print('Error Occurred')