From 2db99c9ce0d13c647f2d36e3a0a598d22609a642 Mon Sep 17 00:00:00 2001 From: simonpipe Date: Fri, 19 Dec 2025 15:41:13 +0100 Subject: [PATCH] Upload files to "php" --- php/metadata.php | 82 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 php/metadata.php diff --git a/php/metadata.php b/php/metadata.php new file mode 100644 index 0000000..7605019 --- /dev/null +++ b/php/metadata.php @@ -0,0 +1,82 @@ + 'Ungültige oder fehlende URL']); + exit; +} + +// WICHTIG: Die Header müssen Icy-MetaData enthalten, sonst senden viele Server gar nichts! +$opts = [ + "http" => [ + "method" => "GET", + "header" => "Icy-MetaData: 1\r\n", + "timeout" => 5, + "user_agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) RadioMetadataProxy/1.0" + ] +]; + +$context = stream_context_create($opts); +$fp = @fopen($url, 'r', false, $context); + +if (!$fp) { + echo json_encode(['error' => 'Stream konnte nicht geöffnet werden']); + exit; +} + +// Puffer erhöhen: Wir lesen bis zu 192 KB, um auch langsame Metadaten zu finden +$max_read = 196608; +$data = ''; +$read_size = 0; + +while (!feof($fp) && $read_size < $max_read) { + $chunk = fread($fp, 8192); + if ($chunk === false) break; + $data .= $chunk; + $read_size += strlen($chunk); + + // Vorzeitig abbrechen, wenn der Titel gefunden wurde + if (strpos($data, 'StreamTitle=') !== false) { + break; + } +} +fclose($fp); + +// Suche nach dem StreamTitle +if (preg_match("/StreamTitle='(.*?)';/", $data, $matches)) { + $title = trim($matches[1]); + + // UTF-8 Korrektur + if (!mb_check_encoding($title, 'UTF-8')) { + $title = mb_convert_encoding($title, 'UTF-8', 'ISO-8859-1'); + } + + // --- NEU: FILTER FÜR UNERWÜNSCHTE TITEL --- + $clean_title = strtolower($title); + $bad_patterns = ['error code:', 'internal server error', '500 error', '404 not found']; + + foreach ($bad_patterns as $pattern) { + if (strpos($clean_title, $pattern) !== false) { + $title = ''; // Titel leeren, wenn Fehler erkannt wurde + break; + } + } + + if (empty($title)) { + // Sende title als null, damit JS weiß: Kein Songtitel vorhanden + echo json_encode(['title' => null]); + } else { + echo json_encode(['title' => $title]); + } +} else { + // Keine Metadaten gefunden - wir senden einfach null statt einer Fehlermeldung + echo json_encode(['title' => null]); +} \ No newline at end of file