Neulich habe ich über die automatisierte Linkpflege geschrieben. Da der Check nun doch mehr als nur ein cURL-Request mit Auswertung des Statuscodes geworden ist, habe ich ein kleines Composer-Päckchen draus geschnürt.
Kein Symfony-Bundle, einfach nur ein paar Klassen:
use Kniebes\VerifyUrl\VerifyUrl;
$verifyUrl = new VerifyUrl();
$result = $verifyUrl->verify('https://example.com/artikel');
if ($result->isValid() && $result->getReplacement() === null) {
// URL ist in Ordnung
}
if ($result->getReplacement() !== null) {
// Original ist kaputt, Snapshot aus der Wayback Machine verwenden
$alternateUrl = $result->getReplacement();
}
foreach ($result->getErrors() as $error) {
// Gründe, warum die Original-URL verworfen wurde
}
Bei als defekt erkannten Links wird die Wayback Machine nach einer Alternative gefragt. Das Paket hält zwar zwei Sekunden Abstand zwischen den Anfragen, aber wenn man dem Service zu sehr auf den Zwickel geht, kommt trotzdem schnell ein 429. Das muss man außerhalb des Pakets abfangen.
Aktuell gibt es noch ein Problem mit Cloudflare. Wenn der Service vorgeschaltet ist und die Bot-Abfrage von Cloudflare ausgeliefert wird, werden die Seiten als kaputt erkannt und es wird eine Wayback-Machine-Alternative gesucht. Ich denke, da wird noch eine Analyse des Response-Headers notwendig sein, um den Link nicht generell als defekt, sondern als nicht überprüfbar zu markieren.