11#!/usr/bin/python
22# -*- coding: utf8 -*-
33
4- import os , sys , json , re
5- import datetime , time
6- from datetime import datetime , timedelta
7- import requests
8-
9- offset = 0.0
10- dbg = True
4+ import os , sys , time
115
126UA = {
137 'Host' : 'api.iptv.bulsat.com' ,
2418__resource__ = os .path .join ( os .getcwd (), 'resources' , 'lib' )
2519sys .path .insert (0 , __resource__ )
2620
27- usr , psw = os .getenv ('BSCLOGIN' , 'user:pass' ).split (':' )
28-
29- def url_update_1 (u ):
30- if re .match (r'^.*smil\:.*\.smil\?scheme=m3u8.*$' , u ):
31- for m in [
32- {'re' : r'http\:\/\/lb-sf' , 'ch' : 'http://edge-sf-1' },
33- {'re' : r'redirect\/' , 'ch' : '' },
34- {'re' : r'\/smil\:' , 'ch' : '/_definst_/smil:' },
35- {'re' : r'\?.*m3u8\&' , 'ch' : '/playlist.m3u8?' },
36- ]:
37- if dbg :
38- print m
39- u = re .sub (m ['re' ], m ['ch' ], u )
40- else :
41- for m in [
42- {'re' : r'http\:\/\/lb-sf' , 'ch' : 'http://edge-sf-1' },
43- {'re' : r'redirect\/' , 'ch' : '' },
44- {'re' : r'\:1935\/(.*?\/)' , 'ch' :'\g<0>_definst_/' },
45- {'re' : r'\?.*m3u8\&' , 'ch' : '/playlist.m3u8?' },
46- ]:
47- if dbg :
48- print m
49- u = re .sub (m ['re' ], m ['ch' ], u )
50-
51- u += '|User-Agent=%s' % (urllib .quote_plus (__ua_os [sys .argv [1 ]]['ua' ]))
52- return u
53-
54- def url_update_0 (u ):
55- return u
56-
5721__ua_os = {
58- '0' : {'ua' : 'pcweb' , 'osid' : 'pcweb' , 'url_up' : url_update_0 },
59- '1' : {'ua' : 'Mozilla/5.0 (SMART-TV; Linux; Tizen 2.3) AppleWebkit/538.1 (KHTML, like Gecko) SamsungBrowser/1.0 TV Safari/538.1' , 'osid' : 'samsungtv' , 'url_up' : url_update_1 },
60- '2' : {'ua' : 'HLS Client/2.0 (compatible; LG NetCast.TV-2012)' , 'osid' : 'lgtv' , 'url_up' : url_update_1 },
61- '3' : {'ua' : 'Mozilla/5.0 (FreeBSD; Viera; rv:34.0) Gecko/20100101 Firefox/34.0' , 'osid' : 'panasonictv' , 'url_up' : url_update_1 },
62- '4' : {'ua' : 'Bulsatcom for android' , 'osid' : 'androidtv' , 'url_up' : url_update_1 },
22+ '0' : {'ua' : 'pcweb' , 'osid' : 'pcweb' },
23+ '1' : {'ua' : 'Mozilla/5.0 (SMART-TV; Linux; Tizen 2.3) AppleWebkit/538.1 (KHTML, like Gecko) SamsungBrowser/1.0 TV Safari/538.1' , 'osid' : 'samsungtv' },
24+ '2' : {'ua' : 'HLS Client/2.0 (compatible; LG NetCast.TV-2012)' , 'osid' : 'lgtv' },
25+ '3' : {'ua' : 'Mozilla/5.0 (FreeBSD; Viera; rv:34.0) Gecko/20100101 Firefox/34.0' , 'osid' : 'panasonictv' },
26+ '4' : {'ua' : 'Bulsatcom for android' , 'osid' : 'androidtv' },
6327}
6428
65- def url_update (u ):
66- u = __ua_os [sys .argv [1 ]]['url_up' ](u )
67- if dbg :
68- print '### %s os: %s -> %s' % ('xxx' , __ua_os [sys .argv [1 ]]['osid' ], u ,)
69- return u
70-
71- def mk_info_string (e ):
72- s = u'T: %s' % timesmk (e )
73- if e ['title' ]:
74- s += u' title: %s' % e ['title' ]
75- if e ['desc' ]:
76- s += u' desc: %s' % e ['desc' ]
77- s += '[CR]'
78- return s
79-
80- def timesmk (v ):
81- ts = v .get ('start' , None )
82- te = v .get ('stop' , None )
83- if ts is None or te is None :
84- return u''
85- ts = datetime .fromtimestamp (time .mktime (time .strptime (ts .split ()[0 ], '%Y%m%d%H%M%S' ))) + timedelta (minutes = offset )
86- te = datetime .fromtimestamp (time .mktime (time .strptime (te .split ()[0 ], '%Y%m%d%H%M%S' ))) + timedelta (minutes = offset )
87- return u'%s %s' % (ts .strftime ("%H:%M:%S" ), te .strftime ("%H:%M:%S" ))
88-
89- def get_prog_info (ch ):
90- s = u''
91- pr = ch .get ('program' , None )
92- if pr :
93- if isinstance (pr , list ):
94- for entry in pr :
95- s += mk_info_string (entry )
96- s += '[CR]'
97- elif isinstance (pr , dict ):
98- s += mk_info_string (pr )
99-
100- s += u'[COLOR 3300FF00]'
101- if ch ['channel' ]:
102- s += u'[CR]channel: %s' % ch ['channel' ]
103- if ch .has_key ('audio' ) and ch ['audio' ]:
104- s += u'[CR]audio: %s' % ch ['audio' ]
105- if ch ['quality' ]:
106- s += u'[CR]quality: %s' % ch ['quality' ]
107- s += u'[/COLOR]'
108- return s
10929
11030def progress_cb (a ):
11131 print 'Cb: %s -> %s' % (a ['str' ], a ['pr' ])
11232
113- #if __name__ == '__main__':
114- #if len(sys.argv) != 2:
115- #for p in sys.argv:
116- #print p
117- #print '0 - pcweb, 1 - samsungtv'
118- #sys.exit('wrong parameters')
119-
120- #if sys.argv[1] != '0':
121- #UA['User-Agent'] = __ua_os[sys.argv[1]]['ua']
122-
123- #import bsc
124- #start_time = time.time()
125- #p = os.path.join(os.getcwd(), 'tmp')
126- #v = '0.0.0'
127-
128- #map_url = 'http://snip.li/epgmap'
129-
130- #print usr, psw, p, v
131- #b = bsc.dodat(base = 'https://api.iptv.bulsat.com',
132- #login = {'usr': usr,'pass': psw},
133- #path = p,
134- #cachetime = 1,
135- #dbg = dbg,
136- #timeout = 10,
137- #ver = v,
138- #xxx = True,
139- #os_id = __ua_os[sys.argv[1]]['osid'],
140- #agent_id = __ua_os[sys.argv[1]]['ua'],
141- #app_ver = '0.2.17',
142- #gen_m3u = True,
143- #gen_epg = False,
144- #compress = True,
145- #map_url = map_url,
146- #proc_cb = progress_cb,
147- #)
148- #b.gen_all(True)
149-
33+ def cmd_get_dbg ():
34+ return raw_input ("q - quit\n r - restart\n " )
35+
36+ def cmd_get ():
37+ if refreshtime :
38+ time .sleep (600 )
39+ diff = (time .time () - last_runtime [0 ]) / 60.0
40+ print 'Time check %f' % diff
41+ if diff > float (refreshtime ):
42+ last_runtime [0 ] = time .time ()
43+ return "r"
44+ else :
45+ return raw_input ("q - quit\n r - restart\n " )
15046
15147def main ():
48+ last_runtime [0 ] = time .time ()
15249 server .my_serv .start ()
15350 try :
15451 while True :
155- ch = raw_input ( "q - quit \n r - restart \n " )
156- print ch
157-
158- if ch == "q" :
52+ c = cmd_get ( )
53+ if c :
54+ print c
55+ if c == "q" :
15956 break ;
160- if ch == "r" :
57+ if c == "r" :
16158 server .my_serv .restart ()
16259 except KeyboardInterrupt :
16360 print "\n KeyboardInterrupt"
@@ -166,15 +63,20 @@ def main():
16663def __log (fmt , data ):
16764 print fmt % data
16865
66+ usr , psw = os .getenv ('BSCLOGIN' , 'user:pass' ).split (':' )
67+ refreshtime = os .getenv ('BSCREFRESH' , False )
68+
69+ last_runtime = [0.0 ]
70+
16971if __name__ == "__main__" :
17072 if len (sys .argv ) != 2 :
17173 for p in sys .argv :
17274 print p
17375 print '0 - pcweb, 1 - samsungtv'
17476 sys .exit ('wrong parameters' )
77+
17578 import server
17679 server .log_cb = __log
177- server .dumper_path = os .path .join (os .getcwd (), 'resources' , 'dumper.template' )
17880 kwargs = {
17981 'base' : 'https://api.iptv.bulsat.com' ,
18082 'login' : {'usr' : usr ,'pass' : psw },
@@ -186,7 +88,7 @@ def __log(fmt, data):
18688 'path' : os .path .join (os .getcwd ()),
18789 'timeout' : 10 ,
18890 'dbg' : True ,
189- 'gen_epg' : False
91+ 'gen_epg' : False ,
19092 }
19193 server .my_serv = server .serv (kwargs )
19294
0 commit comments