XML Feed - RSS/ATOM für Version 4

Allgemeine Diskussionen zu ConPresso 4. Handhabung, Möglichkeiten, Verständnisfragen.
Achtung: Bitte benutzt wenn möglich die themenspezifischen Foren!
Antworten
M. Köhly

XML Feed - RSS/ATOM für Version 4

Beitrag von M. Köhly »

Hallo ConPresso!
Hallo Forum!

Ein Lob für die weiteren Fortschritte des RC02, das freut man sich richtig auf die Endfassung ...

Gibt es Planungen, einen RSS / ATOM / XML-Feed als Modul für CPO4 anzubieten?
Hat schon jemand experimentiert und die Datenbankabfragen des alten Moduls (z.B. von http://www.seventy-soft.de/cops/cpo_modrss/index.php) tranferiert?

Irgendwie scheitert die Ausgabe des untenstehenden Codes als XML-Datei am Header...
vielleicht könnte mal ein erfahrenerer PHP'ler draufschauen?

Vielen Dank!


********* schnipp *********

<?php

// if (!defined('CPO')) exit;


function umlaute($text) {
$von = array(1 => "ä",2 => "ü",3 => "ö",4 => "ß");
$nach = array( 1 =>"ae", 2 =>"ue", 3 =>"oe", 4 =>"ss");
$text = str_replace($von,$nach,$text);
return($text);
}


require_once('db.php');

$colname_Recordset1 = "1";
mysql_select_db($database1, $1);

$xml = "";
$count = 15;
$jetzt = time();
$basedir = "http://www.domain.de/inhalt/";

$query = "";
$query.= "SELECT ";
$query.= "conpresso4_news.nr, conpresso4_news.artikel_archiv, conpresso4_news.article_nr, ";
$query.= "conpresso4_news.commentary, conpresso4_news.rubric_id, conpresso4_news.titel, ";
$query.= "conpresso4_news.datum, conpresso4_news.verfallsdatum, conpresso4_news.freigabe, ";
$query.= "conpresso4_rubric.id, conpresso4_rubric.directory, conpresso4_rubric.seclevel, ";
$query.= "conpresso4_content_html.article_id, conpresso4_content_html.fieldname, ";
$query.= "conpresso4_content_html.html ";
$query.= "FROM conpresso4_news ";
$query.= "INNER JOIN conpresso4_rubric ON (conpresso4_news.rubric_id = conpresso4_rubric.id) ";
$query.= "INNER JOIN conpresso4_content_html ON (conpresso4_news.article_nr = conpresso4_content_html.article_id) ";
$query.= "WHERE freigabe = 0 ";
$query.= "AND rubric_id = '1' ";
$query.= "AND artikel_archiv < 1 ";
$query.= "AND seclevel = 0 ";
$query.= "AND fieldname = 'Teaser' ";
// $query.= "AND pub_datum < '".$jetzt."' ";
// $query.= "AND verfallsdatum > '".$jetzt."' ";
$query.= "ORDER BY pub_datum DESC LIMIT 0,".$count."";

//print $query;

$query_Recordset1 = sprintf($query, $colname_Recordset1);

$Recordset1 = mysql_query($query_Recordset1, $msuhg) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);

