New API.
[clinton/xbmc-groove.git] / resources / lib / GroovesharkAPI.py
index 18dd631..2eadd13 100644 (file)
@@ -178,6 +178,7 @@ class GrooveAPI:
        sessionID = ''
        userID = 0
        host = 'api.grooveshark.com'
+       lastSessionTime = 0
 
        # Constructor
        def __init__(self, cacheDir):
@@ -185,13 +186,16 @@ class GrooveAPI:
                self.simplejson = simplejson
                socket.setdefaulttimeout(40)
                self.cacheDir = cacheDir
-               self.sessionID = self._getSavedSessionID()
-               if self.sessionID == '':
+               self._getSavedSessionID()
+               # session ids last 1 week
+               if self.sessionID == '' or time.time()- self.lastSessionTime >= 6*86400:
                        self.sessionID = self._getSessionID()
                        if self.sessionID == '':
                                raise StandardError('Failed to get session id')
                        else:
-                               self._setSavedSessionID()       
+                               print "New session id: " + self.sessionID
+                               self._setSavedSessionID()
+
        # Sort keys             
        def _keySort(self, d):
                return [(k,d[k]) for k in sorted(d.keys())]
@@ -227,20 +231,21 @@ class GrooveAPI:
        def _getSessionID(self):
                params = {}
                result = self._callRemote('startSession', params)
+               self.lastSessionTime = time.time()
                return result['result']['sessionID']
        
        def _getSavedSessionID(self):
-               sessionID = ''
-               path = os.path.join(self.cacheDir, 'session', 'session.txt')
+               path = os.path.join(self.cacheDir, 'session', 'session.dmp')
                try:
                        f = open(path, 'rb')
-                       sessionID = pickle.load(f)
+                       session = pickle.load(f)
+                       self.sessionID = session['sessionID']
+                       self.lastSessionTime = session['lastSessionTime']
                        f.close()
                except:
-                       sessionID = ''
+                       self.sessionID = ''
+                       self.lastSessionTime = 0
                        pass            
-               
-               return sessionID
 
        def _setSavedSessionID(self):                   
                try:
@@ -248,9 +253,10 @@ class GrooveAPI:
                        # Create the 'data' directory if it doesn't exist.
                        if not os.path.exists(dir):
                                os.makedirs(dir)
-                       path = os.path.join(dir, 'session.txt')
+                       path = os.path.join(dir, 'session.dmp')
                        f = open(path, 'wb')
-                       pickle.dump(self.sessionID, f, protocol=pickle.HIGHEST_PROTOCOL)
+                       session = { 'sessionID' : self.sessionID, 'lastSessionTime' : self.lastSessionTime}
+                       pickle.dump(session, f, protocol=pickle.HIGHEST_PROTOCOL)
                        f.close()
                except:
                        print "An error occured during save session"
@@ -469,8 +475,8 @@ class GrooveAPI:
 
 # Test
 
-#res = []
-#groovesharkApi = GrooveAPI('/tmp')
+res = []
+groovesharkApi = GrooveAPI('/tmp')
 #res = groovesharkApi.login('stephendenham', '*******')
 #res = groovesharkApi.getSongSearchResults('jimmy jazz', 3)
 #res = groovesharkApi.getPopularSongsToday()
@@ -479,7 +485,7 @@ class GrooveAPI:
 #res = groovesharkApi.getArtistSearchResults('the clash', 3)
 #res = groovesharkApi.getUserFavoriteSongs()
 #res = groovesharkApi.getUserPlaylists()
-#res = groovesharkApi.getSongInfo('27425375')
+res = groovesharkApi.getSongInfo('27425375')
 #res = groovesharkApi.getPlaylistSongs(40902662)
 
 #pprint.pprint(res)