Практика на Python 2023. Как сделать блокировщик сайтов с помощью Python

Мы запускаю серию статей Практики на Python в 2023. Будет много кода и много интересных задач.
Если вам скучно использовать приложения для блокировки веб-сайтов или вы просто хотите использовать что-то свое, вы можете самостоятельно создать приложение для блокировки веб-сайтов с помощью Python. Но это всего лишь скрипт Python, который блокирует доступ ко всем нежелательным веб-сайтам. Это довольно просто. Если ваше текущее время находится между рабочими часами, это приведет к блокировке веб-сайтов и доступу к ним.
Требование
Требований к установке нет. Вам просто нужен Python, и мы будем использовать только модуль datetime, который уже предустановлен.
Давайте посмотрим на рабочий процесс этого скрипта .

Код Python
Прежде всего, мы должны импортировать модуль datetime, чтобы получить текущую дату и время.
from datetime import datetime as dt
Мы должны указать путь к файлу хоста и локальный хост и составить список всех веб-сайтов, которые вы хотите заблокировать.
# Get the host path
# I am using Mac and so this is the host path
# If you are using Windows, search on Google "how to get host path" :D
hostpath = "/private/etc/hosts"
# loaclhost (will redirect to this host)
redirect = "127.0.0.1"
websitelist = [
"www.reddit.com",
"www.facebook.com",
"wwww.instagram.com",
"wwww.youtube.com",
"wwww.cnn.com",
"wwww.twitter.com",
"wwww.buzzfeed.com",
"wwww.yahoo.com",
"wwww.tumblr.com",
"wwww.netflix.com",
]
Назначьте время начала и время окончания времени, которое вы хотите заблокировать
"""
Datetime Format
--------------
The datetime format is Year, Month, Day, Hour, Minute,
e.g. (2022, 12, 28, 14, 15)
2022 - year
12 - month
28 - day
14 - hour (24 hrs format) (14 hrs = 2 pm)
15 - minutes
"""
blocktime = {
"start": dt(2022, 12, 28, 17, 15),
"end": dt(2022, 12, 28, 17, 59)
}
В этом случае я использовал словарь Python для пояснения кода, вы можете использовать список или строку
Мы проверим текущее время и хост-файл. Если текущее время находится между рабочим временем и веб-сайт не находится в черном списке, мы добавим его в черный список и перенаправим на локальный хост.
if blocktime["start"] < dt.now() < blocktime["end"]:
# to know our current mode
print("Time to focus ...")
# read the `host` file to check the list
with open(hostpath, "r+") as file:
content = file.read()
for website in websitelist:
# if your website is not in the `host` file, add the website
if not website in content:
with open(hostpath, "a") as writefile:
writefile.write(redirect + " " + website + "\n")
Если текущее время свободно от рабочего времени, мы удалим сайты из списка блокировки
Как пользоваться
Его нужно будет запускать, когда вы хотите заблокировать сайты, и нужно запускать снова, если рабочее время закончилось. Да, это немного сложно. Это всего лишь инструмент, который может помешать вам прокрастинировать.
Давайте запустим код:
Если вы хотите начать блокировку, запустите файл
Если вы свободны от работы и хотите остановиться, запустите файл еще раз (это разблокирует все веб-сайты)
полный код:
from datetime import datetime as dt
"""
Datetime Format
--------------
The datetime format is Year, Month, Day, Hour, Minute,
e.g. (2022, 12, 28, 14, 15)
2022 - year
12 - month
28 - day
14 - hour (24 hrs format) (14 hrs = 2 pm)
15 - minutes
"""
# Will start to block at 9hrs and finish 5hrs in the evening
blocktime = {
"start": dt(dt.now().year, dt.now().month, dt.now().day, 9),
"end": dt(dt.now().year, dt.now().month, dt.now().day, 17)
}
websitelist = [
"www.reddit.com",
"www.facebook.com",
"wwww.instagram.com",
"wwww.youtube.com",
"wwww.cnn.com",
"wwww.twitter.com",
"wwww.buzzfeed.com",
"wwww.yahoo.com",
"wwww.tumblr.com",
"wwww.netflix.com",
]
# Get the host path
# I am using Mac and so this is the host path
# If you are using Windows, search on Google "how to get host path" :D
hostpath = "/private/etc/hosts"