// XML
$xml = '';
$xml.= '<?xml version="1.0" encoding="iso-8859-1"?>';
$xml.= '<rss version="2.0" xmlns:im="http://purl.org/rss/1.0/item-images/" xmlns:dc="http://purl.org/dc/elements/1.1/">';
$xml.= '<channel>';
$xml.= '<title>';
$xml.= 'Newsfeed';
$xml.= '</title>';
$xml.= '<link>';
$xml.= 'http://www.domain.de';
$xml.= '</link>';
$xml.= '<description>';
$xml.= 'Newsfeed mit aktuellen Nachrichten';
$xml.= '</description>';
$xml.= '<language>';
$xml.= 'de-de';
$xml.= '</language>';
$xml.= '<copyright>';
$xml.= '(c) Anbieter';
$xml.= '</copyright>';
$xml.= '<docs>';
$xml.= 'http://www.domain.de';
$xml.= '</docs>';
$xml.= '<image>';
$xml.= '<url>';
$xml.= 'http://www.domain.de/rssfeed.png';
$xml.= '</url>';
$xml.= '<title>';
$xml.= 'RSS XML-Feed';
$xml.= '</title>';
$xml.= '<link>';
$xml.= 'http://www.domain.de';
$xml.= '</link>';
$xml.= '</image>';
$xml.= '<managingEditor>';
$xml.= 'Anbieter';
$xml.= '</managingEditor>';
$xml.= '<dc:publisher>';
$xml.= 'Anbieter';
$xml.= '</dc:publisher>';
$xml.= '<dc:contributor>';
$xml.= 'Anbieter';
$xml.= '</dc:contributor>';
// Nun folgen die einzelnen Beiträge, die alle nach demselben Muster aufgebaut sind.
// Überschrift, Text und Verweis genügen:
/*
$xml.= ' <item>';
$xml.= ' <title>';
$xml.= ' Ueberschrift';
$xml.= ' </title>';
$xml.= ' <description>';
$xml.= ' Text';
$xml.= ' </description>';
$xml.= ' <link>';
$xml.= ' http://www.beispielwebsite.de/thema.html';
$xml.= ' </link>';
$xml.= ' </item>';
*/
// Bis zu 15 Beiträge können enthalten sein.
// Geschlossen wird die Datei mit diesen beiden Tags:

do {

$xtitel = umlaute($row_Recordset1['titel']);
$xcomment = umlaute($row_Recordset1['commentary']);
$xdir = $row_Recordset1['directory'];
$xnr = $row_Recordset1['nr'];
$field = $row_Recordset1['fieldname'];
$html = $row_Recordset1['html'];

$xml.= ' <item>';
$xml.= ' <title>';
$xml.= ' '.$xtitel.'';
$xml.= ' </title>';
$xml.= ' <description>';
$xml.= ' '.$html.'';
$xml.= ' </description>';
$xml.= ' <link>';
$xml.= ' '.$basedir.$xdir.'/detail.php?nr='.$xnr.'';
$xml.= ' </link>';
$xml.= ' </item>';

} while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));

$xml.= '</channel>';
$xml.= '</rss>';

$xml = strip_tags(stripslashes($xml));
// print $xml;

// Ausgabe des XML

header ( $xml );
mysql_free_result($Recordset1);
exit;

?>

********* schnapp *********
Benutzeravatar
semf
Modul-Entwickler
Beiträge: 1853
Registriert: 01.01.1970 01:00
Wohnort: Gütersloh-Friedrichsdorf
Hat sich bedankt: 14 Mal
Danksagung erhalten: 40 Mal
Kontaktdaten:

Re: XML Feed - RSS/ATOM für Version 4

Beitrag von semf »

probier mal aus
$xml.= '<?xml version="1.0" encoding="iso-8859-1"?>';

das hier zu machen:
$xml.= '<'.'?xml version="1.0" encoding="ISO-8859-1"?'.'>';

Viel Erfolg!

Module ConPresso 4.x
Latest News
Tell-a-friend

Module ConPresso 3.4.x
Index_X
Kontakt
RSS-Feed
Umfrage
Gästebuch
Tell-a-Friend

Modul-Download
M. Köhly

Re: XML Feed - RSS/ATOM für Version 4

Beitrag von M. Köhly »

Hallo semf!

Vielen Dank für Antwort, jetzt erscheint der komplette abgefragte String als fortlaufender Text. Das Header-Problem ist beseitigt! Danke.

Im Quelltext erkennt man weiterhin Absatzformatierungen, d.h. mir fehlt noch der richtige PHP-Befehl (oder die Funktion) um Zeilenumbrüche im ITEM-Text zu entfernen ... wie hieß der doch gleich noch?

Grüße
Köhly
Benutzeravatar
semf
Modul-Entwickler
Beiträge: 1853
Registriert: 01.01.1970 01:00
Wohnort: Gütersloh-Friedrichsdorf
Hat sich bedankt: 14 Mal
Danksagung erhalten: 40 Mal
Kontaktdaten:

Re: XML Feed - RSS/ATOM für Version 4

Beitrag von semf »

hallo köhly,

hilft das hier?

$del_tags = array('<br>','<BR>');

$itemtext= strip_tags(str_replace($del_tags, ' ', $itemtext));

