#!/usr/bin/env python
import urllib, re
from sys import stdin
from sys import argv
from os import system
def __splitartistsong(data):
f = data.split(' - ')
if len(f) > 2: #We will assume that there is no artist with " - " in the name.
f = [' - '.join(f[:-1]), f[-1]]
return f #f[0] = songname, f[1] = artist
def song(artist, songname, newurl=None):
if artist == False:
data = songname
page = newurl
else:
page = "http://www.songmeanings.net/query.php?action=title&query=" + urllib.quote_plus(songname)
try:
data = urllib.urlopen(page).read()
except IOError:
#system('dcop amarok playlist popupMessage "Network input/output error when retrieving lyrics. Try again later."')
return
if data.find('
SongMeanings | lyrics') != -1: #ok, we've got a lyrics page
artist = data[data.find('SongMeanings | lyrics | ')+31:data.find('')].split(' - ')
if len(artist) > 2:
songname = ' - '.join(artist[1:])
artist = artist[1]
else:
songname, artist = artist[1], artist[0]
data = data[data.find('')+5:]
data = data[data.find(' | ')+42:]
data = data[:data.find(' | ')]
data = data.replace('\n', '').replace('\r', '').replace('
', '\n')
while data[:1] == ' ' or data[:1] == '\n':
data = data[1:]
while data[-1] == ' ' or data[-1] == '\n':
data = data[:-1]
return "lyrics", page, artist, songname, data
elif data.find('SongMeanings | search results for') != -1: # search results page
matches = re.findall('.+?', data, re.M)
for i in matches:
f = __splitartistsong(i[1])
if f[0].lower() == songname.lower() and f[1].lower() == artist.lower(): #ohay, we've got a match
try:
return song(False, urllib.urlopen("http://www.songmeanings.net/query.php?action=go&lid=" + i[0]).read(), i[0])
except IOError:
#system('dcop amarok playlist popupMessage "Network input/output error when retrieving lyrics at %s. Try again later."' % i[0])
return
else:
continue
return "matches", page, matches # return the whole list if we haven't got any exact matches
elif data.find('SongMeanings | error') != -1: # no results
return "matches", page, ()
if argv[1][0]=="^":
exit("no artist given")
sn=1;
artist=argv[1]
title=""
for i in argv[2:]:
if (i[0]=="^"):
sn=0;
title=i[1:]
elif (sn==0):
title=title+" "+i
else:
artist=artist+" "+i
print song(artist, title)[4].replace("\n\n","\n")