RSS Feeds Newsscript

Moin…

Habe hier mal ein RSS Feeds Newsreader gebastelt, ohne den Textparser zu nutzen, hoffe er funzt bei euch auch…

Variabeln werden selbststaendig angelegt,
Nur wenige eingriffe seitens des anwenders notwendig, es müssen lediglich eine Gruppe angelegt werden, in die das script kommt, die ID des funktionsscriptes muss eingetragen werden, die URL des RSS Feeds, die GruppenID muss nicht eingetragen werden, kann aber eingetragen werden, Die anzahl der News kann eingestellt werden, standart sind 5.

Falls problemchen auftauchen, bitte einmal melden!!!

UPDATE:
die php_curl.php muss eingebunden sein, damit die curl funktion auf luppet…
auf dem packet einfach in das IPs Hauptverzeichniss kopieren/verschieben und in der pnp.ini unter

 folgendes eintragen:
extension = "php_curl.dll"



Newsscript

```php
<?
/* RSS FEED Newsticker [email]korny@korny.org[/email]
Script in einen Kategorie kopieren (z.B. News / Bild News)
Script gegebenenfalls umbenennen
Funktionsscript erstellen (ist mit im Packet) und ID im script eintragen!!!
Newsscript ausführen und schauen, ob die Variablen angelegt werden und gefüllt sind!!!
Das wars schon
*/
$funktionsscript=0; // Bitte Funktionsscript ID eingeben
$group=0; // Übergeordnete GruppenIP vom Newsscript! Kann eingetragen werden, muss aber nicht
$url='<benutzereingabe>'; // RSS FEED link eintragen
$newsanzahl=0; // gewünschte Newsanzahl eingeben, keine aenderung = 5 News werden erstellt


return(0); // Diese Zeile löschen oder ausdokumentieren


// Ab hier keine Änderungen mehr nötig //
// Überprüfung der eingaben //
if($funktionsscript==0) {
echo "ID des Funktionsscripts angeben";
return(0);
}

if(!$group || $group==0) {
$id=$IPS_SELF;
$group=IPS_GetObject($id);
$group=$group[ParentID];
if($group == 0) {
echo "Script kann nicht im Hauptverzeichnis ausgeführt werden";
return(0);
}
}
if(!$url || $url == '<benutzereingabe>') {
echo "Keine RSS Feeds angegeben";
return(0);
}
$name=IPS_GetName($group);
if($newsanzahl==0) {
$newsanzahl=5;
}

// Hauptscript
require("c:/IP-Symcon/scripts/$funktionsscript.ips.php");
if(@!IPS_GetObjectIDByName("$name$newsanzahl", $group)) {
for($i=0;$i<$newsanzahl;$i++) {
if(@!IPS_GetObjectIDByName("$name$i", $group  )) {
$integer[$i]=IPS_CreateVariable(3);
$ergebnis=IPS_SetParent($integer[$i], $group );
$ergebnis=IPS_SetName($integer[$i], "$name$i");
}
if(@!IPS_GetObjectIDByName("$name$i details", $group  )) {
$integer[$i]=IPS_CreateVariable(3);
$ergebnis=IPS_SetParent($integer[$i], $group );
$ergebnis=IPS_SetName($integer[$i], "$name$i details");
}
if(@!IPS_GetObjectIDByName("$name$i link", $group  )) {
$integer[$i]=IPS_CreateVariable(3);
$ergebnis=IPS_SetParent($integer[$i], $group );
$ergebnis=IPS_SetName($integer[$i], "$name$i link");
}
if(@!IPS_GetObjectIDByName("$name$i zeit", $group  )) {
$integer[$i]=IPS_CreateVariable(3);
$ergebnis=IPS_SetParent($integer[$i], $group );
$ergebnis=IPS_SetName($integer[$i], "$name$i zeit");
}
}
}


$rss_channel = array();
$currently_writing = "";
$main = "";
$item_counter = 0;

function startElement($parser, $name, $attrs) {
   	global $rss_channel, $currently_writing, $main;
   	switch($name) {
   		case "RSS":
   		case "RDF:RDF":
   		case "ITEMS":
   			$currently_writing = "";
   			break;
   		case "CHANNEL":
   			$main = "CHANNEL";
   			break;
   		case "IMAGE":
   			$main = "IMAGE";
   			$rss_channel["IMAGE"] = array();
   			break;
   		case "ITEM":
   			$main = "ITEMS";
   			break;
   		default:
   			$currently_writing = $name;
   			break;
   	}
}

function endElement($parser, $name) {
   	global $rss_channel, $currently_writing, $item_counter;
   	$currently_writing = "";
   	if ($name == "ITEM") {
   		$item_counter++;
   	}
}

function characterData($parser, $data) {
	global $rss_channel, $currently_writing, $main, $item_counter;
	if ($currently_writing != "") {
		switch($main) {
			case "ITEMS":
				if (isset($rss_channel[$main][$item_counter][$currently_writing])) {
					$rss_channel[$main][$item_counter][$currently_writing] .= $data;
				} else {
					//print ("rss_channel[$main][$item_counter][$currently_writing] = $data<br>");
					$rss_channel[$main][$item_counter][$currently_writing] = $data;
				}
				break;
		}
	}
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");

xml_set_character_data_handler($xml_parser, "characterData");
/*
if (!($fp = fopen($file, "r"))) {
	die("could not open XML input");
}

/*
while ($data = fread($fp, 4096)) {
	if (!xml_parse($xml_parser, $data, feof($fp))) {
		die(sprintf("XML error: %s at line %d",
					xml_error_string(xml_get_error_code($xml_parser)),
					xml_get_current_line_number($xml_parser)));
	}
}
*/
$data=curl_string($url);
xml_parse($xml_parser,$data);
xml_parser_free($xml_parser);

// putting in array
$news=array();
if (isset($rss_channel["ITEMS"]))
{
	if (count($rss_channel["ITEMS"]) > 0)
		for($i = 0;$i < count($rss_channel["ITEMS"]);$i++) $news[]=$rss_channel["ITEMS"][$i];
}
$c=0;
foreach($news as $key=>$val)
{
	if($c<$nr_news)
	{
#		echo "<p align=left>";
#		echo '<a href="'.$val['LINK'].'">'.$val['TITLE'].'</a> - '.$val['PUBDATE'].'<br>'.''.$val['DESCRIPTION'].'</font></p>';
	}
	$c++;
}


function curl_string ($url,$user_agent='Mozilla 4.0'){

       $ch = curl_init();

       curl_setopt ($ch, CURLOPT_URL, $url);
       curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent);
       curl_setopt ($ch, CURLOPT_HEADER, 0);
       curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
       curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
       curl_setopt ($ch, CURLOPT_TIMEOUT, 120);
       $result = curl_exec ($ch);
       curl_close($ch);
       return $result;

}
$news="";
for($i=0;$i<count($rss_channel[ITEMS]);$i++) {
$j="0";
$news[$i][$j]=$rss_channel[ITEMS][$i][TITLE]."
";
$j++;
$news[$i][$j]=$rss_channel[ITEMS][$i][LINK]."
";
$j++;
$news[$i][$j]=$rss_channel[ITEMS][$i][DESCRIPTION]."
";
$j++;
$news[$i][$j]=$rss_channel[ITEMS][$i][PUBDATE]."
";
$j++;
$news[$i][$j]=$rss_channel[ITEMS][$i][GUID]."
";
}

for($i=0;$i<count($news);$i++) {
if($i <= 16) {
for($j=0;$j<count($news[$i]);$j++) {
$newsline=$news[$i][$j];
$newsline=text_formatierung($newsline);

if($j==0) {
// Title //
if(@IPS_GetObjectIDByName("$name$i", $group )) {
$integer=IPS_GetObjectIDByName("$name$i", $group );
SetValueString($integer,$newsline);
}
}
if($j==1) {
// url //
if(@IPS_GetObjectIDByName("$name$i link", $group )) {
$integer=IPS_GetObjectIDByName("$name$i link", $group );
SetValueString($integer,$newsline);
}
}
if($j==2) {
// details //
if(@IPS_GetObjectIDByName("$name$i details", $group )) {
$integer=IPS_GetObjectIDByName("$name$i details", $group );
SetValueString($integer,$newsline);
}
}
if($j==3) {
// zeit //
if(@IPS_GetObjectIDByName("$name$i zeit", $group )) {
$integer=IPS_GetObjectIDByName("$name$i zeit", $group );
SetValueString($integer,$newsline);
}
}
}
}
}
?>

newsreader.rar (102 KB)

Funktionsscript


<?
function text_formatierung($newsline){

// Hier können noch anpassungen gemacht werden

#$newsline=html_entity_decode($newsline);
#$newsline=str_replace("         ", " ", $newsline);
#$newsline=str_replace("ö", "ö", $newsline);
#$newsline=str_replace("Ãœ", "Ü", $newsline);
#$newsline=str_replace("ü", "ü", $newsline);
#$newsline=str_replace("ä", "ä", $newsline);
#$newsline=str_replace("ß", "ß", $newsline);
#$newsline=str_replace("&ndash;", "-", $newsline);
#$newsline=str_replace('&#039;', "`", $newsline);
#$newsline=str_replace("&", "&", $newsline);
#$newsline=strip_tags($newsline);


