def getSessionID(self): http = httplib2.Http() url = 'http://listen.grooveshark.com' response, src = http.request(url, 'GET', headers=HEADER) src = src.lower().replace(' ', '') start = src.find('session') end = src[start:].find("',") startSession = src[start:end + start].find("'") + 1 return src[startSession + start:end + start]
def GetFileSize(self, songKey, streamServer, proxy=False): http = httplib2.Http() url = 'http://' + streamServer + '/stream.php' #use self. so that any outer program can access it (not local) params = urllib.urlencode({'streamKey': songKey}) if proxy: f = proxy.open(url, params) else: f = urllib.urlopen(url, params) file_size = f.info().dict['content-length'] return file_size
def popular(self): http = httplib2.Http() url = 'http://cowbell.grooveshark.com/more.php?popularGetSongs' popularPOSTdata = ( '''{"header":{"token":"%s","session":"%s","uuid":"%s","client":"gslite","clientRevision":"%s"},''' '''"parameters":{},"method":"popularGetSongs"}''' % (self.token, self.session, self.uuid, self.clientRevision)) request, reply = http.request(url, 'POST', headers=HEADER, body=popularPOSTdata) return json.loads(reply)['result']['Songs']
def getToken(self): http = httplib2.Http() url = 'https://cowbell.grooveshark.com/service.php' self.secretKey = hashlib.md5(self.session).hexdigest() tokenPOSTdata = ( '''{"header":{"session":"%s","uuid":"%s","client":"gslite","clientRevision":"%s"},''' '''"parameters":{"secretKey":"%s"},"method":"getCommunicationToken"}''' % (self.session, self.uuid, self.clientRevision, self.secretKey)) request, reply = http.request(url, 'POST', headers=HEADER, body=tokenPOSTdata) return json.loads(reply)['result']
def search(self, search_string): http = httplib2.Http() data = ( '''{"header":{"session":"%s","uuid":"%s","client":"gslite","clientRevision":"%s","token":"%s"},''' '''"parameters":{"type":"Songs","query":"%s"},"method":"getSearchResults"}''' % (self.session, self.uuid, self.clientRevision, self.token, search_string.lower())) self.response, self.result = http.request(self.search_url, 'POST', headers=header, body=data) self.result = self.result self.searchResults = json.loads(self.result)['result']['Return'] return self.searchResults
def download(self, songKey, streamServer, file_name, proxy=None): http = httplib2.Http() #use self. so that any outer program can access it (not local) self.mp3URL = 'http://' + streamServer + '/stream.php' data = {} data['streamKey'] = songKey #@@songHeader = dict(header) #@@songHeader['content-length'] = str(len(urllib.urlencode(data))) #@@songHeader['content-type'] = 'application/x-www-form-urlencoded' #@@response, self.song = http.request(self.mp3URL, 'POST', headers = songHeader, body = urllib.urlencode(data)) #@@print response #{'content-length': '30', 'content-type': 'application/x-www-form-urlencoded', 'u #ser-agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/2 #0090824 Firefox/3.5.3 (.NET CLR 3.5.30729)'} # using urlgrabber to grab the file, more responsive than httplib2, # file saves as it downloads as opposed to when completed headers = ( ('content-length', str(len(urllib.urlencode(data)))), ('content-type', 'application/x-www-form-urlencoded'), ('user-agent', HEADER['user-agent']), ) #prog = urlgrabber.progress.text_progress_meter() #response = urlgrabber.urlopen(self.mp3URL, data=urllib.urlencode(data), http_headers=headers) #, progress_obj=prog) #response = urlgrabber.urlread(self.mp3URL, data=urllib.urlencode(data), http_headers=headers) #, progress_obj=prog) #file_name = system_files.GetDirectories(self.parent).BuildTempFile('temp.mp3') #proxies={ 'http' : 'http://*****:*****@@f = open('temp.mp3', 'wb') #@@f.write(self.song) #@@f.close() return response
def songKeyfromID(self, id): http = httplib2.Http() self.songID = id songKeyURL = ' http://cowbell.grooveshark.com/more.php?getStreamKeyFromSongID' songKeyPOSTdata = ( '''{"header":{"token":"%s","session":"%s","uuid":"%s","client":"gslite","clientRevision":"%s"},''' '''"parameters":{"songID":%s,"prefetch":false},"method":"getStreamKeyFromSongID"}''' ) % (self.token, self.session, self.uuid, self.clientRevision, self.songID) request, reply = http.request(songKeyURL, 'POST', headers=HEADER, body=songKeyPOSTdata) self.reply = json.loads(reply)['result'] print reply streamServer = self.reply['result']['streamServer'] self.songKey = self.reply['result']['streamKey'] return (self.songKey, streamServer)