Seit Wochen mehrmals täglich eine Fährseite aufrufen, immer wieder dieselben Zeiten prüfen und jedes Mal nur „nur Personen“ und kein Auto dazubuchbar sehen, das kostet Nerven. Genau hier setzt dieses kleine Dreamcodes Script an.
Der Fähren Verfügbarkeits Checker übernimmt das monotone Nachsehen automatisch. Statt selbst ständig auf faehre.de nachzuschauen, wird die gewünschte Verbindung regelmäßig im Hintergrund geprüft. Sobald sich der Status einer Abfahrt ändert und Fahrzeuge buchbar werden (also von „nur Personen“ auf „Auswählen“ wechselt), bekommst du sofort eine Benachrichtigung per E-Mail.
Über ein simples Webformular lassen sich Datum, gewünschte Abfahrtszeiten und die E-Mail-Adresse festlegen. Das Script merkt sich den letzten bekannten Status und meldet sich nur dann, wenn sich wirklich etwas ändert. Keine Dauer Mails, kein Spam, nur dann, wenn es relevant wird.
Das Script bucht nichts, greift nicht in den Buchungsprozess ein und loggt sich nirgends ein. Es beobachtet lediglich öffentlich sichtbare Informationen, im Grunde genau das, was man sonst manuell mehrmals am Tag machen würde, nur automatisiert und deutlich entspannter.
Gedacht ist das Ganze als kleine Hilfe für Menschen, die ihre Zeit lieber in den Urlaub investieren möchten als in das ständige Neuladen einer Suchseite für Fähren.
Es sind nur diese drei Schritte nötig:
Cronjon anlegen, damit das Script automatisch läuft:
*/10 * * * * /usr/bin/php /pfad/zu/checker.php
Ein Formular zum Steuern via Browser:
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Dreamcodes - Fähren.de Verfügbarkeits Checker</title>
<style>
body { font-family: Arial, sans-serif; max-width: 600px; margin: 40px auto; }
label { display: block; margin-top: 15px; }
input, textarea, button { width: 100%; padding: 8px; }
button { margin-top: 20px; }
</style>
</head>
<body>
<h2>Fähre automatisch überwachen</h2>
<form method="post" action="checker.php">
<label>Abfahrtsdatum</label>
<input type="date" name="date" required>
<label>Abfahrtszeiten (eine pro Zeile, zB. 08:00)</label>
<textarea name="times" rows="4" required></textarea>
<label>E-Mail für Benachrichtigung</label>
<input type="email" name="email" required>
<button type="submit">Überwachung starten</button>
</form>
<p style="font-size: 0.9em; color: #666;">
Das Script prüft regelmäßig und meldet sich nur, wenn Fahrzeuge buchbar werden.
</p>
</body>
</html>
Checker.php – auf faehre.de zugeschnitten:
<?php
$date = $_POST['date'];
$times = array_filter(array_map('trim', explode("\n", $_POST['times'])));
$email = $_POST['email'];
if (!$date || !$times || !$email) {
die('Fehlende Angaben.');
}
$cacheDir = __DIR__ . '/cache';
@mkdir($cacheDir);
$cacheFile = $cacheDir . '/' . md5($email . $date) . '.json';
function buildSearchUrl($date) {
return 'https://www.faehre.de/suchergebnis?datum=' . urlencode($date);
}
function fetch($url) {
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERAGENT => 'Mozilla/5.0',
CURLOPT_TIMEOUT => 20,
]);
$html = curl_exec($ch);
curl_close($ch);
return $html ?: '';
}
function checkTimeStatus($html, $time) {
$pos = strpos($html, $time);
if ($pos === false) {
return 'nicht_gefunden';
}
$snippet = substr($html, $pos, 1500);
if (stripos($snippet, 'Auswählen') !== false) {
return 'verfügbar';
}
if (stripos($snippet, 'nur Personen') !== false) {
return 'nur_personen';
}
return 'unbekannt';
}
$html = fetch(buildSearchUrl($date));
$current = [];
foreach ($times as $time) {
$current[$time] = checkTimeStatus($html, $time);
}
$old = file_exists($cacheFile)
? json_decode(file_get_contents($cacheFile), true)
: [];
$availableNow = [];
foreach ($current as $time => $status) {
if (($old[$time] ?? null) !== $status && $status === 'verfügbar') {
$availableNow[] = $time;
}
}
if ($availableNow) {
$subject = 'Fähre jetzt mit Fahrzeug buchbar';
$msg = "Gute Nachrichten!\n\n";
$msg .= "Am $date sind folgende Abfahrten jetzt buchbar:\n\n";
foreach ($availableNow as $t) {
$msg .= "- $t Uhr\n";
}
$msg .= "\nDirekt prüfen: https://www.faehre.de/\n";
mail($email, $subject, $msg, "From: faehre-check@localhost");
}
file_put_contents($cacheFile, json_encode($current));
echo "Überwachung aktiv. Du wirst per Mail informiert, sobald sich etwas ändert.";