$newsline=strip_tags($newsline);
$newsline=html_entity_decode($newsline);
$newsline=str_replace("         ", " ", $newsline);
$newsline=str_replace("ö", "ö", $newsline);
$newsline=str_replace("Ãœ", "Ü", $newsline);
$newsline=str_replace("ü", "ü", $newsline);
$newsline=str_replace("ä", "ä", $newsline);
$newsline=str_replace("ß", "ß", $newsline);
$newsline=str_replace("&ndash;", "-", $newsline);
$newsline=str_replace('&#039;', "`", $newsline);
$newsline=str_replace("&", "&", $newsline);
$newsline=str_replace("Ö", "Ö", $newsline);
$newsline=str_replace("„", "\"", $newsline);
$newsline=str_replace("“", "\"", $newsline);
$newsline=str_replace("–", "-", $newsline);
$newsline=str_replace("„", "\"", $newsline);
$newsline=str_replace("“", "\"", $newsline);

$newsline=str_replace("„", "\"", $newsline);
$newsline=str_replace("–", "-", $newsline);
$newsline=preg_replace("/\r|
/s", "", $newsline);
return $newsline;
}

?>

Beispielfeeds:

Borussia Dortmund online
Bild.de

Hallo korny,

bitte benutze in Zukunft für PHP Code nicht „QUOTE“-Tags sondern „PHP“-Tags.

