Titelanzeige für HTML-Seite

Hallo,

derzeit erstelle ich eine HTML-Seite, welche später einen Radiostream abspielen soll. Die Player-Funktionalität ist dabei schon gegeben.

Nun möchte ich natürlich auch die Hörer über das aktuelle Musikprogramm informieren. Zudem muss man das ja auch lt. GVL, weil es (dank mAirList) u. a. auch technisch realisierbar ist.

Aktuell schreibt mAirList den aktuellen Titel und Interpreten des Senders in eine Textdatei (*.txt). Diese wird dann automatisch auf einen Webserver geladen und durch ein Script für diverse APIs von Radio-Aggregatoren ausgelesen. Das Script habe ich zur Verfügung gestellt bekommen und dann an meine Bedürfnisse angepasst.

Nun ist meine Frage: Wie kann ich den aktuellen Titel und Interpreten auf diese HTML-Seite bringen? Kann ich dafür auch die Textdatei verwenden oder muss da von mAirList ein “HTTP POST” (oder ähnliches) her?

Einfache Scripts kann ich verstehen, aber schwer schreiben. Ich denke aber, dass ein Script nötig sein wird.

Über Hilfe freue ich mich. Wünsche allen schon einmal einen guten Rutsch, viel Glück und Gesundheit!

Mit freundlichen Grüßen
Oliver :slight_smile:

Eigentlich hat das nicht wirklich etwas mit Mairlist zu tun.
Sicher, kann man so machen, aber einfacher ist es, wenn du dazu den Streamserver abfragst.
Der hat ja die Titelinformationen bereits vorliegen.
Beispiele für shoutcast oder Icecast sollte es im Internet genug geben.

Hallo Sylvio,

an sich hast du da Recht, ja.
Allerdings macht der Server zurzeit nicht, was er soll. (Server 3 sagt dir was? :grinning_face_with_smiling_eyes:)

Deshalb habe ich es bis jetzt so umstrukturiert, dass ich nicht über den Server (bzw. die damit verbundene API) gehen muss. Auch deshalb frage ich explizit nach einer Lösung aus mAirList heraus.

Mit freundlichen Grüßen
Oliver :slight_smile:

Hallo Oliver,

Ich mach sowas wie du aus Mairlist heraus, aus einem Mairlistscript, das im Hintergrund läuft: Ich bastel mir da ein JSON der Playlist und schicke das an einen Server.

Das ist allerdings aufwendig, soviel mls zu lernen (und das dann ausfallsicher zu machen)

Wenn du zuverlässig eine Textdatei auf deinem Rechner hast, die immer den aktuellen Titel hat, dass solltest du ausserhalb von Mairlist diese Datei auf Änderungen überwachen und bei Änderung hochladen. Dafür eignet sich die Programmiersprache Python (falls du nicht schon einen eigenen Favoriten hast, weil das geht mit fast jeder Sprache)

Hallo mbsfrg,

die Textdatei wird von mAirList generiert und auch entsprechend bei jeder Änderung auf dem Webserver aktualisiert. Nun habe ich eben zwei Möglichkeiten:

  1. Ich finde ein Javascript, dass diese Datei ausliest und den Text dann ins HTML-Dokument schreibt (Server kann nach meinem Kenntnisstand kein PHP) [hat dann weniger mit mAirList zu tun].

  2. mAirList bietet einfachere Möglichkeiten, die ich eben noch nicht kenne und deshalb mithilfe dieses Threads herausfinden möchte.

Zu Option 1 werde ich mal recherchieren und trotzdem diesen Thread weiterhin im Auge behalten, falls sich näherliegende oder einfachere Lösungen ergeben. Meine Ergebnisse teile ich dann natürlich gerne mit euch!

Mit freundlichen Grüßen
Oliver :slight_smile:

Das wird in keinem Fall funktionieren.
Javascript wird im Browser ausgeführt.
Und somit hast du keine Möglichkeit auf die Festplatte des Webservers zuzugreifen.

