from tkinter import * from bs4 import BeautifulSoup import urllib.request import json import sys import os class Interface: def __init__(self): self.datafilepath=os.path.dirname(sys.argv[0])+"/chaine.json" self.data = load_jsonfile(self.datafilepath) self.fenetre = Tk() self.fenetre.title("recherche de chaine") self.value = StringVar() self.label = Label(self.fenetre, text="entrer numero de chaine") self.entree = Entry(self.fenetre, textvariable=self.value, width=30) self.frame = Frame(self.fenetre) self.label2 = Label(self.fenetre, text="") self.bouton_update_base = Button( self.fenetre, text="update la base de chaine", command=self.click_update) self.bouton = Button(self.frame, text="OK", command=self.click) self.reset = Button(self.frame, text="reset", command=self.click_reset) self.label.pack() self.entree.pack() self.entree.focus_set() self.frame.pack() self.bouton.pack(side=LEFT) self.reset.pack(side=RIGHT) self.label2.pack() self.bouton_update_base.pack() self.fenetre.bind("", self.enter) self.fenetre.bind("", self.eventreset) def enter(self,evt): self.click() def eventreset(self,evt): self.click_reset() def mainloop(self): self.fenetre.mainloop() def click(self): print(self.value.get()) try: self.label2["text"] += self.data[self.value.get()]+"\r" print(self.data[self.value.get()]) except KeyError: print("numero de chaine inconnue") self.label2["text"] += "numero de chaine inconnue"+"\r" self.value.set("") def click_reset(self): print("reset") self.fenetre.quit self.label2["text"] = "" self.fenetre.mainloop def click_update(self): parsechaine(self.datafilepath) self.data = load_jsonfile(self.datafilepath) self.label2["text"] += "update chaine done"+"\r" def load_jsonfile(file): with open(file, 'r', encoding='utf-8') as f: return json.load(f) def RepresentsInt(s): try: int(s) return True except ValueError: return False except TypeError: return False def parsechaine(file): URL = 'https://fr.wikipedia.org/wiki/Liste_des_cha%C3%AEnes_de_Canal' liste_chaine = {} response = urllib.request.urlopen(URL) html = response.read() parse = BeautifulSoup(html,"html.parser") for item in parse.find_all('table'): if (item.get("class") == ['wikitable'] or item.get("class") == ['wikitable', 'sortable']): for tr in item.find_all('tr'): firstTD = tr.find() num = firstTD.string if RepresentsInt(num): #print(num) if RepresentsInt(firstTD.find_next().string): #print(firstTD.find_next().find_next().string) liste_chaine[num] = firstTD.find_next().find_next().string else: #print(firstTD.find_next().string) liste_chaine[num] = firstTD.find_next().string print(json.dumps(liste_chaine, indent=4)) with open(file, 'w', encoding='utf-8') as f: json.dump(liste_chaine, f, indent=4) interface = Interface() if len(sys.argv) > 1: arg = True else: interface.value.set("") arg = False if arg == True: for i in sys.argv[1:]: interface.value.set(i) interface.click() interface.value.set("") interface.mainloop()