Er lässt sich dann wesentlich besser lesen.

Gruß
HJH

Jupp, werd ich machen…

Ach ja, ein kleines replay waere ganz nett, obs luppet, ob verbesserungsvorschläge vorhanden sind usw.
Könnte mich ja motivieren, noch weitere scripte rauszurücken, bzw. zu schreiben… ^^

:eek:

Meine 86 downloads… und keine einzige frage, das nenn ich schonmal gut ^^

Da ham wa es ja auch schon… Hatte ich vergessen, die php_curl.dll muss noch in der php.ini mit eingebunden werden…

Packet neu runterladen oder hier die angehängte php_curl.dll runterladen und ins IPs Hauptverzeichnis legen…
in der php.ini unter

 foldendes einfügen:



extension = "php_curl.dll"

IPS neu starten und neuer versuch…

mfg
tkorny

Hier auchnoch meine umsetzung im dashboard…

php_curl.rar (99.8 KB)

Funktioniert enwandfrei -vielen Dank für die Unterstützung.

Moin korny,

hab Dein Script jetzt auch mal bei mir eingebaut (IPS 2.1) - ich verwende es als Newsticker auf dem Touchscreen in meiner Küche.

Ich gebe jeweils den Kurztext in einer Liste aus.
Nun möchte ich aber dass mit einem Klick auf den Kurztext eine Box aufgeht, in der der komplette Nachrichtentext dargestellt wird. So wie auf Deinem Screenshot.
Kannst Du mir einen Hinweis geben wie ich das realisiere?

