หากคุณทำงานในบริษัท IT ขนาดใหญ่ คุณอาจสังเกตเห็นว่ามีเว็บไซต์บางแห่งถูกบล็อก โดยเฉพาะเว็บโซเชียลเน็ตเวิร์กอย่าง Facebook, YouTube, Instagram เป็นต้น
แทนที่จะใช้แอปพลิเคชันของบุคคลที่สามในการบล็อกเว็บไซต์ เราสามารถพัฒนาแอปพลิเคชันแบบกำหนดเองได้ ซึ่งจะบล็อกเว็บไซต์ที่เราต้องการ และการพัฒนาโปรแกรมบล็อกเว็บไซต์ใน Python ไม่ได้ยากนัก นั่นคือสิ่งที่เราจะทำกันวันนี้ - พัฒนาสคริปต์ Python ที่จะบล็อกเว็บไซต์ตามที่ต้องการ
ข้อกำหนดเบื้องต้น
- ติดตั้ง Python 3.x แล้ว
- มีความรู้พื้นฐานเกี่ยวกับ Python
สิ่งที่เราจะทำ
เราจะพัฒนาแอปพลิเคชัน Python ที่จะบล็อกเว็บไซต์ที่กำหนด (เว็บไซต์ใดก็ได้ - Facebook, YouTube เป็นต้น) ในช่วงเวลาที่กำหนดของวัน (09:00 - 18:00 น.) ซึ่งถือเป็นเวลาทำงานในสำนักงาน เราต้องการบล็อกเว็บโซเชียลเน็ตเวิร์กทั้งหมด เราจะใช้ไลบรารีที่มาพร้อมกับ Python (built-in libraries) ดังนั้นจึงไม่ต้องติดตั้งแพ็กเกจของบุคคลที่สาม
วิธีการทำงาน
ทุกระบบปฏิบัติการมีไฟล์ hosts ตำแหน่งของไฟล์ hosts อาจแตกต่างกันไปในแต่ละระบบปฏิบัติการ ไฟล์ hosts นี้ทำหน้าที่แมปชื่อโฮสต์ (hostname) ไปยังที่อยู่ IP ของเครื่อง ในไฟล์ hosts นี้ เราจะระบุรายการเว็บไซต์ที่ต้องการบล็อก
ไฟล์ hosts ของเราจะมีลักษณะประมาณนี้:

เนื่องจากยังไม่ได้ระบุชื่อเว็บไซต์ในไฟล์ hosts หากลองเปิด "youtube.com" จะสามารถเข้าถึงได้โดยไม่มีปัญหา รูปภาพด้านล่างแสดงการยืนยัน (เพื่อให้แน่ใจว่าหลังจากรันสคริปต์แล้ว เว็บไซต์นี้จะเปิดไม่ได้หากเราต้องการบล็อก)

ด้านล่างนี้คือโปรแกรมบล็อกเว็บไซต์ของเรา:
# นำเข้าไลบรารี
import time
from datetime import datetime as dt
# พาธไฟล์ hosts ของ Windows
hostsPath = r"C:\Windows\System32\drivers\etc\hosts"
redirect = "127.0.0.1"
# เพิ่มเว็บไซต์ที่ต้องการบล็อกในรายการนี้
websites = ["www.youtube.com", "youtube.com", "www.facebook.com", "facebook.com"]
while True:
# ระยะเวลาที่โปรแกรมบล็อกเว็บไซต์จะทำงาน
if dt(dt.now().year, dt.now().month, dt.now().day, 9) < dt.now() < dt(dt.now().year, dt.now().month, dt.now().day, 18):
print("Sorry Not Allowed...")
with open(hostsPath, 'r+') as file:
content = file.read()
for site in websites:
if site in content:
pass
else:
file.write(redirect + " " + site + "\n")
else:
with open(hostsPath, 'r+') as file:
content = file.readlines()
file.seek(0)
for line in content:
if not any(site in line for site in websites):
file.write(line)
file.truncate()
print("Allowed access!")
time.sleep(5)
ผลลัพธ์
Sorry Not Allowed... Sorry Not Allowed... Sorry Not Allowed... Sorry Not Allowed... Sorry Not Allowed... Sorry Not Allowed... Sorry Not Allowed... …
ตอนนี้หากลองเปิด youtube.com หรือ facebook.com จะได้ผลดังนี้:

เราสามารถปรับแต่งโค้ดข้างต้นได้ตามความต้องการ เช่น ระยะเวลา, เว็บไซต์, ข้อความที่กำหนดเอง เป็นต้น