Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- import socket, sys
- class lsConnector:
- def __init__(self,host,referenceStream=''):
- self.host = host
- self.sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
- self.refStream = referenceStream
- self.sock.connect((self.host,1234))
- self.flo = self.sock.makefile('r',0)
- def setReferenceStream(self,streamName):
- self.refStream = streamName
- def _getDataBuf(self):
- ready = False
- buffer = ''
- while not(ready):
- line = self.flo.readline()
- ready = ('END\n' == line)
- if ready:
- break
- buffer += line
- return buffer
- def getRidMetadata(self,rid):
- lines = self.execCmdToLines('metadata %s' % rid)
- return self._getMetadata(lines)
- def _getMetadata(self,lines):
- metadata = dict()
- for line in lines:
- try:
- (key,value) = line.split('="')
- value = value[:-1]
- metadata[key] = value
- except:
- pass
- return metadata
- def getLatestTracks(self):
- tracks = list()
- info = self.execCmd("%s.metadatas" %self.refStream)
- trackBlocks = info.split("\n-")
- for trackBlock in trackBlocks:
- num = trackBlock.split(" ")[1]
- metaRaw = trackBlock.split("\n")[1:]
- tracks.append((num,self._getMetadata(metaRaw)))
- return tracks
- def getCurrentRid(self):
- output = self.execCmd('on_air')
- return int(output)
- def getCurrentRidInfo(self):
- return self.getRidMetadata(self.getCurrentRid())
- def execCmd(self,cmd):
- self.sock.send("%s\n" %cmd)
- return self._getDataBuf()
- def execCmdToLines(self,cmd):
- return self.execCmd(cmd).split('\n')[:-1]
- def isLive(self):
- try:
- return (self.getCurrentTrackInfo()['songtype']=='S')
- except:
- return False
- def getCurrentTrackInfo(self):
- return self.getLatestTracks()[-1][1]
- def makeRequest(self,filename):
- return int(self.execCmd("request.push %s" %filename))
- def skipTrack(self):
- self.execCmd("%s.skip" %self.refStream)
- def getRemainingTime(self):
- return self.execCmd("%s.remaining" %self.refStream)
- def kickBroadcaster(self):
- self.execCmd("live.stop")
- self.execCmd("live.start")
Add Comment
Please, Sign In to add comment