Dann hast du ganz schlechte Karten.
Aber das würde mich arg wundern, da php ja quasi Standard ist, bei Webserver.

Ich kann doch per URL die Datei abrufen? :face_with_raised_eyebrow:

Mit den APIs der Radio-Aggregatoren läuft das ja auch nicht anders. Die greifen auch auf die Textdatei zu.

Du meinst, wenn du auf dem Webserver eine Datei hast, in welche Mairlist den Interpreten und die Titel schreibt?
Das geht, ja.
Dann haben wir uns falsch verstanden :wink:

Günstig wäre dennoch das dort php erlaubt ist.
Dann könnte Mairlist die Informationen sehr einfach an eine php Datei senden.

Das gilt nun zu lösen. Mir ist da auch schon etwas eingefallen:

Es wird derzeit mit zwei Servern gearbeitet und einer davon kann PHP (nämlich der, wo die Textdatei mit Interpret und Titel gespeichert ist). Der Server, der die Daten empfangen soll, hat kein PHP.

Wäre das hilfreich? Kann man damit irgendwas anfangen?

z.B. sowas: GitHub - Radio-Zoom/API: API to Icecast2 and other stuff by Radio-Zoom

Hi Oliver,

On this Wiki Page Torben has described how you should proceed. I followed these instructions and a friend of mine helped me with the php scripts which I needed on my website.

This script should be placed at the top of your website. xxxxxxxxxx has to be replaced with the appropriate name of the database and passwords obviously. Make sure you rename the webpage to *.php in order for it to work. Set DESC LIMIT to the appropriate number of songs you would like to show. “1” shows only the current song.

<?php
  $db = mysqli_connect('localhost', 'xxxxxxxxxx', 'xxxxxxxxxx', 'xxxxxxxxxx');
  $query = mysqli_query($db, "SELECT * FROM playlistlog ORDER BY starttime DESC LIMIT 2");
?>

Insert the code below somewhere on your page where you would like to show the current song:

				<div id="now_playing">
					<h2>Now on air:<a href="../nfm/nfm.php"><i class="fa fa-refresh pull-right hidden-xs"></i></a></h2>
					<br>
					<div id="onair">	
						<div class="table-responsive"> 
							<table class="table table-hover table-highlight table-condensed table-borderless">
								<tbody>
						            <?php /*StartWhile*/ while($song = mysqli_fetch_assoc($query)) { ?>
						            	<tr>
						                 	<td><img src="<?= curl_get_file_contents($song['artist'],$song['title']) ?: "https://xxxxxxxx.nl/images/nfm_tips/fallback_image.png" ?>"  class="border2 img-rounded pull-left" width=191px height=191px/></td>
						                 	<td><span style="font-weight:bold" class="text-uppercase"><?= $song['artist'] ?></span> <br> <?= $song['title'] ?><td>
						                 </tr>	
						            <?php } /*EndWhile*/ ?>
								</tbody>
							</table>
						</div>
					</div>				
				</div>

Make the necessary adjustments to your own liking.

If you want the albumart to show up, put this script underneath the the first php script. Make sure you have a fallback image if the albumart cannot be found.

<?php
function curl_get_file_contents($artiest,$titel,$size = "extralarge")
    {
        $URL = "http://api.depubliekeomroep.nl/anp/albumart.php?artiest=" .
         urlencode($artiest) . "&titel=". urlencode($titel) 
        ."&size=". urlencode($size);
        $c = curl_init();
        curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($c, CURLOPT_URL, $URL);
        $contents = curl_exec($c);
        curl_close($c);

        if ($contents) return $contents;
            else return FALSE;
    }
?>

Insert this script at the end of your body in order to refresh the div where your current song is shown:

<script> 
$(document).ready(function(){
setInterval(function(){
      $("#onair").load(window.location.href + " #onair" );
}, 26760);
});
</script>

