#! /usr/bin/env python # -*- coding: iso-8859-15 -*- import os,sys,socket,shutil sys.path.append('/usr/scripts/gestion') import lock import time from time import localtime,sleep tmp_dir = '/tmp' www_dir = '/var/www/' img_dir = '%s/images' % www_dir t = localtime() trame_entete=""" Chaines diffusées \"En_tete\"
Chaines diffusées
Cette page à été générée à %02ih%02i

Pour plus d'informations cliquez ici

Petites vignettes
Vignettes Normales
""" % (int(t[3]) ,int(t[4]) ) table_piedpage="""
""" trame_piedpage=""" """ def ajoute_image(nom,fqdn,ip,html,html_petites): html.write('') html.write('Chaine : %s / IP : %s
' % (fqdn, nom, ip)) html.write('Chaine : %s
IP : %s:1234' % (nom, ip)) html.write('\n') html_petites.write('') html_petites.write('Chaine : %s / IP : %s
' % (fqdn, nom, ip)) html_petites.write('Chaine : %s
IP : %s:1234' % (nom, ip)) html_petites.write('\n') def vignettes() : html = open('%s/vignettes.html' % tmp_dir,'w') html.write(trame_entete) html_petites = open('%s/vignettes_petites.html' % tmp_dir,'w') html_petites.write(trame_entete) col = 0 col_petites = 0 #a factoriser chaines_probleamatiques=[] os.system('/usr/scripts/tv/recup_sap') #On est obligé de mettre en dur le path #car il n'est pas configurable dans recup_sap chaines_sap = open('/tmp/chaines_recup_sap.txt','r').readlines() chaines_sap_sort = open('%s/chaines_recup_sap_triees.txt' % tmp_dir, 'w' ) chaines_sap.sort() for line in chaines_sap : chaines_sap_sort.write(line.replace('\'','')) chaines_sap_sort.close() for line in chaines_sap : line = line.strip() nom = line.split(':')[0] ip = line.split(':')[-1] print '%s %s' %(str(ip),str(nom)) try : fqdn = socket.gethostbyaddr(ip)[0] except gai.error, err : print 'On n\'arrive pas à résoudre ce nom %s %s' % (ip,err[1]) continue except : print 'Erreur inconnue' continue else : #on évite les radios, peu de debit et pas de vignettes if nom[0:3]=='rad' : #C'est une radio on cherche un logo nom_court=(' '.join(nom.split(' ')[2:])).lower() print "On s'occupe de la radio %s" % nom_court for file in os.listdir('%s /logos_radios' % img_dir): try : shutil.copy(' %s/logos_radios/%s' % (img_dir,file),'%s/%s.jpg' % (img_dir,fqdn)) shutil.copy(' %s/logos_radios/%s' % (img_dir,file),'%s/%s_petites.jpg' % (img_dir,fqdn)) except : #il n'y a pas de logo :-( chaines_probleamatiques.append('Chaine : %s
IP : %s:1234

\n' %(nom,ip)) continue else : if col == 2 : col = 1 html.write('\n') else : col += 1 if col_petites == 3: col_petites = 1 html_petites.write('\n') else : col_petites += 1 ajoute_image(nom,fqdn,ip,html,html_petites) print 'on s\'occupe de %s %s' % (ip,nom) print '\trecuperation du flux' #ip port duree os.system('/usr/scripts/tv/dumpudp %s 1234 2 > %s/%s.ts 2>/dev/null' % (ip,tmp_dir,ip)) os.system('ffmpeg -deinterlace -an -i %s/%s.ts -s 400x300 -r 1 -t 00:00:01 -f image2 %s/%s.jpg 1>/dev/null 2>/dev/null' % (tmp_dir,ip,img_dir,fqdn)) if not os.path.exists('%s/%s.jpg' % (img_dir,fqdn)) or not os.stat('%s/%s.jpg' % (img_dir,fqdn))[6] : print '\tOn retente' os.system('/usr/scripts/tv/dumpudp %s 1234 2 > %s/%s.ts ' % (ip,tmp_dir,ip)) os.system('ffmpeg -deinterlace -an -i %s/%s.ts -s 400x300 -r 1 -t 00:00:01 -f image2 %s/%s.jpg 1>/dev/null 2>/dev/null' % (tmp_dir,ip,img_dir,fqdn)) if not os.path.exists('%s/%s.jpg' % (img_dir,fqdn)) or not os.stat('%s/%s.jpg' % (img_dir,fqdn))[6] : shutil.copy('%s/fail.jpg' % (img_dir) , '%s/%s.jpg' % (img_dir,fqdn)) if os.path.exists('%s/%s_petites.jpg' % (img_dir,fqdn)) : os.remove('%s/%s_petites.jpg' % (img_dir,fqdn)) os.system('convert -geometry \'200x150 !\' %s/%s.jpg %s/%s_petites.jpg 2>/dev/null 1>/dev/null' % (img_dir,fqdn,img_dir,fqdn)) #On met des symlink pour garder une compatibilité avec les programmes utilisant les adresses ip if os.path.exists('%s/%s.jpg' % (img_dir,ip)) : os.remove('%s/%s.jpg' % (img_dir,ip)) if os.path.exists('%s/%s_petites.jpg' % (img_dir,ip)) : os.remove('%s/%s_petites.jpg' % (img_dir,ip)) os.symlink('%s/%s.jpg' % (img_dir,fqdn),'%s/%s.jpg' % (img_dir,ip)) os.symlink('%s/%s_petites.jpg' % (img_dir,fqdn),'%s/%s_petites.jpg' % (img_dir,ip)) if os.path.exists('%s/%s.ts' % (tmp_dir,ip)) and os.stat('%s/%s.ts' % (tmp_dir,ip))[6] : #on teste sur le ts car il est enleve a chaque fois if col == 2 : col = 1 html.write('\n') else : col += 1 if col_petites == 3: col_petites = 1 html_petites.write('\n') else : col_petites += 1 ajoute_image(nom,fqdn,ip,html,html_petites) print "--------------- Ok %s" % ip else : chaines_probleamatiques.append('Chaine : %s
IP : %s:1234

\n' %(nom,ip)) print "--------------- Problematique %s ..." % ip if os.path.exists('%s/%s.jpg' % (img_dir,fqdn)) : os.remove('%s/%s.jpg' % (img_dir,fqdn)) if os.path.exists('%s/%s_petites.jpg' % (img_dir,fqdn)) : os.remove('%s/%s_petites.jpg' % (img_dir,fqdn)) if os.path.exists('%s/%s.ts' % (tmp_dir,ip)) : os.remove('%s/%s.ts' % (tmp_dir,ip)) html.write(table_piedpage) html_petites.write(table_piedpage) #on ecrit les radios html.write('

Liste des chaines diffusées mais dont le flux est érroné ou uniquement audio (les flux videos ne seront probablement non lisibles avec VLC mais lisibles avec xine)


') html_petites.write('

Liste des chaines diffusées mais dont le flux est érroné ou uniquement audio (les flux videos ne seront probablement non lisibles avec VLC mais lisibles avec xine)


') for line in chaines_probleamatiques : html.write(line) html_petites.write(line) #on ecrit la vraie fin html.write(trame_piedpage) html.close() html_petites.write(trame_piedpage) html_petites.close() shutil.copy('%s/vignettes.html' % tmp_dir,'%s/vignettes.html' % www_dir) shutil.copy('%s/vignettes_petites.html' % tmp_dir,'%s/vignettes_petites.html' % www_dir) if __name__ == '__main__' : lock.make_lock('vignettes') print 'Vignetisation générale' vignettes() print 'On a fini' lock.remove_lock('vignettes')