Refreshaj koliko hoćeš

Jeste li ikad bjesomučno refreshali neku stranicu čekajući neku vijest ili promjenu? (Recimo, popis pozvanih na Državno natjecanje koji se danas očekuje?)

Možda ste znali, a možda i niste, da se to refreshanje može automatizirati.

Postoje online alati za to (recimo, https://www.followthatpage.com/), ali zašto ne bismo zasukali rukave i sami napisali odgovarajuću skripticu?

Ovo je moja:

"""
Usage: refresh.py [full_url] [refresh_interval_in_seconds] [optional: string_to_search]

If the search string is given, then refreshes until the string is found in page text.
Otherwise, refreshes until the page is changed.
"""

import urllib.request
import sys
from time import sleep
from bs4 import BeautifulSoup

def get_text(url):
    text = str(urllib.request.urlopen(url).read())
    soup = BeautifulSoup(text, 'html.parser')
    [s.extract() for s in soup(['style', 'script', '[document]', 'head', 'title'])]
    text = soup.getText()
    # ignore numbers
    for z in '0123456789':
        text = text.replace(z, '')
    return text

try:
    interval = int(sys.argv[2])
    url = sys.argv[1]
except:
    print(f'usage: {sys.argv[0]} [full_url] [refresh_interval_in_seconds] [optional: string to search]')
    exit(0)
if len(sys.argv) > 3:
    word = sys.argv[3]
else:
    word = None
print(f'reading {url} ...')
previous_text = get_text(url)
while True:
    sleep(interval)
    print(f'refreshing {url} ...', end=' ')
    text = get_text(url)
    if word: 
        if word in text:
            print(f'String "{word}" found in page text!')
            exit(0)
        else:
            print(f'string "{word}" not found')
    else:
        if text != previous_text:
            print(f'Page has changed!')
            exit(0)
        else:
            print('no change')
    previous_text = text

Ovaj dio s promjenom ne radi na stranicama s oglasima (npr. portali) jer su svaki put drugačije reklame pa skripta misli da se stranica promijenila. Možda ima i još bugova ili prostora za poboljšanje, slobodno komentirajte.

Napomena: Ne postavljajte refresh interval na manje od nekoliko sekundi; prečesto slanje requestova može biti nepristojno ili čak zabranjeno. Related: https://softwareengineering.stackexchange.com/a/304767

Jedna misao o “Refreshaj koliko hoćeš

  1. Povratni ping: Kategorizacija blogaritamskih objava | Blogaritam

Komentiraj

Popunite niže tražene podatke ili kliknite na neku od ikona za prijavu:

WordPress.com Logo

Ovaj komentar pišete koristeći vaš WordPress.com račun. Odjava /  Izmijeni )

Google photo

Ovaj komentar pišete koristeći vaš Google račun. Odjava /  Izmijeni )

Twitter picture

Ovaj komentar pišete koristeći vaš Twitter račun. Odjava /  Izmijeni )

Facebook slika

Ovaj komentar pišete koristeći vaš Facebook račun. Odjava /  Izmijeni )

Spajanje na %s