This commit is contained in:
2025-09-26 21:30:27 +02:00
parent 5f6f179518
commit d9d73eee41

View File

@@ -1,16 +1,31 @@
<?php <?php
/**
* Klasse uebernimmt das Crawlen von Websites und persistiert Metadaten in MySQL.
*/
class webanalyse class webanalyse
{ {
/**
* @var mysqli|null Verbindung zur Screaming Frog Datenbank.
*/
var $db; var $db;
/**
* Initialisiert die Datenbankverbindung fuer die Crawl-Session.
*/
function __construct() function __construct()
{ {
$this->db = mysqli_connect("localhost", "root", "", "screaming_frog"); $this->db = mysqli_connect("localhost", "root", "", "screaming_frog");
} }
/**
* Holt eine einzelne URL via cURL und liefert Response-Metadaten.
*
* @param string $url Zieladresse fuer den Abruf.
* @return array<string,mixed> Antwortdaten oder ein "error"-Schluessel.
*/
function getWebsite($url) function getWebsite($url)
{ {
// cURL-Session initialisieren // cURL-Session initialisieren
@@ -70,7 +85,12 @@ class webanalyse
]; ];
} }
// Multi-cURL Funktion für mehrere URLs /**
* Ruft mehrere URLs parallel via curl_multi ab.
*
* @param array<int,string> $urls Liste von Ziel-URLs.
* @return array<string,array<string,mixed>> Antworten je URL.
*/
function getMultipleWebsites($urls) function getMultipleWebsites($urls)
{ {
@@ -159,6 +179,14 @@ class webanalyse
/**
* Persistiert Response-Daten und stoesst die Analyse der gefundenen Links an.
*
* @param int $crawlID Identifier der Crawl-Session.
* @param string $url Ursprung-URL, deren Antwort verarbeitet wird.
* @param array<string,mixed> $data Ergebnis der HTTP-Abfrage.
* @return void
*/
function processResults(int $crawlID, string $url, array $data) function processResults(int $crawlID, string $url, array $data)
{ {
if (!isset($data['error'])) { if (!isset($data['error'])) {
@@ -188,6 +216,14 @@ class webanalyse
} }
/**
* Extrahiert Links aus einer Antwort und legt neue URL-Datensaetze an.
*
* @param int $crawlID Identifier der Crawl-Session.
* @param string $body HTML-Koerper der Antwort.
* @param string $url Bearbeitete URL, dient als Kontext fuer relative Links.
* @return void
*/
function findNewUrls(int $crawlID, string $body, string $url) { function findNewUrls(int $crawlID, string $body, string $url) {
@@ -241,6 +277,12 @@ class webanalyse
} }
/**
* Startet einen Crawl-Durchlauf fuer unbehandelte URLs.
*
* @param int $crawlID Identifier der Crawl-Session.
* @return void
*/
function doCrawl(int $crawlID) function doCrawl(int $crawlID)
{ {
@@ -275,6 +317,13 @@ class webanalyse
/**
* Parst HTML-Inhalt und liefert eine strukturierte Liste gefundener Links.
*
* @param string $html Rohes HTML-Dokument.
* @param string $baseUrl Basis-URL fuer die Aufloesung relativer Pfade.
* @return array<int,array<string,mixed>> Gesammelte Linkdaten.
*/
function extractLinks($html, $baseUrl = '') function extractLinks($html, $baseUrl = '')
{ {
$links = []; $links = [];
@@ -324,7 +373,11 @@ class webanalyse
} }
/** /**
* Prüft ob ein Link extern ist * Prueft, ob ein Link aus Sicht der Basis-URL extern ist.
*
* @param string $href Ziel des Links.
* @param string $baseUrl Ausgangsadresse zur Domainabgleichung.
* @return bool|null True fuer extern, false fuer intern, null falls undefiniert.
*/ */
private function isExternalLink($href, $baseUrl) private function isExternalLink($href, $baseUrl)
{ {
@@ -341,6 +394,13 @@ class webanalyse
return $baseDomain !== $linkDomain; return $baseDomain !== $linkDomain;
} }
/**
* Prueft, ob ein Link derselben Domain wie die Basis-URL entspricht.
*
* @param string $href Ziel des Links.
* @param string $baseUrl Ausgangsadresse zur Domainabgleichung.
* @return bool|null True fuer intern, false fuer extern, null falls undefiniert.
*/
private function isInternalLink($href, $baseUrl) private function isInternalLink($href, $baseUrl)
{ {
if (empty($baseUrl)) return null; if (empty($baseUrl)) return null;
@@ -357,7 +417,10 @@ class webanalyse
} }
/** /**
* Bestimmt den Typ des Links * Leitet den Link-Typ anhand gaengiger Protokolle und Muster ab.
*
* @param string $href Ziel des Links.
* @return string Beschreibender Typ wie "absolute" oder "email".
*/ */
private function getLinkType($href) private function getLinkType($href)
{ {
@@ -372,7 +435,10 @@ class webanalyse
/** /**
* Funktion zum Gruppieren der Links nach Typ * Gruppiert Links anhand ihres vorab bestimmten Typs.
*
* @param array<int,array<string,mixed>> $links Liste der extrahierten Links.
* @return array<string,array<int,array<string,mixed>>> Links nach Typ gruppiert.
*/ */
function groupLinksByType($links) function groupLinksByType($links)
{ {