This will refresh the div every 26 seconds. My fallback image is a turning vinyl record at 33rpm and this way it keeps rotating nicely even when the div is refreshed.

This is the result with Album Art:

mairlist-020

And this is the result without Album Art:

Hope this is helpfull.

1 Like

Hello Lukeman,

thank you for all the text, but unfortunately the server does not support PHP pages. Therefore, we have been looking for another solution in German so far that works without PHP.

Sorry!

Kind regards
Oliver :slight_smile:

1 Like

That’s a pity, I must have overlooked that part. Sorry, hope you will find a solution soon!

1 Like

Currently, I have a text file (*.txt) on my server that mAirList updates with every song update. It might be possible to read this out via Javascript and then display it on the HTML page.

In any case, it is possible to call up this file via URL. Almost like a little API of my own. :grinning_face_with_smiling_eyes:

Hiermit sollten die Informationen aller 10 Sekunden aus der Datei gelesen werden.

PS:
die Zeile
var url=“https://domain.de/dateiname.txt”;
bitte anpassen.

<!doctype html>
<html lang="de">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
	<script src="//ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <title>Titel aus Textdatei</title>
      <script language="javascript" type="text/javascript">
      <!--
        
        var url="https://domain.de/dateiname.txt";
        function reload_titel(){
        $.ajax({
           type: "POST",
           contentType: "application/json; charset=utf-8",
           url: url,
           success: function(data) {
                    $('#titel').text(data);
                    }
                });
        }
     
	$(document).ready(function() {                
	reload_titel();
	setInterval(reload_titel, 10000);
	});
      -->
      </script>
  </head>
  <body>
    <p><b>aktueller Titel</b></p>
    <div id="titel"></div>
  </body>
</html>
2 Likes

Hallo Sylvio,

leider läuft das Script so nicht. Ich erhalte folgende Fehler:

Fehler 1

Access to XMLHttpRequest at ‘https://domain.de/aktueller_titel.txt’ from origin ‘https://radioseite.de’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

und

Fehler 2

POST https://domain.de/aktueller_titel.txt net::ERR_FAILED
send @ jquery.min.js:4
ajax @ jquery.min.js:4
reload_titel @ index.html:13
setInterval (async)
(anonymous) @ index.html:25
j @ jquery.min.js:2
k @ jquery.min.js:2
setTimeout (async)
(anonymous) @ jquery.min.js:2
i @ jquery.min.js:2
fireWith @ jquery.min.js:2
fire @ jquery.min.js:2
i @ jquery.min.js:2
fireWith @ jquery.min.js:2
ready @ jquery.min.js:2
S @ jquery.min.js:3

Hilft dir das irgendwie?

(Die Domains habe ich natürlich richtig ausgetauscht)

Problem hier ist, das die Datei vermutlich auf einer anderen URL liegt, als die aufrufende Seite.
“Access-Control-Allow-Origin” ist eine Einstellung des Webservers, der das ganze verbietet.

Bleibt dir eigentlich nur übrig, das die Datei auf beide Webseiten kopiert wird.

Okay, danke für die Info!

Dann werde ich mich mal mit dem Administrator in Verbindungen setzen. Einen FTP Zugriff besitze ich nämlich nicht. Es gibt nur Logindaten zum Webinterface. Damit kann ich die HTML-Datei verändern… alles etwas kompliziert.

Ich melde mich dann, wenn ich neue Informationen habe. Danke schon einmal für die Hilfe von allen.

Einen guten Rutsch, viel Glück und Gesundheit wünsche ich euch allen ebenfalls! :fireworks:

1 Like

Moin,

frohes neues Jahr an alle!

Nachdem ich die Internetadresse in der .htaccess freigegeben habe, läuft nun alles mit Sylvios Script.
Vielen Dank für die Hilfe!

Mit freundlichen Grüßen
Oliver :slight_smile:

1 Like