You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.1 KiB
Python
90 lines
2.1 KiB
Python
#!/usr/bin/python
|
|
|
|
import argparse, os, urllib, json, subprocess, urllib2
|
|
|
|
parser = argparse.ArgumentParser(description='Searches for music files')
|
|
|
|
parser.add_argument('-c', dest='limit', action='store', default='10',
|
|
help='maximum amount of results to show (don\'t overdo it please)')
|
|
|
|
parser.add_argument('-v', dest='vlc', action='store_true', default='false',
|
|
help='play in VLC media player')
|
|
|
|
parser.add_argument('query', metavar='QUERY', type=str, nargs='+',
|
|
help='destination path for generated class files.')
|
|
|
|
args = parser.parse_args()
|
|
options = vars(args)
|
|
|
|
query = " ".join(options['query'])
|
|
limit = int(options['limit'])
|
|
|
|
results = urllib.urlopen("http://ex.fm/api/v3/song/search/%s?results=%d" % (urllib.quote_plus(query), limit)).read()
|
|
|
|
try:
|
|
result_object = json.loads(results)
|
|
except ValueError:
|
|
print "No valid result was returned from the ex.fm API. Exiting..."
|
|
exit(1)
|
|
|
|
if result_object['status_code'] != 200:
|
|
print "An error code was returned by the ex.fm API. Exiting..."
|
|
exit(1)
|
|
|
|
print "Searching for '%s'..." % query
|
|
|
|
if result_object['total'] <= 0:
|
|
print "No results."
|
|
exit(1)
|
|
|
|
print ""
|
|
|
|
for track in result_object['songs']:
|
|
if track['artist'] is None:
|
|
artist = "Unknown"
|
|
else:
|
|
artist = track['artist']
|
|
|
|
if track['album'] is None:
|
|
album = "Unknown"
|
|
else:
|
|
album = track['album']
|
|
|
|
if track['title'] is None:
|
|
title = "Unknown"
|
|
else:
|
|
title = track['title']
|
|
|
|
print "Artist: %s\t Album: %s" % (artist, album)
|
|
print "Title: %s" % title
|
|
print " %s" % track['url']
|
|
print ""
|
|
|
|
if options['vlc'] == True:
|
|
print "Playing the first working result in VLC media player..."
|
|
|
|
working_url = ""
|
|
|
|
for track in result_object['songs']:
|
|
try:
|
|
response = urllib2.urlopen(track['url'])
|
|
except urllib2.URLError, e:
|
|
continue
|
|
|
|
headers = response.info()
|
|
|
|
if "text/html" in headers['Content-Type']:
|
|
continue
|
|
|
|
working_url = track['url']
|
|
|
|
break
|
|
|
|
if working_url != "":
|
|
with open(os.devnull, 'w') as stfu:
|
|
subprocess.Popen(["vlc", "--one-instance", working_url], stdin=None, stdout=stfu, stderr=stfu)
|
|
exit(0)
|
|
else:
|
|
print "No working URLs found."
|
|
exit(1)
|