Merci!

Aber ist möglich das die DLL einen installierten Mozilla Browser voraussetzt?

php_curl.dll muss in den ext(ab V2.1) Ordner und in der entsprechenden Version vorliegen.

Blöd, da hät ich auch drauf kommen müssen! Perfekt, klappt einwandfrei auch ganz ohne Mozilla hehe (–> Lösung war DLL muss in den EXT Ordner…)

Hallo Korny,
ich habe dein Script auch ausprobiert, nin aber nicht fit genug um mein Problem zu lösen.

Alle Variablen werden angezeigt.
Ich möchte die News in einem Popup Fenster im Webfront darstellen.
Das geht irgendwie nicht. Ich habe dort nur das Newsscript stehen.

Kannst du mir einen Tip geben?

Gruß
duk64

Wie hast du das denn versucht? Du schriebst ja:

Ich möchte die News in einem Popup Fenster im Webfront darstellen.
Das geht irgendwie nicht. Ich habe dort nur das Newsscript stehen.

Poste doch bitte mal den Code den du bisher probiert hast. ich denke, den Rest sollten wir dann hinbekommen. Ich habe mir z.B. eine rss.php angelegt, die die News in einer eigenen HTLM Seite anzeigt. Das sollte man für dich portieren könne, für das Popup. Wann bzw. unter welchen Umständen soll sich denn das Popup öffnen?

Hallo obicom,
ich hab nur einen Unterordner gemacht, indem das news-script drinn liegt.
Ich dachte, dass bei klick auf dem Script ein Fenster aufgeht, so wie bei der Adressliste.

Ich gebe zu, das ich von html und php wenig, ach was sag ich keine Ahnung habe.
Ich baue bis jetzt alles aus Beispielen auf und versuche diese an meine Gegebenheiten anzupassen.
Sorry…

Das was du vor hast, geht eigentlich ganz einfach, wenn das RSS Skript soweit bei dir läuft und die Variablen angelegt und mit Inhalt gefüllt hat.

Dafür legst du einfach ein neues Skript an, z.B. mit dem Namen : „RSS Feed anzeigen“

in dem Skript läßt du für jede Zeile, mit RSS Feeds, ein echo ausgeben. Anbei ein beispiel für eine RSS Zeile, in dem WebFront Popup:

<?
echo '<div><strong><a href="'.GetValueString(12885).'" target="_blank">'.GetValueString(49793).' :  '.GetValueString(43908).'</a></strong></div><br>';
?>

Die erste VAR Id (ID der Skript Variable) beinhaltet den Link zur vollen News, die Zweite gibt Datum und Uhrzeit an, die Dritte dann die eigentliche kurz News. Die einzelne Zeile kann man dann im Popup anklicken, damit sich die ganze News in einem neuen Reiter (Mozilla) bzw. Fenster (InternetExplorer) öffnet.

Das ganze sähe dann ungefähr so aus:

genau das sollte es sein.

Dein Beispiel hab ich sogar mit einem verkaterten Kopf hinbekommen :o

vielen vielen Dank obicom

Übrigens deine Kopfzeile im Beispiel ist toll, sowas muss ich auch versuchen.

Frohes neues 2010.

Auch Dir ein frohes neues Jahr Duke,

welche Kopfzeile genau meinst du?
Wenn du Fragen hast, dann immer her damit, wenn ich helfen kann.

Anbei noch ein Beispiel für die Beta 2.2, in dem ich eine der neuen WFC Funktionen für das Popup nutze.

