annotate musixmatch-master/musixmatch.py @ 10:6840f77b83aa

commit
author Yading Song <yading.song@eecs.qmul.ac.uk>
date Sun, 21 Apr 2013 10:55:35 +0200
parents 8c29444cb5fd
children
rev   line source
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