Viel Erfolg!

Module ConPresso 4.x
Latest News
Tell-a-friend

Module ConPresso 3.4.x
Index_X
Kontakt
RSS-Feed
Umfrage
Gästebuch
Tell-a-Friend

Modul-Download
M. Köhly

Re: XML Feed - RSS/ATOM für Version 4

Beitrag von M. Köhly »

Hallo semf,

es hilft / half...
Der Befehl schloss einige Linebreaks aus dem Content aus... und beim Lesen und Nachprogrammieren der o.g. Lösungen fiel es doch wie Schuppen von den Augen:

Warum nicht die funktionierende Lösung für ConPresso 3.48 mit dem o.g. neuen SQL-String ($query=...) kombinieren und diese Lösung verwenden? Funktioniert einwandfrei, ist XML konform und bis auf die noch einzustellende Zeitvariable $jetzt voll betriebsfähig!

Quellcode erwünscht?

Vielen Dank für Deine Hilfe!
Benutzeravatar
semf
Modul-Entwickler
Beiträge: 1853
Registriert: 01.01.1970 01:00
Wohnort: Gütersloh-Friedrichsdorf
Hat sich bedankt: 14 Mal
Danksagung erhalten: 40 Mal
Kontaktdaten:

Re: XML Feed - RSS/ATOM für Version 4

Beitrag von semf »

hallo köhly,

welche funktionierende lösung aus 3.4.8 - das rss-feed-modul?

grundsätzlich bin ich am quellcode interessiert, da ich natürlich das rss-feed-modul auch in der 4er anbieten will. also wenn du den quelltext mal über hast!?

Viel Erfolg!

Module ConPresso 4.x
Latest News
Tell-a-friend

Module ConPresso 3.4.x
Index_X
Kontakt
RSS-Feed
Umfrage
Gästebuch
Tell-a-Friend

Modul-Download
Michael Köhly

Re: XML Feed - RSS/ATOM für Version 4

Beitrag von Michael Köhly »

Hallo semf,

sorry für die Tage der Abwesenheit ... hier der Code aus der Datei rss.php aus o.g. Modul, die Include-Datei ist aus dem originalen Paket unverändert übernommen worden. Damit sollte das RSS-Modul nach Eingabe der richtigen Tabellennamen (Prefix Conpresso) sofort laufen.

Bitte um Rückmeldung... ggf. um Korrektur der Zeitbegrenzungen im SQL-String, ich kam leider noch nicht dazu.
(Hoffe hier keinerlei Rechte zu mißachten!)

Herzliche Grüße

M. Köhly

+++++++ rss.php - schnipp +++++++++++++
<?php
function umlaute($text) {
$von = array(1 => "‰",2 => "¸",3 => "ˆ",4 => "?");
$nach = array( 1 =>"ae", 2 =>"ue", 3 =>"oe", 4 =>"ss");
$text = str_replace($von,$nach,$text);
return($text);
}

include 'class.RSSBuilder.inc';
define('CPO', true);

// if (file_exists("../_cfg/const.php")) require("../_cfg/const.php");else require("../_cfg/const.php.dist");
// if (file_exists("_include/common.inc.php")) require("_include/common.inc.php");else require("_include/common.inc.php.dist");
require_once('../_include/common.inc.php');

$myName = 'Anbieterinfo';
$ttl = "Newsfeed Anbieterinfo";
$des = "Newsfeed Anbieterinfo mit aktuellen Nachrichten";
$basedir = "http://www.URL.de/CPOBASE/";
$site = "http://www.URL.de";
$bld = date ("r");
$lang = "de";
$count = 15;
$jetzt = time();

