Skip to content

ebp-group/website-keyword-monitor

Repository files navigation

Check all websites Code style: black

website-keyword-monitor

Website Monitoring mit Schlüsselwörtern, implementiert in Python und GitHub Actions.

Schlüsselwörter

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)?

Webseiten

Das CSV muss die folgende Struktur haben:

label,active,slug,error_count,url,timeout,type
  • label: a label or title of the website
  • active: used to enable or disable this entry, use values yes or no
  • slug: A short name for this entry (must be unique)
  • error_count: The number of times an error has occured for this entry
  • url: the actual URL of the website
  • timeout: timeout in seconds to wait until a webpage is loaded (only for dynamic websites)
  • type: determines the type of the website, use static for static websites or dynamic for websites, that load most of their contant at runtime. Dynamic websites will be parsed using Selenium. Use static 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

GitHub Actions steuert die ganze Ausführung des Workflows.

Die Actions brauchen Schreibberechtigungen um Commits erstellen zu können:

Schreibberechtigungen für Actions

Neuen Job aufsetzen

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.

Benachrichtigungen in MS Teams

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.

Connector in Teams

Incomeing Webhook Connector

Die generierte URL muss dann auf GitHub als Secret mit dem Namen MS_TEAMS_WEBHOOK_URL gespeichert werden.

Entwicklung

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