cave/chaineTV.py

127 lines
3.7 KiB
Python

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("<Key-Return>", self.enter)
self.fenetre.bind("<Key-Escape>", 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()