Texte -> RSS-Feed

martinibook

Aktives Mitglied
Thread Starter
Dabei seit
20.08.2005
Beiträge
8.730
Reaktionspunkte
350
Hallo,

Ich habe ein CMS, in dem man Texte bearbeiten kann.

Ich würde gerne frisch bearbeitete Texte in einen RSS-Feed schreiben, damit man sich über die neuen Änderungen informieren kann.

Ist das schwer oder lässt sich das mit PHP recht einfach umsetzen?

Martin
 
Vielen Dank,

Allerdings habe ich noch versucht neue Zeilen da reinzubauen, ich habe das mit
PHP:
fwrite($h, '<description>' . $l['besch']);
fwrite($h, '<br>Datum: ' . date("d.n.y G:i", $l['zeit']));
fwrite($h,' </description>' . "\n");

Versucht, allerdings wird in Safari nur das angezeigt:

Code:
Ende des 1.HalbjahrsDatum: 19.1.07 10:25

Was mache ich da falsch?
 
Das einfach mit einer neuen Zeile da drin, damit man den Termintitel von der Uhrzeit trennen kann.

Martin
 
Wird von Safari geblockt, Wikipeda gab mir das hier an die Hand:
<description>
<![CDATA[
<h1>Hier kann auch der vollständige HTML-Inhalt
des Artikels stehen</h1>
<p>…</p>
]]>
</description>

Jetzt klappt es, mit diesem CDATA.

Martin
 
Jetzt sieht es so aus, wie kann ich denn das graue Datum da noch verändern, das kommt ja von Safari irgendwie.

attachment.php


Martin
 

Anhänge

  • safari.png
    safari.png
    14,2 KB · Aufrufe: 173
Okay, ich habe es jetzt geschafft, mit folgender Zeile:
PHP:
fwrite($h, '<pubDate>' . date("D, d M Y H:i:s", $l['zeit']) . ' CET</pubDate>');
 
@martinibook:
Ich bin schon seit einiger Zeit auf der Suche nach einem solchen PHP-Skript. Kannst du mir deines zur Verfügung stellen? Das wäre nett. :)
 
Hi,

der <pubDate>-Eintrag geht in PHP viel einfacher mit date("r", $zeit); ;).

cu
 
@Bastian: Du meinst also ein Skript, dass aus Terminen einer Datenbank einen RSS-Feed macht?

Wenn ja dann könnte das für dich brauchbar sein:

PHP:
<?PHP
include('mysqllogin.php');

$h = fopen('termine.xml', 'w');

fwrite($h, '<?xml version="1.0" encoding="ISO-8859-1" ?>' . "\n");
fwrite($h, '<rss version="0.91">' . "\n");
fwrite($h, '<channel>' . "\n");
fwrite($h, '<title>TITEL</title>' . "\n");
fwrite($h, '<link>URL</link>' . "\n");
fwrite($h, '<description>BESCHREIBUNG</description>' . "\n");
fwrite($h, '<language>de-de</language>' . "\n");
fwrite($h, '<copyright>COPYRIGHT</copyright>' . "\n");
fwrite($h, '<image>' . "\n");
fwrite($h, '<url>URL/logo.gif</url>' . "\n");
fwrite($h, '<link>URL</link>' . "\n");
fwrite($h, '</image>' . "\n");

$sql = 'SELECT * FROM termine WHERE zeit > ' . time() . ' ORDER BY zeit';
$erg = mysql_query($sql, $dbh);
while ($l = mysql_fetch_assoc($erg))
	{
	fwrite($h, '<item>' . "\n");
	fwrite($h, '<title>' . $l['kurz'] . '</title>' . "\n");
	fwrite($h, '<description><![CDATA[' . $l['besch']);
	fwrite($h, '<br />Datum: ' . date("d.n.y G:i", $l['zeit']));
	if ($l['ort'])
		fwrite($h, '<br />Ort: ' . $l['ort']); 
	fwrite($h, '<br />]]></description>' . "\n");
	fwrite($h, '<link>termin.php?id=' . $l['id'] . '</link>' . "\n");
	fwrite($h, '<pubDate>' . date("D, d M Y H:i:s", $l['zeit']) . ' CET</pubDate>');
	fwrite($h, '</item>' . "\n");
	}

fwrite($h, '</channel>' . "\n");
fwrite($h, '</rss>' . "\n");

fclose($h);
?>

Martin
 
