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)