/* ALTER SQL STRING
$query = "";
$query.= "SELECT nr, rubric_id, titel, commentary, pub_datum, seclevel ";
$query.= "FROM conpresso4_news, conpresso4_rubric ";
$query.= "WHERE conpresso4_news.rubric_id = '1' and seclevel=0 "; // rubric 1 = news
$query.= "AND artikel_archiv < 1 ";
$query.= "AND freigabe = 0 ";
$query.= "AND pub_datum < '".$jetzt."' ";
$query.= "AND verfallsdatum > '".$jetzt."' ";
$query.= "ORDER BY pub_datum DESC LIMIT 0,".$count."";
*/
$query = "";
$query.= "SELECT ";
$query.= "conpresso4_news.nr, conpresso4_news.artikel_archiv, conpresso4_news.article_nr, ";
$query.= "conpresso4_news.commentary, conpresso4_news.rubric_id, conpresso4_news.titel, ";
$query.= "conpresso4_news.datum, conpresso4_news.verfallsdatum, conpresso4_news.freigabe, ";
$query.= "conpresso4_rubric.id, conpresso4_rubric.directory, conpresso4_rubric.seclevel, ";
$query.= "conpresso4_content_html.article_id, conpresso4_content_html.fieldname, ";
$query.= "conpresso4_content_html.html ";
$query.= "FROM conpresso4_news ";
$query.= "INNER JOIN conpresso4_rubric ON (conpresso4_news.rubric_id = conpresso4_rubric.id) ";
$query.= "INNER JOIN conpresso4_content_html ON (conpresso4_news.article_nr = conpresso4_content_html.article_id) ";
$query.= "WHERE freigabe = 0 ";
$query.= "AND rubric_id = '1' ";
$query.= "AND artikel_archiv < 1 ";
$query.= "AND seclevel = 0 ";
$query.= "AND fieldname = 'Teaser' ";
// ACHTUNG ZEITFUNKTIONEN ERZEUGEN NOCH FEHLER ...
// $query.= "AND pub_datum < '".$jetzt."' ";
// $query.= "AND verfallsdatum > '".$jetzt."' ";
$query.= "ORDER BY pub_datum DESC LIMIT 0,".$count."";


$db = new DB;
$db->query($query);

$encoding =(string) 'ISO-8859-1';
$about = (string) $site;
$title = (string) 'RSS XML-Feed Anbieterinfo';
$description = (string) $des;
$image_link = (string) 'http://www.URL.de/CPOBASE/images/rss-xml.png';
$category = (string) '';
$cache = (string) 60;
$rssfile = new RSSBuilder($encoding, $about, $title, $description, $image_link, $category, $cache);

$publisher = (string) $myName;
$creator = (string) '';
$date = '';//(string) $bld;
$language = '';//(string) $lang;
$rights = '';//(string) 'Copyright © '.date("Y").', '.$myName;
$coverage = (string) '';
$contributor = (string) $myName;
$rssfile->addDCdata($publisher, $creator, $date, $language, $rights, $coverage, $contributor);
/*
$period = (string) 'hourly';
$frequency = (int) 1;
$base = (string) $bld;
$rssfile->addSYdata($period, $frequency, $base);
*/
while($db->next_record()):

$dbnr = $db->v("nr");
// $dbrubric = $db->v("rubric_id");
$dbrubric = $db->v("directory");
$dbtitel = umlaute ($db->v("titel"));
$dbkommentar = umlaute ($db->v("commentary"));
//$dbpubdatum = date ("r", $db->v("pub_datum"));
$dbpubdatum = date ("D d M Y G:i:s O", $db->v("pub_datum"));

// HIER WERDEN ALLE MÖGLICHEN ZEICHEN AUS DEM HTML-ARTIKEL ENTFERNT
$itemtext = $db->v("html");
$itemtext = html_entity_decode($itemtext);
$itemtext = htmlspecialchars($itemtext);
$itemtext = umlaute($itemtext);
$itemtext = stripslashes($itemtext);
$del_tags = array('<br>','<BR>');
$itemtext = strip_tags(str_replace($del_tags, ' ', $itemtext));
$dbhtml = $itemtext ;

$about = $link = $basedir.$dbrubric.'/detail.php?nr='.$dbnr;
$title = (string) $dbtitel;
if (!$dbkommentar) {
if (!$dbhtml) {
$description = (string) $dbtitel;
} else {
$description= (string) $dbhtml;
}
} else {
$description = (string) $dbkommentar;
}
$subject = (string) '';
$date = (string) $dbpubdatum;
$author = (string) $myName;
$comments = '';
$image = (string) '';
$rssfile->addItem($about, $title, $link, $description, $subject, $date, $author, $comments, $image);

endwhile;

$version = '2.0';
$rssfile->outputRSS($version);

?>
+++++++++++ schnapp ++++++++++++

Antworten