<?
$rss_info = '<div> <center><H3><U>RSS Feeds von Bild.de</U></H3></center></div><br>';
$rss_info .= '<div><strong><a href="'.GetValueString(12885 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_0 link]*/ ).'" target="_blank">'.GetValueString(49793 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_0 zeit]*/).' :  '.GetValueString(43908 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_0]*/).'</a></strong></div><br>';
$rss_info .= '<div><strong><a href="'.GetValueString(18948 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_1 link]*/).'" target="_blank">'.GetValueString(58219 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_1 zeit]*/).' :  '.GetValueString(25888 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_1]*/).'</a></strong></div><br>';
$rss_info .= '<div><strong><a href="'.GetValueString(16892 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_2 link]*/).'" target="_blank">'.GetValueString(43988 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_2 zeit]*/).' :  '.GetValueString(43550 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_2]*/).'</a></strong></div><br>';
$rss_info .= '<div><strong><a href="'.GetValueString(43361 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_3 link]*/).'" target="_blank">'.GetValueString(35281 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_3 zeit]*/).' :  '.GetValueString(32843 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_3]*/).'</a></strong></div><br>';
$rss_info .= '<div><strong><a href="'.GetValueString(43119 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_4 link]*/).'" target="_blank">'.GetValueString(42314 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_4 zeit]*/).' :  '.GetValueString(34587 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_4]*/).'</a></strong></div><br>';
$rss_info .= '<div><strong><a href="'.GetValueString(50632 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_5 link]*/).'" target="_blank">'.GetValueString(20562 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_5 zeit]*/).' :  '.GetValueString(23226 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_5]*/).'</a></strong></div><br>';
$rss_info .= '<div><strong><a href="'.GetValueString(24018 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_6 link]*/).'" target="_blank">'.GetValueString(53232 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_6 zeit]*/).' :  '.GetValueString(39901 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_6]*/).'</a></strong></div><br>';
$rss_info .= '<div><strong><a href="'.GetValueString(41713 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_7 link]*/).'" target="_blank">'.GetValueString(56787 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_7 zeit]*/).' :  '.GetValueString(20457 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_7]*/).'</a></strong></div><br>';
$rss_info .= '<div><strong><a href="'.GetValueString(48603 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_8 link]*/).'" target="_blank">'.GetValueString(34906 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_8 zeit]*/).' :  '.GetValueString(58155 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_8]*/).'</a></strong></div><br>';
$rss_info .= '<div><strong><a href="'.GetValueString(53863 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_9 link]*/).'" target="_blank">'.GetValueString(12566 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_9 zeit]*/).' :  '.GetValueString(59507 /*[.RRS_Feeds\Bild.de_News_\Bild.de_News_9]*/).'</a></strong></div><br>';
WFC_SendPopup(26191 /*[WebFront Configurator]*/, "RSS News",  $rss_info); // ID anpassen !!
?>

Danke für das Beispiel, aber ich hab noch die 2.1 Version.
Ich weiß nicht genau, ob ich updaten soll.

Das Menü im Anhang meine ich.
es ist oben statt unten, kann verschoben werden und beinhaltet rechts eine Wetteranzeige. Toll gemacht.
geht das nur mit 2.2 oder auch mit der 2.1-Version?

Das kannst Du im Webfront Configurator erstellen.

Tja ich hab mal die Doku zum Konfigurator gelesen.

So richtig hab ichs nicht kapiert, aber ich denke hier im Forum wird noch was zu finden sein. Muss ich mal stöbern.

Seit ich die Version 2.2 installiert habe läuft bei mir der Newsreader zwar noch… kriege immer die Meldung mit Notice: Use of undefined constant ParentID - assumed ‚ParentID‘ etc… das Script selbst aber läuft sonst… weisst du da den Hintergrund… ? Kriegt man die weg, hat das was mit der neuen version von der Dll zu tun denn soviel ich weiss hat sich in der Syntax oder vorgaben seitens ips nichts geändert…?:slight_smile: