# Extraction du titre et de la description du fil RSS
# *******BàO_1 version Python*******

#Développé par Yagmur Oztuk et Oscar Moreno Escobar
#Ce programme prend en entrée : 
# 1- Le nom du repertoire comportant les fils RSS en format XML.
# 2- Le nom de la rubrique.

#Ce programme extrait le contenu textuel des balises <title> et <description> et donne en sortie 1 fichier .txt et un document XML structuré

#Pour lancer ce script : 

# python BAO_1_script_python_os.py 2020 (nom_repertoire_corpus) une (nom_rubrique)

import re, sys, os
import xml.etree.ElementTree as ET

def get_files(rubrique, repertoire):
	liste_fichiers = []
	for root, dirs, file in os.walk(repertoire): #parcours de l'arborescence sous un répertoire donné
		for name in file:
			if re.match(rf'{rubrique}.xml', name) and (name.endswith("xml")):
				liste_fichiers.append(os.path.join(root, name))
	return liste_fichiers
	

def rub_iconv(nom): #conversion du nom de rubrique en indicatif chiffré
	corres = {'tout':'0,2-(.*),0|0,57-0,64-823353,0|env_sciences','une':'0,2-3208,1-0,0', 'international':'0,2-3210,1-0,0', 'europe':'0,2-3214,1-0,0', 'societe':'0,2-3224,1-0,0', 'idees':'0,2-3232,1-0,0', 'economie':'0,2-3234,1-0,0', 'actualite-medias':'0,2-3236,1-0,0', 'sport':'0,2-3242,1-0,0', 'planete':'0,2-3244,1-0,0', 'culture':'0,2-3246,1-0,0', 'livres':'0,2-3260,1-0,0', 'cinema':'0,2-3476,1-0,0', 'technologies':'0,2-3546,1-0,0', 'politique':'0,57-0,64-823353,0', 'sciences':'env_sciences'}
	return corres.get(nom)

# fontion qui extrait les contenus textuels de balises description et title
def extract_xml(nom_file):
	titre_description = {}

	with open (nom_file, encoding="utf-8") as file:
		read_file = file.read()
	tree_find = ET.fromstring(read_file) # lecture du fichier
	for noeud in tree_find.iter("item"): # chercher la balise item
		tmp_titre = ""
		tmp_descript = ""
		for ele in noeud.iter():
			if ele.tag == "title": # extraction du contenue texuel de la balise title dans une liste
				tmp_titre = ele.text
			elif ele.tag == "description":# extraction du contenue texuel de la balise descritpion dans une liste
				tmp_descript = ele.text
		titre_description[tmp_titre] = tmp_descript
	return titre_description

#Fonction pour écrire les résultats de l'extraction en format TXT
def ecrire_txt(contenu_dico, output):
    with open(output, "w") as f:
        for item in contenu_dico.items():
            f.write(item[0] + "\n")
            f.write(item[1] + "\n")
            f.write("---------------\n")

#Fonction pour écrire les résultats de l'extraction en format XML

def ecrire_xml(contenu_dico, output):
    with open(output, "a") as f:
        f.write("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n")
        f.write("<corpusMonde>\n")
        for item in contenu_dico.items():
            f.write("<item>\n")
            f.write("<titre>" + item[0] + "</titre>\n")
            f.write("<description>" + item[1] + "</description>\n")
            f.write("</item>\n")
        f.write("</corpusMonde>\n")


if __name__ == "__main__":  # affiche le fichier principal.
    # recevoir 2 arguments dans la ligne de commande
    #print(__name__)
    rep = sys.argv[1]
    rub_name = sys.argv[2]
    rubrique = rub_iconv(rub_name)
    liste_fichiers = get_files(rubrique, rep)
    for file in liste_fichiers:
    	xml_extracted = extract_xml(file)
    	ecrire_txt(xml_extracted, "prueba.txt")
    	ecrire_xml(xml_extracted, "prueba.xml")


 