Danke für den Code. Ich hab das nun mal ausprobiert. Leider hat es nicht geklappt, auch nicht, nachdem ich diverse Anpassungen vorgenommen habe.

Mittlerweile sieht mein Skript so aus (es wird ausgeführt, sobald ein neuer Eintrag in die Datenbank erfolgt):

Code:
$datei = "../scripts/feed.xml";
				
	if (is_writable($datei)) {
				
		if (!$handler = fopen($datei, 'w')) {
					
			$feedback .= "<p>&nbsp;</p><p class='feedback0'>Die Feed-Datei kann nicht ge&ouffnet werden!</p>";
			exit;
					
		}
		
		$inhalt .= '<?xml version="1.0" encoding="ISO-8859-1" ?>' . "\n"; 
		$inhalt .= '<rss version="0.91">' . "\n"; 
		$inhalt .= '<channel>' . "\n"; 
		$inhalt .= '<title>TITEL</title>' . "\n"; 
		$inhalt .= '<link>URL</link>' . "\n"; 
		$inhalt .= '<description>BESCHREIBUNG</description>' . "\n"; 
		$inhalt .= '<language>de-de</language>' . "\n"; 
		$inhalt .= '<copyright>COPYRIGHT</copyright>' . "\n"; 
		$inhalt .= '<image>' . "\n"; 
		$inhalt .= '<url>URL</url>' . "\n"; 
		$inhalt .= '<link>URL</link>' . "\n"; 
		$inhalt .= '</image>' . "\n"; 
					
		$abfrage = 'SELECT * FROM TABELLE ORDER BY datum DESC'; 
		$ergebnis = mysql_db_query($db, $abfrage, $db_verbindung); 
					
		while ($reihe = mysql_fetch_array($ergebnis)) {
					 
			$inhalt .= '<item>' . "\n"; 
			$inhalt .= '<title>' . $reihe['titel'] . '</title>' . "\n"; 
			$inhalt .= '<description><![CDATA[' . $reihe['text']; 
			$inhalt .= '<br />Datum: ' . date("d.m.Y, H:i", $reihe['datum']); 
			$inhalt .= '<br />]]></description>' . "\n"; 
			$inhalt .= '<link>../blog.php?nid=' . $reihe['nid'] . '</link>' . "\n"; 
			$inhalt .= '<pubDate>' . date("D, d M Y H:i:s", $reihe['datum']) . ' CET</pubDate>'; 
			$inhalt .= '</item>' . "\n"; 
							
		} 
					
		$inhalt .= '</channel>' . "\n"; 
		$inhalt .= '</rss>' . "\n"; 
				
		if (!fwrite($handler, $inhalt)) {
					
			$feedback .= "<p>&nbsp;</p><p class='feedback0'>Kann nicht in die Feed-Datei schreiben!</p>";
			exit;
					
		} 
					
		fclose($handler); 
				
	} else {
				
		$feedback .= "<p>&nbsp;</p><p class='feedback0'>Die Feed-Datei ist nicht beschreibbar!</p>";
				
	}
										
	echo $feedback;

Die Feed-Datei bleibt immer leer. Was stimmt denn da nicht? :(
 
Also bei mir schreibt er (bis auf das Sql-Statement, da ich ja deine DB nicht hab). Wenn es am Schreiben liegt, dann sollte eine Fehlermeldung kommen.

Du überprüfst nicht, ob von der Datenbank was sinnvolles zurückkommt. Oder ob die Datenbankverbindung überhaupt klappt.

Ausserdem würde ich mysql_db_query nicht verwenden, die Referenz schreibt dazu
Code:
Changelog Version: 4.0.6 - This function is deprecated, do not use this function. Use mysql_select_db() and mysql_query() instead.
D.h. du verwendest eine Funktion, die man nicht mehr verwenden sollte. 4.0.6, wart mal, das war vor vier oder fünf Jahren... ;)
 
martinibook schrieb:
Ich habe MySQL 5.0.18-standard

Das hat nix mit der MySql-Version zu tun sondern mit der PHP-Version. Funktionen die Deprecated sind, sollte man vorsorglich nicht mehr verwenden, denn es kann schnell gehen und die Funktion gibts aufeinmal nimmer in einer neuen PHP-Version und dann kannst du mühsahm den Code umschreiben.
 
@goddess
Danke für den Query-Hinweis. Werde dann wohl aaaaalle meine Skripte mal anpassen müssen...

Ach, und nun hat es doch noch funktioniert. Fragt mich jetzt aber nicht weshalb. :)
 
Zurück
Oben Unten