-
Notifications
You must be signed in to change notification settings - Fork 0
/
functions.py
108 lines (83 loc) · 3.14 KB
/
functions.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
import json
import requests
import credentials
from bs4 import BeautifulSoup
def get_data(json_obj, user, period, limit):
music_list = []
if list(json_obj.keys())[0] == "topalbums":
albums = json_obj["topalbums"]["album"]
for item in albums:
album = {
"name": item["name"],
"artist": item["artist"]["name"],
"rank": item["@attr"]["rank"],
"cover": item["image"][-1]["#text"],
"playcount": item["playcount"]
}
music_list.append(album)
elif list(json_obj.keys())[0] == "topartists":
artists = json_obj["topartists"]["artist"]
for item in artists:
url = item["url"]
artist = {
"name": item["name"],
"rank": item["@attr"]["rank"],
"cover": item["image"][-1]["#text"],
"playcount": item["playcount"]
}
try:
artist = get_artist_img(url, artist)
except:
pass
music_list.append(artist)
elif list(json_obj.keys())[0] == "toptracks":
tracks = json_obj["toptracks"]["track"]
for item in tracks:
track = {
"name": item["name"],
"artist": item["artist"]["name"],
"rank": item["@attr"]["rank"],
"cover": item["image"][-1]["#text"],
"playcount": item["playcount"]
}
try:
track = get_track_album(track)
except:
pass
music_list.append(track)
music_obj = {
'user':user,
'period': period,
'length': limit,
'infolist':music_list
}
return music_obj
def get_track_album(track_obj):
json_obj = credentials.lastfm_get('track.getinfo', track=track_obj["name"], artist=track_obj["artist"])
if "album" in json_obj["track"]:
track_obj["album"] = json_obj["track"]["album"]["title"]
track_obj["cover"] = json_obj["track"]["album"]["image"][-1]["#text"]
else:
track_obj["album"] = track_obj["name"]
track_obj["cover"] = track_obj["cover"]
return track_obj
def get_artist_img(url, artist_obj):
#getting artist gallery url
r = requests.get(url)
soup = BeautifulSoup(r.content, 'lxml')
anchor = soup.find('a', class_="header-new-gallery header-new-gallery--link hidden-xs link-block-target")
gallery_url = "https://www.last.fm" + anchor['href']
#getting url for the first image in gallery
r = requests.get(gallery_url)
soup = BeautifulSoup(r.content, 'lxml')
img_source = soup.find('img', class_="js-gallery-image")
artist_obj["cover"] = img_source["src"]
return artist_obj
def create_json_file(obj, path, name):
result = json.dumps(obj, sort_keys=True, indent=4)
if path[-1] == "/":
jsonFile = open(path + name + ".json", "w")
else:
jsonFile = open(path + "/" + name + ".json", "w")
jsonFile.write(result)
jsonFile.close()