Êtes-vous prêt à créer votre troisième mini-projet avec Python ? L'idée est qu'au lieu d'utiliser d'autres applications pour bloquer des sites web sur votre système, pourquoi ne pas créer notre propre application de blocage de sites web en utilisant Python ?
Nous allons créer un bloqueur de sites web en utilisant Python qui nous donnera une fenêtre dans laquelle nous pourrons taper l'URL des sites web, et ensuite nous pourrons bloquer ces sites web. Nous ajouterons également une fonction de déblocage afin de pouvoir débloquer n'importe quel site web à l'avenir si nous le souhaitons, ainsi qu'un module Tkinter pour créer une interface graphique.
Description
Voici les étapes que nous allons suivre pour créer le projet Python Website Blocker :
Importer la bibliothèque requise
Créer la fenêtre GUI
Chemin d'accès et adresse IP.
Créer la fonction Block pour bloquer les sites web
Créer la fonction Unblock pour débloquer les sites web
Créer les étiquettes et les boutons Commande principale
Le Code
# Importing required libra
from tkinter import *
# Creating a window
window = Tk()
window.geometry('650x400')
window.minsize(650, 400)
window.maxsize(650, 400)
window.title("Website Blocker")
heading = Label(window, text='Website Blocker', font='arial')
heading.pack()
# Use raw string for Windows path
host_path = r'C:\Windows\System32\drivers\etc\hosts'
ip_address = '127.0.0.1'
label1 = Label(window, text='Enter Website:', font='arial 13 bold')
label1.place(x=5, y=60)
enter_Website = Entry(window, font='arial', width='40') # Changed Text to Entry
enter_Website.place(x=140, y=60)
def Blocker():
website_lists = enter_Website.get()
Website = website_lists.split(",")
with open(host_path, 'r+') as host_file:
file_content = host_file.read()
for web in Website:
if web in file_content:
display = Label(window, text='Already Blocked', font='arial')
display.place(x=200, y=200)
else:
host_file.write(ip_address + " " + web + '\n')
Label(window, text="Blocked", font='arial').place(x=230, y=200)
def Unblock():
website_lists = enter_Website.get()
Website = website_lists.split(",")
with open(host_path, 'r+') as host_file:
file_content = host_file.readlines()
for web in Website:
if web in website_lists:
with open(host_path, 'r+') as f:
for line in file_content:
if web not in line:
f.write(line)
Label(window, text="UnBlocked", font='arial').place(x=350, y=200)
else:
display = Label(window, text='Already UnBlocked', font='arial')
display.place(x=350, y=200)
block_button = Button(window, text='Block', font='arial', pady=5, command=Blocker, width=6, bg='red', activebackground='grey')
block_button.place(x=230, y=150)
unblock_button = Button(window, text='UnBlock', font='arial', pady=5, command=Unblock, width=6, bg='green', activebackground='grey')
unblock_button.place(x=350, y=150)
window.mainloop()
Sortie:
Explication
Pour construire le projet python nous allons suivre les étapes citées auparavant :
Importer la bibliothèque requise : Nous n'aurons besoin que du module Tkinter pour créer une interface graphique en Python.
Création d'une fenêtre GUI :
tk() : nous aide à créer une fenêtre vide dans laquelle nous pouvons ajouter des étiquettes et des boutons. Nous avons créé un espace nommé window.
Geometry() : cette fonction est utilisée pour donner une taille à la fenêtre.
minsize(), maxsize() : cette fonction permet de donner la taille minimale et maximale à la fenêtre.
title() : fournit un titre approprié à la fenêtre.
Ici, nous avons créé une étiquette nommée heading qui permet de donner un titre à la fenêtre. Nous avons utilisé Label() pour créer l'étiquette et pack() pour ajouter l'étiquette à la fenêtre.
Chemin d'accès à l'hôte et adresse IP : Comme nous voulons que les sites web soient bloqués dans notre système, nous devons ajouter ces sites web dans le fichier hôte. Nous indiquons donc ici notre adresse IP locale et le chemin d'accès au fichier hôte.
Create Block Function:
Nous avons créé cette fonction de blocage de manière à ce que, lorsque nous ajoutons un site web dans la zone de texte et que nous cliquons sur le bouton de blocage, le site web soit ajouté au fichier hôte et bloqué. Si le site web se trouve déjà dans le fichier hôte, l'étiquette "Already Blocked" s'affichera.
get() : Cette méthode permet d'obtenir le texte ajouté à l'étiquette enter_website.
open() : Cette méthode permet d'ouvrir le fichier hôte. Ici, nous avons ouvert le fichier hôte en mode r+, c'est-à-dire en mode lecture et écriture.
split() : cette méthode est utilisée pour séparer le contenu de la zone de texte. Ici, nous avons utilisé (,) comme délimiteur pour séparer la liste des sites web.
Après avoir ouvert le fichier, à l'aide d'une boucle, nous vérifions si le site web saisi est déjà présent, puis nous affichons l'étiquette "Already Blocked" et, s'il n'est pas présent, nous l'ajoutons au fichier à l'aide de la méthode write(), puis nous affichons l'étiquette "Blocked".
Fonction de déblocage :
La fonction Unblock() est créée pour permettre de débloquer un site web déjà bloqué et présent dans le fichier hôte. Si un site web est bloqué et que l'on clique sur le bouton Débloquer, l'étiquette "UnBlocked" s'affiche. Si un site web est déjà débloqué et ne fait pas partie du fichier hôte, l'étiquette "Already UnBlocked" s'affiche.
get() : Cette méthode est utilisée pour obtenir le texte ajouté à l'étiquette enter_website.
open() : Cette méthode permet d'ouvrir le fichier hôte. Ici, nous avons ouvert le fichier hôte en mode r+, c'est-à-dire en mode lecture et écriture.
split() : cette méthode est utilisée pour séparer le contenu de la zone de texte. Ici, nous avons utilisé (,) comme délimiteur pour séparer la liste des sites web.
Nous lisons le contenu du fichier et si le site web saisi est présent, nous réécrivons tout le contenu du fichier à l'exception de celui que nous devons débloquer et nous affichons l'étiquette "Unblocked". Si le fichier hôte ne contient aucun site web de ce type, nous affichons simplement l'étiquette "Already Unblocked".
Créer les étiquettes et les boutons :
Nous avons créé une étiquette à l'aide de la bibliothèque Tkinter. Une étiquette doit afficher le texte "Enter Website :" et la zone de texte doit fournir une zone de texte pour saisir les sites web.
La méthode Label() est utilisée pour créer une étiquette.
Pour la zone de texte, nous utilisons la méthode Text().
Pour placer ces deux éléments dans la fenêtre, nous utilisons la méthode place() et, à l'intérieur de celle-ci, nous donnons les valeurs x et y.
Nous pouvons spécifier le texte que nous voulons afficher, aussi les : font, height, width, bg, fg pour chacun d'entre eux.
nous avons créé deux boutons, l'un pour bloquer et l'autre pour débloquer. Nous utilisons la méthode Button() pour créer ces boutons, qui est une méthode intégrée au module Tkinter. Nous utilisons la méthode place() pour placer ces boutons sur la fenêtre.
Command= nom_de_la_fonction - Cette syntaxe est utilisée à l'intérieur de la méthode Button() pour spécifier la tâche qu'un bouton effectuera lorsqu'il sera cliqué. Dans ce cas, bloquer et débloquer sont les deux tâches.
Nous pouvons également spécifier un certain nombre de choses sur le bouton comme : text, font, bg, fg, etc.
Commande principale :
La fonction mainloop est utilisée pour exécuter la fenêtre et afficher la sortie sur la fenêtre. Lorsque nous travaillons avec le fichier hôte, pour exécuter le code, nous devons l'ouvrir en tant qu'administrateur dans l'invite de commande, puis l'exécuter pour effectuer les modifications dans le fichier hôte. Si nous essayons d'exécuter le fichier directement, une erreur apparaîtra : "Permission not granted".
En utilisant cette application, vous pouvez bloquer et débloquer tous les sites web que vous voulez.