yading@7
|
1 import os
|
yading@7
|
2 import sys
|
yading@7
|
3
|
yading@7
|
4 import musixmatch
|
yading@7
|
5 import musixmatch.ws
|
yading@7
|
6 import json
|
yading@7
|
7 sys.path.append("7digital-python/lib/")
|
yading@7
|
8 import py7digital
|
yading@7
|
9
|
yading@7
|
10 import urllib2 #call url function
|
yading@7
|
11 from xml.dom import minidom
|
yading@7
|
12
|
yading@7
|
13
|
yading@7
|
14 #apikey = '8496dd1c715c69a74ef9fcde1716cf4a'
|
yading@7
|
15 newapikey = '82be3ea3f79ea404d45f47607c103eff'
|
yading@7
|
16
|
yading@7
|
17 #chart = musixmatch.ws.track.chart.get(country='it', apikey=apikey)
|
yading@7
|
18
|
yading@7
|
19 #lyrics = musixmatch.ws.matcher.lyrics.get(q_track='Someone like you', q_artist='Adele',format ='json',apikey=newapikey)
|
yading@7
|
20
|
yading@7
|
21 song_wakeMeUp = musixmatch.ws.track.search(q_lyrics = 'wake me up',f_lyrics_language='en',s_track_rating='desc',format ='json',apikey=newapikey)
|
yading@7
|
22
|
yading@10
|
23
|
yading@7
|
24 #print lyrics
|
yading@7
|
25
|
yading@7
|
26 #print lyrics['body']
|
yading@7
|
27
|
yading@7
|
28 #print pprint(song_wakeMeUp)
|
yading@7
|
29
|
yading@7
|
30
|
yading@7
|
31 #for each_line in lyrics['body']:
|
yading@7
|
32 # print each_line
|
yading@7
|
33
|
yading@7
|
34 #print 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
|
yading@7
|
35
|
yading@7
|
36 #for each_item in chart['body']['track_list']:
|
yading@7
|
37 # print each_item
|
yading@7
|
38
|
yading@7
|
39 # 7 digital API key
|
yading@7
|
40 DIGITAL7_API_KEY = '7dbpa63h3y3d'
|
yading@7
|
41
|
yading@7
|
42 def url_call(url):
|
yading@7
|
43 """
|
yading@7
|
44 ***This method is from get_preview_url.py by Thierry Bertin-Mahieux***
|
yading@7
|
45 Do a simple request to the 7digital API
|
yading@7
|
46 We assume we don't do intense querying, this function is not robust
|
yading@7
|
47 Return the answer as na xml document
|
yading@7
|
48 """
|
yading@7
|
49 stream = urllib2.urlopen(url)
|
yading@7
|
50 xmldoc = minidom.parse(stream).documentElement
|
yading@7
|
51 stream.close()
|
yading@7
|
52 return xmldoc
|
yading@7
|
53
|
yading@7
|
54
|
yading@7
|
55 def download_file(file_url, file_name):
|
yading@7
|
56 # open the url
|
yading@7
|
57 mp3file = urllib2.urlopen(file_url)
|
yading@7
|
58
|
yading@7
|
59 # open the local file for writing
|
yading@7
|
60 local_file = open(file_name, "wb")
|
yading@7
|
61 # write to file
|
yading@7
|
62 local_file.write(mp3file.read())
|
yading@7
|
63 local_file.close()
|
yading@7
|
64
|
yading@7
|
65 """"*********************************************************************************"""
|
yading@7
|
66
|
yading@7
|
67 def get_trackid_from_text_search(title,artistname=''):
|
yading@7
|
68 """
|
yading@7
|
69 ***This method is from get_preview_url.py by Thierry Bertin-Mahieux***
|
yading@7
|
70 Search for an artist + title using 7digital search API
|
yading@7
|
71 Return None if there is a problem, or tuple (title,trackid)
|
yading@7
|
72 """
|
yading@7
|
73 url = 'http://api.7digital.com/1.2/track/search?'
|
yading@7
|
74 url += 'oauth_consumer_key='+DIGITAL7_API_KEY
|
yading@7
|
75 query = title
|
yading@7
|
76 if artistname != '':
|
yading@7
|
77 query = artistname + ' ' + query
|
yading@7
|
78 query = urllib2.quote(query)
|
yading@7
|
79 url += '&q='+query
|
yading@7
|
80 xmldoc = url_call(url)
|
yading@7
|
81 status = xmldoc.getAttribute('status')
|
yading@7
|
82 if status != 'ok':
|
yading@7
|
83 return None
|
yading@7
|
84 resultelem = xmldoc.getElementsByTagName('searchResult')
|
yading@7
|
85 if len(resultelem) == 0:
|
yading@7
|
86 return None
|
yading@7
|
87 track = resultelem[0].getElementsByTagName('track')[0]
|
yading@7
|
88 tracktitle = track.getElementsByTagName('title')[0].firstChild.data
|
yading@7
|
89 trackid = int(track.getAttribute('id'))
|
yading@7
|
90 return (tracktitle,trackid)
|
yading@7
|
91
|
yading@7
|
92
|
yading@7
|
93 def get_preview_from_trackid(trackid):
|
yading@7
|
94 """
|
yading@7
|
95 ***This method is from get_preview_url.py by Thierry Bertin-Mahieux***
|
yading@7
|
96 Ask for the preview to a particular track, get the XML answer
|
yading@7
|
97 After calling the API with a given track id,
|
yading@7
|
98 we get an XML response that looks like:
|
yading@7
|
99
|
yading@7
|
100 <response status="ok" version="1.2" xsi:noNamespaceSchemaLocation="http://api.7digital.com/1.2/static/7digitalAPI.xsd">
|
yading@7
|
101 <url>
|
yading@7
|
102 http://previews.7digital.com/clips/34/6804688.clip.mp3
|
yading@7
|
103 </url>
|
yading@7
|
104 </response>
|
yading@7
|
105
|
yading@7
|
106 We parse it for the URL that we return, or '' if a problem
|
yading@7
|
107 """
|
yading@7
|
108 url = 'http://api.7digital.com/1.2/track/preview?redirect=false'
|
yading@7
|
109 url += '&trackid='+str(trackid)
|
yading@7
|
110 url += '&oauth_consumer_key='+DIGITAL7_API_KEY
|
yading@7
|
111 xmldoc = url_call(url)
|
yading@7
|
112 status = xmldoc.getAttribute('status')
|
yading@7
|
113 if status != 'ok':
|
yading@7
|
114 return ''
|
yading@7
|
115 urlelem = xmldoc.getElementsByTagName('url')[0]
|
yading@7
|
116 preview = urlelem.firstChild.nodeValue
|
yading@7
|
117 return preview
|
yading@7
|
118
|
yading@7
|
119
|
yading@7
|
120 for each_song in song_wakeMeUp['body']['track_list']:
|
yading@7
|
121 print each_song['track']['track_name'] + '\t' + each_song['track']['artist_name']
|
yading@7
|
122
|
yading@7
|
123 (tracktitle, trackid) = get_trackid_from_text_search(each_song['track']['track_name'],each_song['track']['artist_name'])
|
yading@7
|
124
|
yading@7
|
125 audio_url = get_preview_from_trackid(trackid)
|
yading@7
|
126
|
yading@7
|
127 file_name = tracktitle + u'.mp3'
|
yading@7
|
128 file_name = file_name.replace(u'/', u' ')
|
yading@7
|
129
|
yading@7
|
130 #file_name = t.title + u'.mp3'
|
yading@7
|
131 print file_name
|
yading@7
|
132 print("downloading")
|
yading@7
|
133 # download_path = os.path.join(file_path, file_name)
|
yading@7
|
134 path_name = './' + file_name
|
yading@7
|
135 mp3 = download_file(audio_url, path_name)
|
yading@7
|
136
|