২৪. লাইভ প্রজেক্ট: ওয়েবসাইট ব্লকার ও পোমোডোরো টাইমার (Website Blocker)
প্রোগ্রামিং শেখার সময় বা কোনো গুরুত্বপূর্ণ কাজ করার সময় ফেসবুক, ইউটিউব বা অন্য কোনো ওয়েবসাইটে ঢুকে ঘণ্টার পর ঘণ্টা সময় নষ্ট করাটা আমাদের অনেকেরই একটি বদভ্যাস। এই প্রজেক্টে আমরা পাইথন দিয়ে এমন একটি টুল তৈরি করবো যা নির্দিষ্ট একটি সময়ে (যেমন সকাল ৯টা থেকে বিকাল ৫টা) আপনার কম্পিউটারে এই ডিস্ট্র্যাক্টিং ওয়েবসাইটগুলোকে ব্লক করে রাখবে। সময় পার হয়ে গেলে এটি আবার অটোমেটিকভাবে সাইটগুলো আনব্লক করে দিবে!
কীভাবে কাজ করে? (How it works):
উইন্ডোজ, ম্যাক বা লিনাক্স সব অপারেটিং সিস্টেমেই একটি ফাইল থাকে যার নাম hosts ফাইল। যখন আপনি ব্রাউজারে কোনো ওয়েবসাইটের নাম (যেমন facebook.com) লিখেন, তখন কম্পিউটার প্রথমে এই hosts ফাইলে চেক করে ওয়েবসাইটটির আইপি অ্যাড্রেস (IP Address) কী। আমরা পাইথন দিয়ে আমাদের ডিস্ট্র্যাক্টিং ওয়েবসাইটগুলোকে আমাদের নিজেদের কম্পিউটারের লোকাল আইপি অ্যাড্রেস (127.0.0.1) এর দিকে পয়েন্ট করে দিবো। ফলে ওয়েবসাইটটি আর লোড হবে না!
প্রয়োজনীয় লাইব্রেরি (Libraries):
এই প্রজেক্টের জন্য আমাদের কোনো থার্ড-পার্টি লাইব্রেরি ইনস্টল করতে হবে না। আমরা পাইথনের বিল্ট-ইন time এবং datetime মডিউল ব্যবহার করবো।
প্রজেক্টের কোড:
নিচের কোডটি কপি করে একটি ফাইলে সেভ করুন। যেহেতু এই কোডটি আপনার সিস্টেমের একটি গুরুত্বপূর্ণ ফাইল (hosts) পরিবর্তন করবে, তাই কোডটি রান করার সময় অবশ্যই Administrator বা Root পারমিশন দিয়ে রান করতে হবে (যেমন উইন্ডোজে VS Code বা Terminal টি Run as Administrator দিয়ে ওপেন করে নিতে হবে)।
import time
from datetime import datetime as dt
# আপনার কম্পিউটারের hosts ফাইলের লোকেশন
# উইন্ডোজের জন্য:
hosts_path = r"C:\Windows\System32\drivers\etc\hosts"
# ম্যাক বা লিনাক্সের জন্য (যেকোনো একটি আনকমেন্ট করুন আপনার OS অনুযায়ী):
# hosts_path = "/etc/hosts"
# লোকালহোস্টের আইপি অ্যাড্রেস (যেখানে সাইটগুলোকে রিডাইরেক্ট করা হবে)
redirect = "127.0.0.1"
# যে ওয়েবসাইটগুলো আপনি ব্লক করতে চান তার একটি লিস্ট
website_list = ["www.facebook.com", "facebook.com", "www.youtube.com", "youtube.com"]
# কাজের সময় নির্ধারণ করা (যেমন: সকাল ৯টা থেকে বিকাল ৫টা পর্যন্ত)
# এখানে ২৪ ঘণ্টার ফরম্যাট ব্যবহার করা হয়েছে (৯ মানে ৯টা, ১৭ মানে বিকাল ৫টা)
work_start_hour = 9
work_end_hour = 17
print("Starting Website Blocker...")
while True:
# বর্তমান সময় চেক করা হচ্ছে
# যদি বর্তমান সময় সকাল ৯টা থেকে বিকাল ৫টার মধ্যে হয়
if dt(dt.now().year, dt.now().month, dt.now().day, work_start_hour) < dt.now() < dt.now().replace(hour=work_end_hour, minute=0, second=0):
print("Working hours... Websites are blocked!")
# hosts ফাইলটি ওপেন করা (r+ মানে রিড এবং রাইট পারমিশন)
with open(hosts_path, 'r+') as file:
content = file.read()
# লিস্টের প্রতিটি ওয়েবসাইটের জন্য লুপ চালানো
for website in website_list:
# যদি ওয়েবসাইটটি ফাইলে আগে থেকেই না থাকে, তবে সেটি যোগ করা হবে
if website in content:
pass
else:
# ফাইলটিতে ওয়েবসাইটটি এবং রিডাইরেক্ট আইপি যোগ করা হচ্ছে
file.write(redirect + " " + website + "\n")
# আর যদি বর্তমান সময় কাজের সময়ের বাইরে হয়
else:
print("Fun hours... Websites are unblocked!")
with open(hosts_path, 'r+') as file:
# ফাইলের প্রতিটি লাইন পড়া
content = file.readlines()
# ফাইলের পয়েন্টার একদম শুরুতে নিয়ে যাওয়া
file.seek(0)
# প্রতিটি লাইনের জন্য চেক করা
for line in content:
# লাইনটির ভেতরে আমাদের ব্লক করা ওয়েবসাইটের নাম না থাকলে লাইনটি আবার ফাইলে লিখে দেওয়া
# (এভাবে ব্লক করা ওয়েবসাইটগুলো মুছে যাবে)
if not any(website in line for website in website_list):
file.write(line)
# ফাইলের বাকি অংশ মুছে ফেলা
file.truncate()
# লুপটি প্রতি ৫ সেকেন্ড পর পর চেক করবে যেন পিসি হ্যাং না করে
time.sleep(5)
[!CAUTION] সতর্কতা: এই স্ক্রিপ্টটি কাজ করার জন্য আপনাকে অবশ্যই পাইথন বা আপনার কোড এডিটরটিকে Administrator (উইন্ডোজে) বা sudo (ম্যাক/লিনাক্সে) হিসেবে রান করতে হবে। তা না হলে
Permission Deniedএরর আসবে, কারণhostsফাইল সাধারণ ইউজার এডিট করতে পারে না।
কোডটি কীভাবে শিখবেন?
- ফাইল হ্যান্ডলিং: এই প্রজেক্টটি দিয়ে আপনি বুঝতে পারবেন কীভাবে
open(),read(),readlines(),write()এবংseek()এর মাধ্যমে পাইথন দিয়ে পিসির সিস্টেম ফাইলে কাজ করতে হয়। - লজিক বিল্ডিং:
if-elseকন্ডিশন ব্যবহার করে কীভাবে একটি নির্দিষ্ট সময়ের মধ্যে একটি কাজ করাতে হয় এবং সময় পার হলে অন্য একটি কাজ করাতে হয়, তা শিখতে পারবেন। - অটোমেশন:
while True:লুপ এবংtime.sleep()ব্যবহার করে কীভাবে একটি স্ক্রিপ্টকে ব্যাকগ্রাউন্ডে অনবরত চালিয়ে রাখা যায়, তা বুঝতে পারবেন।