paint-brush
A Simple Guide to Building a Website Blocker in Pythonby@kalebujordan
2,692 reads
2,692 reads

A Simple Guide to Building a Website Blocker in Python

by Kalebu Jordan October 5th, 2020
Read on Terminal Reader
Read this story w/o Javascript
tldt arrow

Too Long; Didn't Read

A Simple Guide to Building a Website Blocker in Python explains how to block certain sites that distract you during working hours. We use time and Datetime Module only which comes by default with the Python Standard Library therefore you don’t need to install anything. We will add website URLs which are mapped to localhost thus preventing from accessing the real site. Instead of adding 'www.facebook.com' we will add '127.00.0.1 www.facebook.' We need to add those site to host file during working. hours and removing them immediately when it’s go home time.

People Mentioned

Mention Thumbnail

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - A Simple Guide to Building a Website Blocker in Python
Kalebu Jordan  HackerNoon profile picture

Many of us struggle to focus nowadays, easily distracted by Social media and some sites on the internet which dramatically affecting our productivity. In this tutorial, you will learn and build your own website blocker to block certain selected sites that distract you during working hours.

Requirements

We are going to use time and Datetime Module only which comes by default with the Python Standard Library therefore you don’t need to install anything.

How do we block sites ?

Every operating system has a hosts file and it’s here where we are going to add list of websites we want to block.

We will add website URLs which are mapped to localhost thus preventing from accessing the real site, for instance:

Instead of adding 
'www.facebook.com'
we will add 
'127.0.0.1 www.facebook.com'

Therefore we need to add those site to host file during working hours and removing them immediately when it’s go home time.

if working_time:
  add mapped websites url to host file 
else:
  remove the website files from the host fle 

Location of hosts file

Host file that we need to edit are being stored on different path depending on Operating system you’re using

For those in Linux:

Linux_host = "/etc/hosts"

For those in Windows:

Window_host = r"C:\Windows\System32\drivers\etc\hosts"

Building our Website Blocker

Importing modules & pre configuring:

import time
from datetime import datetime as dt
​
sites_to_block = [
    'www.facebook.com',  'facebook.com',  
    'www.youtube.com', 'youtube.com',
    'www.gmail.com', 'gmail.com'
]
​
Linux_host = '/etc/hosts'
Window_host = r"C:\Windows\System32\drivers\etc\hosts"
redirect = "127.0.0.1"

I have then made a simple function for adding and removing mapped website urls to the host file depending on working time .

If your on Windows change the default_hoster to Window_host

import time
from datetime import datetime as dt
​
sites_to_block = [
    'www.facebook.com',  'facebook.com',  
    'www.youtube.com', 'youtube.com',
    'www.gmail.com', 'gmail.com'
]
​
Linux_host = '/etc/hosts'
Window_host = r"C:\Windows\System32\drivers\etc\hosts"
default_hoster = Linux_host
redirect = "127.0.0.1"
​
def block_websites(start_hour , end_hour):
    while True:
        if dt(dt.now().year, dt.now().month, dt.now().day,start_hour)< dt.now() < dt(dt.now().year, dt.now().month, dt.now().day,end_hour): 
            print("Do the work ....")
            with open(default_hoster, 'r+') as hostfile:
                hosts = hostfile.read()
                for site in  sites_to_block:
                    if site not in hosts:
                       hostfile.write(redirect+' '+site+'\n')
        else:
            with open(default_hoster, 'r+') as hostfile:
                hosts = hostfile.readlines()
                hostfile.seek(0)
                for host in hosts:
                    if not any(site in host for site in sites_to_block):
                        hostfile.write(host)
                hostfile.truncate()
            print('Good Time')
        time.sleep(3)
​
if __name__ == '__main__':
    block_websites(9, 18)

The function receives two parameters. One is the starting time on which for testing I set as 09:00 and ending time for job which I primarily set 18:00.

Therefore, you can adjust the testing to fit your own testing

Hope you find this post interesting; don’t forget to subscribe to get more tutorials like this. To get the full code it on My Github

In case of any suggestion or comment , drop it on the comment box and I will reply to you immediately.

Previously published at https://kalebujordan.com/how-to-build-website-blocker-in-python/