Upload files to "php"
This commit is contained in:
parent
5703eb9aaa
commit
2db99c9ce0
1 changed files with 82 additions and 0 deletions
82
php/metadata.php
Normal file
82
php/metadata.php
Normal file
|
|
@ -0,0 +1,82 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* optional/metadata.php
|
||||||
|
* Optimierte Version zum Auslesen von Metadaten
|
||||||
|
*/
|
||||||
|
|
||||||
|
header('Access-Control-Allow-Origin: *');
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
|
||||||
|
$url = isset($_GET['url']) ? $_GET['url'] : '';
|
||||||
|
|
||||||
|
if (empty($url) || !filter_var($url, FILTER_VALIDATE_URL)) {
|
||||||
|
echo json_encode(['error' => '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]);
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue