Website Monitoring mit Schlüsselwörtern, implementiert in Python und GitHub Actions.
Die Schlüsselwörter (keywords
) sind in Textdateien im Ordner keywords
definiert, jeweils ein Schlüsselwort pro Zeile.
Jedes Schlüsselwort wird als regulärer Ausdruck (Regex) interpretiert, so lassen sich auch komplexere Begriffe in Texten finden.
Beispiel-Datei:
rue
geschwindigkeit
fermeture de route
Nouvelles mesures
Plan d[’']affectation
(?:Dévelopment)\s+(?:urbaine|de la ville|de la commune|du quartier)?
Das CSV muss die folgende Struktur haben:
label,active,slug,error_count,url,timeout,type
label
: a label or title of the websiteactive
: used to enable or disable this entry, use valuesyes
orno
slug
: A short name for this entry (must be unique)error_count
: The number of times an error has occured for this entryurl
: the actual URL of the websitetimeout
: timeout in seconds to wait until a webpage is loaded (only for dynamic websites)type
: determines the type of the website, usestatic
for static websites ordynamic
for websites, that load most of their contant at runtime. Dynamic websites will be parsed using Selenium. Usestatic
as a default.
Beispiel:
label |
active |
slug |
error_count |
url |
timeout |
type |
---|---|---|---|---|---|---|
"Thalwil informiert" | yes | thalwil_news | 0 | https://www.thalwil.ch/aktuellesinformationen | 5 | static |
Webseiten werden im Ordner csv
definiert.
GitHub Actions steuert die ganze Ausführung des Workflows.
Die Actions brauchen Schreibberechtigungen um Commits erstellen zu können:
Alle Webseiten-Checker Jobs sind im Workflow all.yml
erfasst, z.B. so:
jobs:
check_aubonne_websites:
uses: ebp-group/website-keyword-monitor/.github/workflows/check_websites.yml@main
with:
title: Aubonne
environment: production
csv-path: csv/aubonne.csv
keywords-path: keywords/aubonne.txt
send-notifications: ${{ !contains(inputs.notifications, 'false') }}
commit-error-count: ${{ !contains(inputs.commit, 'false') }}
secrets: inherit
Als Parameter sind die oben definierten Webseiten CSV-Dateien und Keywords nötig.
Sobald ein Eintrag auf einer Webseite mit einem der definierten Schlüsselwörter gefunden wird, wird in MS Teams (im Team CH_P_222110_00 - Standortmonitoring im privaten Kanal "Webseiten-Benachrichtigungen") eine entsprechende Benachrichtigung geschickt.
Der MS Teams Kanal wird über einen sogenannten "Incoming Webhook" angesprochen. In Teams kann in einem Kanal ein neuer Connector "Incoming Webhook" hinzugefügt werden.
Die generierte URL muss dann auf GitHub als Secret mit dem Namen MS_TEAMS_WEBHOOK_URL
gespeichert werden.
Falls make
nicht vorhanden ist, kann alternativ auch pymake`` verwendet werden (
pip install py-make`).
Um den website-keyword-monitor weiterzuentwickeln, solltest du dieses Repository klonen und dann die Abhängigkeiten installieren:
make deps
Verwende am besten das Skript setup.sh
um das Virtualenv und deine Umgebung einzurichten.
Code Linting:
make lint
Formatierung des Codes Anpassen (mit dem black
Code-Style):
make format