Newsticker

Da ich selbst auf der Suche nach einem solchen Newsticker war und noch nichts adäquates gefunden habe, habe ich kurzerhand ein Skript erstellt, welches dies erledigt.
Vorraussetzung hierfür: Webserver mit PHP
Im Fehlerfall: Es kann sein, dass das JavaScript durch den lokalen Aufruf geblockt wird.

Das Skript benötigt auf dem Server Ausführ- und Schreibrechte, damit die RDF-Datei heruntergeladen und verarbeitet werden kann. Dies geschieht bei jedem Aufruf und dauert weniger als 1 Sekunde 🙂

Die Seite kann bequem über ein <iframe>-Tag eingebunden werden.

Newsticker Skript

Beispiel für die Anzeige des Newstickers
Beispiel für die Anzeige des Newstickers

Die Adresse der Datei der News-Datei kann in Zeile 3 geändert werden.

Die Farben kannst Du per CSS anpassen:

  • Zeile 73: Hintergrundfarbe
  • Zeile 74: Textgröße
  • Zeile 82: Textfarbe

Die Anzahl der News, die aus der Datei gelesen werden sollen, können in Zeile 40 angepasst werden.

<?php
 //URL der Datei, die geladen/geparsed werden soll
 $newsfile = "http://www.tagesschau.de/newsticker.rdf";
  
 // Funktion, um News rdf Datei abzuholen
 function get_file($file, $local_path, $newfilename) 
 { 
     $err_msg = ''; 
     //echo "<br>Attempting message download for $file<br>"; 
     $out = fopen($local_path.$newfilename,"wb");
     if ($out == FALSE){ 
       print "File not opened<br>"; 
       exit; 
     } 
  
     $ch = curl_init(); 
  
     curl_setopt($ch, CURLOPT_FILE, $out); 
     curl_setopt($ch, CURLOPT_HEADER, 0); 
     curl_setopt($ch, CURLOPT_URL, $file); 
  
     curl_exec($ch); 
     //echo "<br>Error is : ".curl_error ( $ch); 
  
     curl_close($ch); 
  
 }
 //Funktionsaufruf um die Datei abzuholen
 get_file($newsfile,'./','newsticker.rdf');
  
 // Feed einlesen
 if( !$xml = simplexml_load_file('newsticker.rdf') ) {
     die('Fehler beim Einlesen der XML Datei!');
 }
  
 // Ausgabe Array
 $out = array();
  
 // auszulesende Datensaetze
 $i = 7;
  
 // Items vorhanden?
 if( !isset($xml->channel[0]->item) ) {
 	die('Keine Items vorhanden!');
 }
  
 // Items holen
 foreach($xml->channel[0]->item as $item) {
 	if( $i-- == 0 ) {
 		break;
 	}
 	$out[]=(string) $item->title;
 }
 //print_r($out);
  
 // Eintraege ausgeben
 $news = "";
 foreach ($out as $value) {
 	$news .= " ++++ ".$value;
 }
 ?>
 <!DOCTYPE html>
 <html lang="de">
 <head>
 <meta charset="utf-8">
 <title>SKB Web - NewsParser</title>
 <style>
 	.marquee {
 		max-width: 100vw; /* iOS braucht das */
 		white-space: nowrap;
 		overflow: hidden;
 		/* Hintergrundfarbe des Lauftextes. Auskommentieren, um Transparent zu erhalten */
 		background-color: #000000;
 		font-size:20px;
 	}
  
 	.marquee span {
 		display: inline-block;
 		padding-left: 100%;
 		animation: marquee 10s linear infinite;
 		/* Textfarbe des Lauftextes */
 		color: #FFFFFF;
 	}
  
 	/* Optional: mouseover (oder Tipp auf dem Touchscreen) pausiert die Laufschrift */
 	.marquee span:hover {
 		animation-play-state: paused 
 	}
  
 	/* Make it move */
 	@keyframes marquee {
 		0%   { transform: translateX(0); }
 		100% { transform: translateX(-100%); }
 	}
 </style>
 </head>
 <body>
 <div id="marquee" class="marquee"><span><?php echo $news; ?></span></div>
 <script>
 	if (document.getElementById("marquee")) {
 		var laufschrift = document.getElementById("marquee");
 		len = laufschrift.innerHTML.length;
 		laufschrift.firstChild.style.animationDuration = len/6 +"s";
 	}
 </script>
 </body>
 </html>

Kategorien:

1 Kommentar

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.