def programacao_canal(): titles=[] sigla=name.replace('[','-') sigla=re.compile('B](.+?)/B]').findall(sigla)[0] siglacanal=sigla.replace('SPORTTV 1-','SPTV1').replace('SPORTTV 2-','SPTV2').replace('SPORTTV 3-','SPTV3').replace('SPORTTV 4-','SPTV4').replace('SPORTTV 5-','SPTV5').replace('SPORTTV LIVE-','SPTVL').replace('Discovery Channel-','DISCV').replace('AXN Black-','AXNBL').replace('AXN White-','AXNWH').replace('FOX Crime-','FOXCR').replace('FOX Life-','FLIFE').replace('FOX Movies-','FOXM').replace('Eurosport-','EURSP').replace('Hollywood-','HOLLW').replace('Canal Panda-','PANDA').replace('Benfica TV 1-','SLB').replace('Benfica TV 2-','SLB2').replace('Porto Canal-','PORTO').replace('SIC K-','SICK').replace('SIC Mulher-','SICM').replace('SIC Noticias-','SICN').replace('SIC Radical-','SICR').replace('TVI24-','TVI24').replace('TVI Ficção-','TVIFIC').replace('Mais TVI-','SEM').replace('Syfy-','SYFY').replace('Odisseia-','ODISS').replace('História-','HIST').replace('National Geographic Channel-','NGC').replace('MTV-','MTV').replace('CM TV-','CMTV').replace('RTP Informação-','RTPIN').replace('Disney Channel-','DISNY').replace('Motors TV-','MOTOR').replace('ESPN America-','SEM').replace('Fashion TV-','FASH').replace('MOV-','SEM').replace('A Bola TV-','ABOLA').replace('Panda Biggs-','BIGGS').replace('RTP 1-','RTP1').replace('RTP 2-','RTP2').replace('RTP Açores-','RTPAC').replace('RTP Madeira-','RTPMD').replace('RTP Memória-','RTPM').replace('Disney Junior-','DISNYJ').replace('RTP Africa-','RTPA').replace('Económico TV-','ETVHD').replace('Chelsea TV-','CHELS').replace('TV Globo-','GLOBO').replace('TV Record-','TVREC').replace('Eurosport 2-','EURS2').replace('Discovery Turbo-','DISCT').replace('Toros TV-','TOROTV').replace('Caça e Pesca-','CAÇAP').replace('Sporting TV-','SCP').replace('TPA Internacional-','TPA') siglacanal=siglacanal.replace('-','') dia= horaportuguesa(True) diaseguinte= horaportuguesa('diaseguinte') url='http://services.sapo.pt/EPG/GetChannelListByDateIntervalJson?channelSiglas='+siglacanal+'&startDate=' + dia +':01&endDate='+ diaseguinte + ':02' ref=int(0) link=abrir_url(url) titles.append('No ar: %s\n\n[B][COLOR white]Programação:[/COLOR][/B]' % name) programas=re.compile('{"Actor":.+?"Description":"(.+?)".+?"StartTime":".+?-.+?-(.+?) (.+?):(.+?):.+?".+?"Title":"(.+?)"').findall(link) for descprog,dia, horas,minutos, nomeprog in programas: ref=ref+1 if dia==datetime.datetime.now().strftime('%d'): dia='Hoje' else: dia='Amanhã' titles.append('\n[B][COLOR blue]%s %s:%s[/COLOR][/B] - [B][COLOR gold]%s[/COLOR][/B] - %s' % (dia,horas,minutos,nomeprog,descprog)) programacao='\n'.join(titles) try: xbmc.executebuiltin("ActivateWindow(10147)") window = xbmcgui.Window(10147) xbmc.sleep(100) window.getControl(1).setLabel('TV Portuguesa') window.getControl(5).setText(programacao) except: pass
def infocanal(siglacanal): if siglacanal == 'SEM': print "Canal sem programacao." return False try: dia = horaportuguesa(True) diaseguinte = horaportuguesa('diaseguinte') url = 'http://services.sapo.pt/EPG/GetChannelListByDateInterval?channelSiglas=' + siglacanal + '&startDate=' + dia + ':01&endDate=' + diaseguinte + ':02' link = clean(abrir_url(url)) return link except: print "Nao conseguiu capturar programacao." return False
def todosact(parametro): LOLI=['<item>\n<title>Actualizado: ' + horaportuguesa(True).replace('%20',' ') + '</title>\n<link>nada</link>\n<thumbnail>nada</thumbnail>\n</item>'] dialog = xbmcgui.Dialog() mensagemprogresso.create('TV Portuguesa', 'A criar lista.','Por favor aguarde...') if re.search('Lista Completa',parametro): canaison= openfile(('canaison')) canaison=canaison.replace('[','') lista=re.compile('B](.+?)/B]').findall(canaison) tamanhototal=int(len(lista)) tamanho=int(-1) for nomes in lista: tamanho=tamanho+1 tamanhoenviado=(tamanho*100)/tamanhototal print "Lista completa: Canal " + nomes global activadoextra activadoextra=[] SIM= request_servidores('ignore','[B]' + nomes + '[/B]',tamanho=tamanhoenviado) LOLI.append(SIM) AGORA='\n\n'.join(LOLI) else: SIM= request_servidores('ignore',parametro) LOLI.append(SIM) AGORA='\n\n'.join(LOLI) mensagemprogresso.close() debugfinal='\n'.join(debug) savefile('problema',debugfinal) keyb = xbmc.Keyboard('', 'Nome do ficheiro da lista') keyb.doModal() if (keyb.isConfirmed()): nomelista = keyb.getText() if nomelista=='': nomelista='lista' else: nomelista='lista' pastafinal = dialog.browse(int(0), "Local para guardar xml/m3u", 'myprograms') if not pastafinal: sys.exit(0) savefile(nomelista + '.xml',AGORA,pastafinal=pastafinal) m3uprep=['#EXTM3U#EXTM3U'] openedfile= clean(AGORA) ya=re.compile('<item>(.+?)</item>').findall(openedfile) for lol in ya: chname=re.compile('<title>(.+?)</title>').findall(lol)[0] allstreams=False if allstreams==True: streams=re.compile('<link>(.+?)</link>').findall(lol) for umporum in streams: m3uprep.append('\n#EXTINF:-1,%s\n%s' % (chname,umporum)) else: streams=re.compile('<link>(.+?)</link>').findall(lol)[0] m3uprep.append('\n#EXTINF:-1,%s\n%s' % (chname,streams)) m3uprep='\n'.join(m3uprep) savefile(nomelista + '.m3u',m3uprep,pastafinal=pastafinal) xbmc.executebuiltin("XBMC.Notification(TV Portuguesa, Lista xml/m3u gravada,'100000'," + tvporpath + art + "icon32-ver1.png)")
def p_todos(): if selfAddon.getSetting("prog-lista3") == "false": return '' else: try: dia= horaportuguesa(True) listacanais='RTP1,RTP2,SIC,TVI,SPTV1,SPTV2,SPTV3,SPTV4,SPTV5,SLB,SLB2,PORTO,CMTV,RTPIN,SICK,SICM,SICN,SICR,TVI24,TVIFIC,HOLLW,AXN,AXNBL,AXNWH,FOX,FOXCR,FLIFE,FOXM,SYFY,DISNY,PANDA,MOTOR,DISCV,ODISS,HIST,NGC,EURSP,FASH,VH1,MTV,ABOLA,RTPAC,RTPA,RTPM,RTPMD,BIGGS,ETVHD,DISNYJ,CHELS,CAÇAP,TOROTV,DISCT,GLOBO,TVREC,EURS2,SCP,TPA,EURN,ARTV,TRACE' url='http://services.sapo.pt/EPG/GetChannelListByDateInterval?channelSiglas='+listacanais+'&startDate=' + dia +':01&endDate='+ dia + ':02' link= clean(abrir_url(url,erro=False)) listas=re.compile('<Sigla>(.+?)</Sigla>.+?<Title>(.+?)</Title>.+?<Description>(.+?)</Description>').findall(link) canais={} for nomecanal, nomeprog, descricao in listas: canais[nomecanal]={'nomeprog':'(' + nomeprog + ')','descprog':descricao} return canais except: pass
def calculafinalprograma(link): fim = re.compile('<EndTime>(.+?)-(.+?)-(.+?) (.+?):(.+?):.+?</EndTime>' ).findall(link)[0] agora = horaportuguesa(False) inicio = re.compile('(.+?)-(.+?)-(.+?) (.+?)-(.+?)-').findall(agora)[0] start = datetime.datetime(year=int(inicio[0]), month=int(inicio[1]), day=int(inicio[2]), hour=int(inicio[3]), minute=int(inicio[4])) end = datetime.datetime(year=int(fim[0]), month=int(fim[1]), day=int(fim[2]), hour=int(fim[3]), minute=int(fim[4])) diff = end - start segundos = (diff.microseconds + (diff.seconds + diff.days * 24 * 3600) * 10**6) / 10**6 return segundos
def correrdump(args, nomecanal, pathso, siglacanal, directo, script=False): import subprocess info = infocanal(siglacanal) escolha = 0 #### inicializador mensagemprogresso.close() if info != False and directo != 'listas': escolha = listadeprogramas(info) #### se ha programacao, mostra lista if escolha == 0: if info != False and directo != 'listas': #### ha programacao fimprograma = calculafinalprograma(info) tituloprograma = ' - ' + re.compile( '<Title>(.+?)</Title>').findall(info)[0] #nomecanal = nomecanal + tituloprograma minutosrestantes = fimprograma / 60 opcao = xbmcgui.Dialog().yesno( "TV Portuguesa", 'Faltam ' + str(minutosrestantes) + ' minutos para o fim do programa', "Deseja gravar o resto do programa ou", "definir um tempo de gravação?", 'Definir tempo', 'Gravar restante') if opcao == 1: if selfAddon.getSetting("acrescentogravacao") == "0": segundos = fimprograma elif selfAddon.getSetting("acrescentogravacao") == "1": segundos = fimprograma + 120 elif selfAddon.getSetting("acrescentogravacao") == "2": segundos = fimprograma + 300 elif selfAddon.getSetting("acrescentogravacao") == "3": segundos = fimprograma + 600 else: segundos = fimprograma + 120 minutos = segundos / 60 else: minutos = -1 while minutos < 1: minutos = int(xbmcgui.Dialog().numeric( 0, "Num de minutos de gravacao")) segundos = minutos * 60 else: minutos = -1 while minutos < 1: minutos = int(xbmcgui.Dialog().numeric( 0, "Num de minutos de gravacao")) segundos = minutos * 60 nomecanal = limpar(re.sub('[^-a-zA-Z0-9_.()\\\/ ]+', '', nomecanal)) horaactual = horaportuguesa(False) if pathso == 'alternativo': caminhodump = selfAddon.getSetting("rtmpdumpalternativo") else: caminhodump = os.path.join(gravadorpath, pathso) if xbmc.getCondVisibility('system.platform.linux'): st = os.stat(caminhodump) os.chmod(caminhodump, st.st_mode | stat.S_IEXEC) args = args.split(' ') typeargs = [] for types in args: if len(types) != 2: typeargs.append('"' + types + '"') else: typeargs.append(types) args = ' '.join(typeargs) argumentos = args + ' -o "' + downloadPath + horaactual + ' - ' + nomecanal + '.flv" -B ' + str( segundos) #argumentos=args + ' -o "' + downloadPath + horaactual + '.flv" -B ' + str(segundos) if script: conteudoscript = script + xbmc.translatePath( os.path.join(gravadorpath, pathso)) + ' $1 ' + argumentos savefile('script.sh', conteudoscript, pastafinal=gravadorpath) caminhodump = xbmc.translatePath( os.path.join(gravadorpath, 'script.sh')) st = os.stat(caminhodump) os.chmod(caminhodump, st.st_mode | stat.S_IEXEC) try: #proc = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) if script: proc = subprocess.Popen(caminhodump, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) else: #proc = subprocess.Popen(argumentos, executable=caminhodump + '.exe', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) cmd = '"%s" %s' % (caminhodump, argumentos) proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) print "RTMPDump comecou a funcionar" xbmc.executebuiltin( "XBMC.Notification(TV Portuguesa, Gravação de " + str(minutos) + " minutos iniciou,'10000'," + tvporpath + "/resources/art/icon32-ver1.png)") (stdout, stderr) = proc.communicate() print "RTMPDump parou de funcionar" stderr = normalize(stderr) if u'Download complete' in stderr: print 'stdout: ' + str(stdout) print 'stderr: ' + str(stderr) print "Download Completo!" xbmc.executebuiltin( "XBMC.Notification(TV Portuguesa, Gravação efectuada com sucesso,'10000'," + tvporpath + "/resources/art/icon32-ver1.png)") else: print 'stdout: ' + str(stdout) print 'stderr: ' + str(stderr) print "Download Falhou!" xbmc.executebuiltin( "XBMC.Notification(TV Portuguesa, Gravação falhou,'10000'," + tvporpath + "/resources/art/icon32-ver1.png)") except Exception: print("Nao conseguiu abrir o programa") xbmc.executebuiltin( "XBMC.Notification(TV Portuguesa, Erro ao abrir programa de gravação,'10000'," + tvporpath + "/resources/art/icon32-ver1.png)") (etype, value, traceback) = sys.exc_info() print "Erro etype: " + str(etype) print "Erro valor: " + str(value) print "Erro traceback: " + str(traceback)