Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import logging
- import urllib
- import signal
- import os
- import time
- import re
- import BeautifulSoup
- import xml.dom.minidom
- from operator import itemgetter
- def collation( s1, s2 ):
- ss1 = s1[ 0 ].lower( )
- ss2 = s2[ 0 ].lower( )
- return ( ss1 > ss2 ) - ( ss1 < ss2 )
- class services:
- def __init__( self, ip, type ):
- self.list = { }
- request = urllib.urlopen( 'http://%s/cgi-bin/getServices?ref=%s' % ( ip, type ) )
- while True:
- line = request.readline( )
- if line == '': break
- tokens = line.split( ';' )
- self.list[ tokens[ 0 ] ] = tokens[ 1 : ]
- self.sorted = sorted( self.list.iteritems( ), cmp = collation, key = itemgetter( 1 ) )
- class data_parser:
- def __init__( self, ip ):
- request = urllib.urlopen( 'http://%s/data' % ip )
- tree = BeautifulSoup.BeautifulSoup( request )
- incidents = tree( 'script' )
- for entry in incidents[ 1 ].decode( ).split( '\n' )[ 1:-1 ]:
- line = str( entry ).strip( )
- if line.startswith( 'var ' ):
- exec( line.replace( 'var ', 'self.', 1 )[ 0:-1] )
- def obtain_service( element ):
- return ( element.getElementsByTagName( "e2servicereference" )[ 0 ].firstChild.data, element.getElementsByTagName( "e2servicename" )[ 0 ].firstChild.data )
- def obtain_title( element ):
- return ( urllib.quote( element.getElementsByTagName( "e2servicereference" )[ 0 ].firstChild.data ), element.getElementsByTagName( "e2title" )[ 0 ].firstChild.data )
- def obtain_services( element ):
- return element.getElementsByTagName( "e2service" )
- def obtain_movies( element ):
- return element.getElementsByTagName( "e2movie" )
- class services2:
- def __init__( self, ip, type ):
- self.list = { }
- fd = urllib.urlopen( 'http://%s/web/getservices?sRef=%s' % ( ip, urllib.quote( type ) ) )
- dom = xml.dom.minidom.parse( fd )
- for element in obtain_services( dom ):
- service = obtain_service( element )
- try:
- if len( service[ 1 ] ) and service[ 1 ][ 0 ] not in '(.!- ':
- self.list[ str( service[ 0 ] ) ] = [ str( service[ 1 ] ) ]
- except Exception:
- pass
- self.sorted = sorted( self.list.iteritems( ), cmp = collation, key = itemgetter( 1 ) )
- class enigma2:
- def __init__( self, ip, bouquet ):
- self.ip = ip
- self.bouquet = bouquet
- def populate( self ):
- bouquets = { }
- services = { }
- #fd = urllib.urlopen( "http://%s/web/getservices" % self.ip )
- #print "http://%s/web/getservices" % self.ip
- #dom = xml.dom.minidom.parse( fd )
- #for element in obtain_services( dom ):
- # print "Element: %s" % element
- # bouquet = obtain_service( element )
- # bouquets[ unicode( bouquet[ 1 ] ).replace( ' ', '_' ).replace( ',', ':' ) ] = self.get_services( bouquet[ 0 ] )
- #services[ 'TV' ] = self.get_services( '1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25) ORDER BY name' )
- services[ 'TV' ] = self.get_services( self.bouquet )
- #services[ 'radio' ] = self.get_services( '1:7:2:0:0:0:0:0:0:0:(type == 2) ORDER BY name' )
- return services, bouquets
- def get_services( self, key ):
- return services2( self.ip, key )
- def stream_info( self ):
- url = 'http://%s/web/subservices' % ( self.ip )
- fd = urllib.urlopen( url )
- service = obtain_service( xml.dom.minidom.parse( fd ) )
- result = { }
- result[ 'Service reference' ] = service[ 0 ]
- result[ 'Name' ] = service[ 1 ]
- return result
- def url( self, client ):
- """Request current channel url"""
- info = self.stream_info( )
- if info[ 'Service reference' ].find( '1:0:0:0:0:0:0:0:0:0:' ) == -1:
- client.write( "http://%s:8001/%s" % ( self.ip, info[ 'Service reference' ] ) )
- else:
- client.write( "http://%s/file?file=%s" % ( self.ip, urllib.quote( info[ 'Service reference' ][ 20 : ] ) ) )
- return bt.SUCCESS
- def movies( self, client ):
- """Request recorded movie list"""
- url = 'http://%s/web/movielist' % self.ip
- fd = urllib.urlopen( url )
- for movie in obtain_movies( xml.dom.minidom.parse( fd ) ):
- title = obtain_title( movie )
- client.write( "%s, %s" % ( title[ 0 ], title[ 1 ] ) )
- return bt.SUCCESS
- sat_host = 'vuduo.local'
- sat_port = '8001'
- dir_name = 'm3u'
- av_host = 'Andromeda.local'
- av_port = '57740'
- my_bouquet = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "userbouquet.dbe01.tv"'
- obj = enigma2 (sat_host, my_bouquet)
- if obj is not None:
- services, bouquets = obj.populate()
- for service in services[ 'TV' ].sorted:
- print "Service ref: %s name: %s" % (service[0], service[1][0])
- filename = unicode( service[1][0] ).replace( ' ', '_' ).replace( ',', ':' ).replace( '/', ':' )
- if filename != "<n/a>":
- f = open('%s/%s.m3u' % (dir_name, filename), 'w')
- f.write('#EXTM3U\n')
- f.write('#EXTINF:0,%s\n' % service[1][0])
- f.write('http://%s:%s/stream?url=http://%s:%s/%s\n' % (av_host, av_port, sat_host, sat_port, service[0]))
- f.close()
Add Comment
Please, Sign In to add comment