HTTP POST Logging Problem

Guten Tag!

Ich habe ein Problem mit der Logging-Funktion in Mairlist. Wie ich im Wiki, hier https://wiki.mairlist.com/reference:logging_variables gelesen habe, soll seit der Version 6.3.3 die Variable %ALBUMART eingeführt worden sein. Diese habe ich in einen HTTP POST Befehl eingefügt und versuche, das aktuelle Songcover mit einem PHP-Script darstellen zu lassen. Leider kann ich machen, was ich will, es funktioniert einfach nicht. Eventuell gibt es ja jemand, der mir einen Denkanstoß geben kann? Ich füge die relevanten Daten einfach mal hier unter dem Text ein…

<?php

//max recent tracks to keep in the recently played tracks history
$max_recent = 5;

//secret key to access the script
$key = '*********';

//check access
if ($_REQUEST['key'] !== $key) {
    ReturnError(400, 'Invalid key');
}

//artist/title info
$artist = $_REQUEST['artist'];
$title = $_REQUEST['title'];
//title to display
$t = htmlspecialchars($artist . ' - ' . $title);
$file = 'nowplaying_title.txt';

//recent tracks history
$recent = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$recent = array_slice($recent, 0, $max_recent);

//save current track title and played tracks history
$r = fopen($file, 'wb');
if ($r !== false) {
    //current track
    fwrite($r, $t . "\n");
    //recent tracks
    foreach ($recent as $s) {
        fwrite($r, $s . "\n");
    }
    fclose($r);
} else {
    ReturnError(500, 'Failed to write title to a file');
}

$max_next = 1;
$nextsong = $_REQUEST['next'];
$n = htmlspecialchars($nextsong);
$file2 = 'nextplaying.txt';

$next = file($file2, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$next = array_slice($next, 0, $max_next);

$r2 = fopen($file2, 'wb');
if ($r2 !== false) {
    fwrite($r2, $n . "\n");
    foreach ($next as $s2) {
        fwrite($r2, $s2 . "\n");
    }
    fclose($r2);
} else {
    ReturnError(500, 'Failed to write title to a file');
}

//album cover
$artwork = isset($_REQUEST['artwork']) && ($_REQUEST['artwork'] !== '') ? $_REQUEST['artwork'] : false;
if ($artwork !== false) {
    $artwork = base64_decode($artwork);
    $r = fopen('nowplaying_artwork.png', 'wb');
    if ($r !== false) {
        fwrite($r, $artwork);
        fclose($r);
    } else {
        ReturnError(500, 'Failed to write artwork to a file');
    }
}

function ReturnError($code, $text) {
    $protocol = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0';
    header($protocol . ' ' . $code . ' ' . $text);
    exit();
}

Das funktioniert soweit auch, bis auf die Ausgabe des Covers…

Grüße

Onkel_Unbekannt

Moin!

Ich habe mittlerweile festgestellt, dass Mairlist die relevanten Daten garnicht erst überträgt. Ich habe sämtliche Schreibweisen und erdenkliche Variationen (Albumart als einzige Variable übertragen oder zusammen mit anderen) durchprobiert. Eventuell kann @Torben oder @UliNobbe mal ne Aussage dazu treffen oder idealerweise mal ne Schnellreferenz zur Benutzung posten… Ich bin echt ratlos…

Grüße

Hast du auch tatsächlich “HTTP POST (multipart/form-data)” gewählt?

Ja, habe ich extra drauf geachtet.

Also bei mir funktioniert es so:

Mit Wireshark verifiziert, daher eine nicht-https-URL zum Testen genommen, die es zwar nicht gibt, aber um den Request zu sehen reicht es :wink:

Grundvoraussetzung ist natürlich, dass mAirList das Cover auch auslesen kann. Dazu werden dieselben Routinen benutzt wie für die Cover-Anzeige in der Playlist, wenn die entsprechende GUI-Option eingeschaltet ist.

Wichtig: Es handelt sich hierbei um das “on the fly”-Auslesen des Covers. Also nicht den alten Weg, wo man selbiges erst als Icon in die Elementdaten importiert.

Okay, soweit, so klar. Leider stehe ich jetzt völlig auf dem Schlauch, wie ich die übertragenen Daten auswerte… Im Idealfall soll das so passieren, dass auf dem Server das übertragene Cover in einer Datei abgespeichert wird (realisiert in PHP). Kann mir da jemand auf’s Pferd helfen?

https://www.php.net/manual/de/features.file-upload.post-method.php

Ich bedanke mich aufs allerherzlichste, es funktioniert jetzt einwandfrei! Super das der Support hier so schnell und unkompliziert funktioniert - selbst für die Hobbyuser. Chapeau!

1 Like