Commit 1c099a9b authored by Jonas's avatar Jonas

Fichier de config, traduction des catégories

Fichier de config : la grabbeur se base maintenant sur un fichier de configuration il est donc possible de l'utiliser sans hts. Pour les utilisateurs hts lors de la configuration le grabbeur peut récupérer votre liste de chaine.

Traduction des catégories : quelques traductions supplémentaires
parent 556ab737
......@@ -21,7 +21,7 @@
# MA 02110-1301, USA.
#
import sys, requests, argparse, time, logging
import sys, os, requests, argparse, time, logging
import xml.etree.ElementTree as ET
from datetime import datetime
from tzlocal import get_localzone
......@@ -31,14 +31,14 @@ from slugify import slugify
reload(sys)
sys.setdefaultencoding('utf8')
parser = argparse.ArgumentParser(description = "Création d'un xmltv pour hts tvheadend à partire de l'api mafreebox.fr")
parser.add_argument('--hts-url', default = 'http://localhost:9981/', help = 'url vers le serveur hts (http://localhost:9981 par défaut)')
parser.add_argument('--hts-user', default = 'admin', help = 'nom d\'utilisateur hts (admin par défaut)')
parser.add_argument('--hts-password', default = 'admin', help = 'mot de passe hts (admin par défaut)')
parser = argparse.ArgumentParser(description = "Grabber xmltv via l'api de la freebox")
parser.add_argument("-v", "--verbose", dest="verbose", default="warning", help="Verbose (debug,info,warning,error) [info par defaut]")
parser.add_argument("--description", action = 'store_true', help="Description")
parser.add_argument("--capabilities", action = 'store_true', help="Capactitée")
parser.add_argument("--quiet", action = 'store_true', help="Supprime toute les sorties de progressions")
parser.add_argument("--configure", action = 'store_true', help="Configurer le grabber")
config_file = os.path.join(os.environ['HOME'],'.xmltv','tv_grab_fr_mafreebox.conf')
parser.add_argument("--config-file", action = 'store_true', default=config_file, help="Fichier de configuration (%s par défaut)"%config_file)
args = parser.parse_args()
TZ = get_localzone()
......@@ -70,7 +70,8 @@ categories_en = {
1: "Movie / Drama", # Film
2: "Movie / Drama", # Téléfilm
3: "Movie / Drama", # Série /Feuilleton
5: "Documentary",# Documentaire
5: "Documentary", # Documentaire
9: "Variety show", # Variétés
10: "Magazines / Reports / Documentary", # Magazine
11: "Children's / Youth programmes", # Jeunesse
12: "Game show / Quiz / Contes", # Jeu
......@@ -80,23 +81,49 @@ categories_en = {
19: "Sports", # Sport
20: "News / Current affairs", # Journal
22: "Discussion / Interview / Debate", # Débats
24: "Performing arts" # Spectacle
24: "Performing arts", # Spectacle
31: "Religion" # Emission religieuse
} #todo à compléter
def list_existing_chan():
def get_cfg_chan() :
if not os.path.isfile(args.config_file) :
logging.error("Non configuré, lancez %s --configure"%__file)
sys.exit(1)
list_chan = []
with open(args.config_file) as fp:
for line in fp :
chan_name = line.split('#',1)[0].strip()
if chan_name :
list_chan.append(slugify(chan_name))
return list_chan
def get_hts_chan():
url = (raw_input ("URL de hts (\"http://localhost:9981/\" par défaut) : ") or "http://localhost:9981/")
user = (raw_input ("Utilisateur hts (\"admin\" par défaut) : ") or "admin")
pswd = (raw_input ("Mot de passe(\"admin\" par défaut) : ") or "admin")
list_chan = []
reponse = requests.get(
'%s/api/channel/list'%args.hts_url,
auth=(args.hts_user,args.hts_password)
)
reponse = requests.get('%s/api/channel/list'%url,auth=(user,pswd))
if not reponse.ok :
logging.error ("Erreur de connection au serveur hts (erreur http code %i)"%reponse.status_code)
sys.exit(1)
for entrie in reponse.json()['entries'] :
list_chan.append(slugify(entrie['val']))
#~ list_chan = ['france-4'] # pour debug
return list_chan
def get_mythtv_chan():
list_chan = []
db = MythDB()
SchemaVersion = db.settings.NULL.DBSchemaVer
channels = Channel.getAllEntries()
for chan in channels:
if chan.sourceid==3:
list_chan.append(slugify.slugify(chan.name))
return list_chan
def do_request(my_url):
logging.debug(my_url)
time.sleep(1)
......@@ -112,22 +139,18 @@ def do_request(my_url):
logging.error("Oups : %s"%response.text)
return out_dic.get('result',{})
#~ def prettify(elem):
#~ """Return a pretty-printed XML string for the Element.
#~ """
#~ rough_string = ET.tostring(elem, 'utf-8')
#~ reparsed = minidom.parseString(rough_string)
#~ return reparsed.toprettyxml(indent=" ", encoding='utf-8')
def start_time():
now=int(time.time())
return now-now%7200
def format_time(dt):
return datetime.strftime(
datetime.fromtimestamp(dt, tz=TZ),
"%Y%m%d%H%M%S %z")
def get_epg_data(root, channel_uid, channel_slug, start_time):
# Scan EPG to get program data
epg_progs = {}
......@@ -203,7 +226,6 @@ def get_epg_data(root, channel_uid, channel_slug, start_time):
cur_prog.append(desc)
else:
logging.info("Pas de description trouvée")
#~ print dic_prog
root.append(cur_prog)
return True
......@@ -215,11 +237,11 @@ def build_xml():
dic_channels = do_request(CHANNEL_URL)
logging.info("%d chaines trouvée"%len(dic_channels))
list_existing = list_existing_chan()
cfg_chan = get_cfg_chan()
start = start_time()
i=1
for chan_name, channel in dic_channels.iteritems():
if slugify(channel.get('name')) not in list_existing:
if slugify(channel.get('name')) not in cfg_chan:
logging.info("%s pas dans la liste, saut"%channel.get('name'))
continue
if channel.get('available')==False:
......@@ -243,18 +265,60 @@ def build_xml():
res = get_epg_data(root,
channel.get('uuid'),
channel_slug,
start_time()+72000)
start_time())
if res:
root.insert(1, cur_channel)
return ET.tostring(root)
def configure () :
choise = raw_input(\
"Configuration de la liste des chaines pour lequel récupérer l'epg :\n"+\
" 1 : Toutes par défaut\n"+\
" 2 : Aucune par défaut\n"+\
" 3 : Préconfiguration à partir de hts tvheadend\n"
)
if choise not in ('1','2','3') :
logging.error("Entrée invalide")
sys.exit(1)
dic_channels = do_request(CHANNEL_URL)
channels_names = [chan.get('name') for chan in dic_channels.values()]
channels_names.sort() #ordre alphanumérique plus pratique pour trouver une chaine
list_chan = []
if choise == '1' :
for chan_name in channels_names:
list_chan.append("%s # %s"%(chan_name,slugify(chan_name).lower()+".mafreebox.fr"))
elif choise == '2' :
for chan_name in channels_names:
list_chan.append("# %s # %s"%(chan_name,slugify(chan_name).lower()+".mafreebox.fr"))
elif choise == '3' :
hts_chan= get_hts_chan()
for chan_name in channels_names:
if slugify(chan_name) in hts_chan:
list_chan.append("%s # %s"%(chan_name,slugify(chan_name).lower()+".mafreebox.fr"))
else :
list_chan.append("#%s # %s"%(chan_name,slugify(chan_name).lower()+".mafreebox.fr"))
if not os.path.isdir(os.path.dirname(args.config_file)) :
os.makedirs(os.path.dirname(args.config_file))
with open(args.config_file, 'w') as fp:
fp.write(\
"# Liste des chaines récupére dans le guide\n"+\
"# Les lignes qui commencent par un # sont ignorées\n\n"+\
"\n".join(list_chan)
)
print("Vous pouvez a tout moment éditer la liste des chaine dans le fichier %s"%args.config_file)
if __name__ == '__main__':
if args.description :
sys.stdout.write("France (mafreebox.fr, pour hts)\n")
sys.stdout.write("France (mafreebox.fr)\n")
elif args.capabilities :
sys.stdout.write("manualconfig\nbaseline\n")
elif args.configure :
configure()
else :
sys.stdout.write(build_xml())
sys.exit(0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment