# You should have received a copy of the GNU General Public License
# along with xbmc-groove. If not, see <http://www.gnu.org/licenses/>.
-import urllib2, pprint, md5, os, pickle, tempfile, time, re, simplejson, base64, sys, socket
+import urllib2, pprint, os, pickle, time, re, simplejson, base64, sys, socket, hashlib
from blowfish import Blowfish
SESSION_EXPIRY = 1209600 # 2 weeks
_sessionID = ''
_userID = 0
_lastSessionTime = 0
- _key = md5.new(os.path.basename("GroovesharkAPI.py")).hexdigest()
+ _key = hashlib.md5(os.path.basename("GroovesharkAPI.py")).hexdigest()
_debugging = False
# Constructor
- def __init__(self, debug):
+ def __init__(self, debug, tempDir):
self._debugging = debug
self.simplejson = simplejson
if "linux" in sys.platform.lower():
socket.setdefaulttimeout(30)
- self.cacheDir = os.path.join(tempfile.gettempdir(), 'groovesharkapi')
+ self.cacheDir = tempDir
if os.path.isdir(self.cacheDir) == False:
os.makedirs(self.cacheDir)
if self._debugging:
self._ip = self._getIP()
self._country = self._getCountry()
self._setSavedSession()
+ self.logout()
# Call to API
def _callRemote(self, method, params):
return ''
def _getSavedSession(self):
- path = os.path.join(self.cacheDir, 'session.dmp')
+ path = os.path.join(self.cacheDir, 'groovesharksession.dmp')
try:
f = open(path, 'rb')
session = pickle.load(f)
# Create the directory if it doesn't exist.
if not os.path.exists(self.cacheDir):
os.makedirs(self.cacheDir)
- path = os.path.join(self.cacheDir, 'session.dmp')
+ path = os.path.join(self.cacheDir, 'groovesharksession.dmp')
f = open(path, 'wb')
session = { 'sessionID' : self._sessionID, 'lastSessionTime' : self._lastSessionTime, 'userID': self._userID, 'ip' : self._ip, 'country' : self._country }
pickle.dump(session, f, protocol=pickle.HIGHEST_PROTOCOL)
# Authenticates the user for current API session
def _authenticate(self, login, password):
- md5pwd = md5.new(password).hexdigest()
+ md5pwd = hashlib.md5(password).hexdigest()
params = {'login': login, 'password': md5pwd}
result = self._callRemote('authenticate', params)
self._setSavedSession()
return True
return False
-
+
# Gets a stream key and host to get song content
def getSubscriberStreamKey(self, songID):
params = { "songID": songID, "country": self._country }
if 'result' in result and 'SongID' in result['result']:
info = result['result']
if 'CoverArtFilename' in info and info['CoverArtFilename'] != None:
- info['CoverArtFilename'] = THUMB_URL+info['CoverArtFilename'].encode('ascii', 'ignore')
+ info['CoverArtFilename'] = THUMB_URL+info['CoverArtFilename'].encode('utf8', 'ignore')
else:
info['CoverArtFilename'] = 'None'
return info
items = self._callRemote("getSimilarArtists", {"artistID": artistId, "limit": limit})
if 'result' in items:
i = 0
- list = []
+ itemList = []
artists = items['result']['artists']
while(i < len(artists)):
s = artists[i]
- list.append([s['artistName'].encode('ascii', 'ignore'),\
+ itemList.append([s['artistName'].encode('utf8', 'ignore'),\
s['artistID']])
i = i + 1
- return list
+ return itemList
else:
return []
def _parseSongs(self, items, limit=0):
if 'result' in items:
i = 0
- list = []
+ itemList = []
index = ''
l = -1
try:
info = self.getSongsInfo(s['SongID'])
coverart = info['CoverArtFilename']
elif s['CoverArtFilename'] != None:
- coverart = THUMB_URL+s['CoverArtFilename'].encode('ascii', 'ignore')
+ coverart = THUMB_URL+s['CoverArtFilename'].encode('utf8', 'ignore')
else:
coverart = 'None'
if 'Name' in s:
name = s['Name']
else:
name = s['SongName']
- list.append([name.encode('ascii', 'ignore'),\
+ if 'AlbumName' in s:
+ albumName = s['AlbumName']
+ else:
+ albumName = ""
+ itemList.append([name.encode('utf8', 'ignore'),\
s['SongID'],\
- s['AlbumName'].encode('ascii', 'ignore'),\
+ albumName.encode('utf8', 'ignore'),\
s['AlbumID'],\
- s['ArtistName'].encode('ascii', 'ignore'),\
+ s['ArtistName'].encode('utf8', 'ignore'),\
s['ArtistID'],\
coverart])
i = i + 1
- return list
+ return itemList
else:
return []
def _parseArtists(self, items):
if 'result' in items:
i = 0
- list = []
+ itemList = []
artists = items['result']['artists']
while(i < len(artists)):
s = artists[i]
- list.append([s['ArtistName'].encode('ascii', 'ignore'),\
+ itemList.append([s['ArtistName'].encode('utf8', 'ignore'),\
s['ArtistID']])
i = i + 1
- return list
+ return itemList
else:
return []
def _parseAlbums(self, items, limit=0):
if 'result' in items:
i = 0
- list = []
+ itemList = []
try:
albums = items['result']['albums']
except:
l = limit
while(i < l):
s = albums[i]
+ if 'Name' in s:
+ name = s['Name'].encode('utf8', 'ignore')
+ else:
+ name = s['AlbumName'].encode('utf8', 'ignore')
if 'CoverArtFilename' in s and s['CoverArtFilename'] != None:
- coverart = THUMB_URL+s['CoverArtFilename'].encode('ascii', 'ignore')
+ coverart = THUMB_URL+s['CoverArtFilename'].encode('utf8', 'ignore')
else:
coverart = 'None'
- list.append([s['ArtistName'].encode('ascii', 'ignore'),\
+ itemList.append([s['ArtistName'].encode('utf8', 'ignore'),\
s['ArtistID'],\
- s['AlbumName'].encode('ascii', 'ignore'),\
+ name,\
s['AlbumID'],\
coverart])
i = i + 1
- return list
+ return itemList
else:
return []
def _parsePlaylists(self, items):
i = 0
- list = []
+ itemList = []
if 'result' in items:
playlists = items['result']['playlists']
elif len(items) > 0:
while (i < len(playlists)):
s = playlists[i]
- list.append([unicode(s['PlaylistName']).encode('utf8', 'ignore'), s['PlaylistID']])
+ itemList.append([unicode(s['PlaylistName']).encode('utf8', 'ignore'), s['PlaylistID']])
i = i + 1
- return list
+ return itemList