Willkommen in der Webstatt Zum Webstatt Blog und Stories
hochitom am 17.09.07 22:02

Ich möchte jetzt auf meiner Seite ein RSS-Feed einbauen welches mir die Einträge automatisch aus der DB ausliest. Leider habe ich 0 Ahnung wie man so was macht. VL hat ja jemand oder kennt so ein Script, welches ich nur noch anpassen muss. Dass wäre super!

MFG

netcup.de Warum gibt es hier Werbung?
Pyth0n Pyth0n am 17.09.07 22:29

Ich weiss zwar nicht mehr von wo ich es habe, aber das wird dir bestimmt helfen. War auf so einer Hilfeseite für Webmaster. ;)

Gruß, Pyth0n :)

PHP: RSS-Feed für die eigene Website erstellen
Geschrieben am Friday, 05.November.2004 @ 14:49:00 CET

Die folgende Funktion erzeugt aus einer Datenbank dynamisch ein RSS-Feed mit der Endung .xml.
function mkRSS () {
////KONFIGURATION (diese Variablen müssen angepasst werden):
$dbServer = "localhost"; //database server (meist localhost)
$dbName = "myDB"; //name of database
$dbUser = "me"; // user name
$dbPassword="myPassword"; // user password
$tableName="myTable"; // Tabellenname der Tab., aus der die Daten entnommen werden
$lines="10"; // Anzahl anzuzeigender Datensätze
$filename="myFile"; //ohne Extension
$title="z.B. Name der Website myDomain.de"; //Titel des RSS-Feeds
$description="Die ".$lines." besten Links"; //Was zeigt das RSS-Feed?
$language="de"; //Sprachkürzel
$link="http://www.mydomain.de/links.html"; //Link
$itemTitle="..."; //Spaltenname aus der DB, wo der Titel des einzelnen Items steht
$itemText="..."; //Spaltenname aus der DB, wo der Text des einzelnen Items steht

//das SQL-Statement muss an die eigenen Erfordernisse angepasst werden
$sql="SELECT * FROM ".$tableName." Where ... ORDER BY ... DESC/ASC LIMIT 0,$lines";

//Bitte beachten, dass in der Zeile 45 noch die Variable $itemLink angepasst werden muss.
////ENDE KONFIGURATION

//DOCUMENT_ROOT wird automatisch ermittelt
$siteRoot= substr_replace ($_SERVER[DOCUMENT_ROOT].$_SERVER["PHP_SELF"],
"",strrpos ($_SERVER[DOCUMENT_ROOT].$_SERVER["PHP_SELF"], "/")+1);

//Erzeugen des RSS-Inhaltes:
$rssHeader="<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="0.91">
<channel>
<title>".$title."</title>
<description>".$description."</description>
<language>".$language."</language>
<link>$link</link>
";
$rssFooter="</channel>
</rss>";
$dbLink = mysql_connect ($dbServer,$dbUser,$dbPassword) or die (mysql_error());
$setdb = mysql_select_db($dbName,$dbLink) or die (mysql_error());
$result=mysql_query($sql,$dbLink) or die(mysql_error());
$content=$rssHeader;
while($row=mysql_fetch_array($result)){
$titel=substr ($row[$itemTitle], 0, 150); //$row anpassen! auch in der nächsten Zeile
$text=substr ($row[$itemText], 0, 500); //der Text darf höchstens 500 Zeichen lang sein
$itemLink="..."; //dies ist ein Link, der DIREKT diesen Punkt auf der Homepage öffnet.
//Er muss entsprechend deines Scripts dynamisch gebildet werden.
$content.="<item>
<title>".$titel."</title>
<description>".$text."</description>
<link>".$itemLink."</link>
</item>
";
}
$content.=$rssFooter;

//file wird geschrieben
$fh=fopen ($siteRoot.$filename.".rss", "w");
fputs ( $fh, $content);
fclose($fh);

//file wird umbenannt
rename ($siteRoot.$filename.".rss", $siteRoot.$filename.".xml");
return;
}

Rene Rene am 17.09.07 22:34

Kleine Anmerkung:
Ich denke mal, das ist die Quelle von dem Script:
http://www.nak-webmaster.de/modules.php?name=News&file=article&sid=99

Pyth0n Pyth0n am 17.09.07 23:24

Quote
Original von Rene
Kleine Anmerkung:
Ich denke mal, das ist die Quelle von dem Script:
http://www.nak-webmaster.de/modules.php?name=News&file=article&sid=99


:D Bingo genau die Seite meinte ich. Danke, Rene!
Gruß, Pyth0n :)

hochitom am 18.09.07 13:35

danke für das Script. Aber kaönnt ihr mir noch ein paar tipps geben.

Wie muss ich das Script beginnen. Mit <?php ?> oder und welche dateiendung muss ich angeben? Zur Zeit läuft dass Script bis zur Zeile 46, und dann kommt folgende Fehlermeldung:

Quote

XML-Verarbeitungsfehler: nicht wohlgeformt
Adresse: http://www.svakindberg.at/web-site/rss-feed.xml
Zeile Nr. 46, Spalte 18: $itemLink="?content=news&submenue=home&ID=1"; //di
-----------------^

nuit nuit am 18.09.07 14:15

Zum ersten:
Ein Script beginnt mit <?php und endet mit ?>
das was da oben steht, diese ersten beiden Zeilen, entweder askommentieren, also ein # oder ein // davor schreiben, oder gleich weglassen
dann...ein php script hat normalerweise die endung .php früher .php3 geht inzwischen auch .php5? (frage an die runde)
noja .php geht immer ;) wenn es php ist

noja und uzm zweiten:
das ist kein php fehler, das ist ein xml fehler ;)

das link an dem link....mhhh....macht das htmlentities? das problem ist, dass das & nicht ok ist, der will ein &amp;
noja...htmlentities müsste das problem beheben

Ab Zeile 32:
$rssHeader="<?xml version='1.0' encoding='ISO-8859-1'?>
<rss version='0.91'>
<channel>
<title>".htmlentities($title)."</title>
<description>".htmlentities($description)."</description>
<language>".htmlentities($language)."</language>
<link>".htmlentities($link)."</link>
";


Ab Zeile 51:
$content.="<item>
<title>".htmlentities($titel)."</title>
<description>".htmlentities($text)."</description>
<link>".htmlentities($itemLink)."</link>
</item>
";

hochitom am 18.09.07 16:48

Also, ich hab jetzt die Datei, rss-feed.php wie folgt gemacht:

<?php
function mkRSS () {
////KONFIGURATION (diese Variablen müssen angepasst werden):
$dbServer = "localhost"; //database server (meist localhost)
$dbName = "lautnerhsql1"; //name of database
$dbUser = "lautnerhsql1"; // user name
$dbPassword="***"; // user password
$tableName="home"; // Tabellenname der Tab., aus der die Daten entnommen werden
$lines="10"; // Anzahl anzuzeigender Datensätze
$filename="rss-feed"; //ohne Extension
$title="SVAK Newsfeed"; //Titel des RSS-Feeds
$description="Aktuelle SVAK News!"; //Was zeigt das RSS-Feed?
$language="de"; //Sprachkürzel
$link="http://www.svakindberg.at/web-site/rss.html"; //Link
$itemTitle="News"; //Spaltenname aus der DB, wo der Titel des einzelnen Items steht
$itemText="News"; //Spaltenname aus der DB, wo der Text des einzelnen Items steht

//das SQL-Statement muss an die eigenen Erfordernisse angepasst werden
$sql="SELECT * FROM ".$tableName." ORDER BY id DESC LIMIT 0,$lines";

//Bitte beachten, dass in der Zeile 45 noch die Variable $itemLink angepasst werden muss.
////ENDE KONFIGURATION

//DOCUMENT_ROOT wird automatisch ermittelt
$siteRoot= substr_replace ($_SERVER[DOCUMENT_ROOT].$_SERVER["PHP_SELF"],
"",strrpos ($_SERVER[DOCUMENT_ROOT].$_SERVER["PHP_SELF"], "/")+1);

//Erzeugen des RSS-Inhaltes:
$rssHeader="<?xml version='1.0' encoding='ISO-8859-1'?>
<rss version='0.91'>
<channel>
<title>".htmlentities($title)."</title>
<description>".htmlentities($description)."</description>
<language>".htmlentities($language)."</language>
<link>".htmlentities($link)."</link>
";
$rssFooter="</channel>
</rss>";
$dbLink = mysql_connect ($dbServer,$dbUser,$dbPassword) or die (mysql_error());
$setdb = mysql_select_db($dbName,$dbLink) or die (mysql_error());
$result=mysql_query($sql,$dbLink) or die(mysql_error());
$content=$rssHeader;
while($row=mysql_fetch_array($result)){
$titel=substr ($row[$itemTitle], 0, 150); //$row anpassen! auch in der nächsten Zeile
$text=substr ($row[$itemText], 0, 500); //der Text darf höchstens 500 Zeichen lang sein
$itemLink="?content=news&submenue=home&ID=1"; //di
$content.="<item>
<title>".htmlentities($titel)."</title>
<description>".htmlentities($text)."</description>
<link>".htmlentities($itemLink)."</link>
</item>
";
}
$content.=$rssFooter;

//file wird geschrieben
$fh=fopen ($siteRoot.$filename.".rss", "w");
fputs ( $fh, $content);
fclose($fh);

//file wird umbenannt
rename ($siteRoot.$filename.".rss", $siteRoot.$filename.".xml");
return;
}
?>


Jedoch ist mir nicht klar, was ich in Zeile 15 und 47 hineinschreiben muss, und wie dass mit der externen Datei funktioniert, welche erstellt werden soll.

Könnte mir das wer erklären?

der_nic der_nic am 18.09.07 17:12

In Zeile 15 musst du den Pfad zu deiner XML Datei angeben, also der Ort wo deine Datei später hineingeschriben wird. (Siehe unten bei fopen() )

In Zeile 47 gibst du den Link zu deiner Nachricht an, also dort wo man die gesamte Nachricht etc. lesen kann.

In den Zeilen 58 bis 60 wird die externe Datei erstellt und mit dem Inhalt beschrieben - automatisch. Du musst nichts mehr tun ausser dieses Script aufrufen und die XML Datei in deine Webseite einbinden

hochitom am 18.09.07 18:11

Ich bin anscheinend zu blöd dafür.

Also, ich habe jetzt den Code, in die Seite index.php geschrieben und mit der Datei rss-feed.xml verlinkt.

aber, es passiert nichts.

???

der_nic der_nic am 18.09.07 21:54

Was erwartest du denn, was passieren soll?

hochitom am 19.09.07 08:57

es wird diese Datei nicht erstellt!

der_nic der_nic am 19.09.07 10:37

Fehlermeldungen, Warungen, etc?

nuit nuit am 19.09.07 12:39

wahrscheinlich hat das script nicht die rechte diese Datei zu erstellen ;) check mal deine chmods

hochitom am 19.09.07 17:10

chmod hab ich jetzt, auf 777 gestellt, hat sich aber noch nichts geändert.

Ich schreib euch jetzt nochmal alles auf. Vl hab ich einfach was falsch verstanden!

Ich habe das oben gepostete Script, in die Datei index.php included und dann, habe ich die Datei rss-feed.xml im Head Bereich verlinkt.

Hier der betroffene Code:

<?php
include ('../connect.php');

function mkRSS () {
////KONFIGURATION (diese Variablen müssen angepasst werden):
$dbServer = "localhost"; //database server (meist localhost)
$dbName = "xxx"; //name of database
$dbUser = "xxx"; // user name
$dbPassword="xxx"; // user password
$tableName="home"; // Tabellenname der Tab., aus der die Daten entnommen werden
$lines="10"; // Anzahl anzuzeigender Datensätze
$filename="rss-feed"; //ohne Extension
$title="SVAK Newsfeed"; //Titel des RSS-Feeds
$description="Aktuelle SVAK News!"; //Was zeigt das RSS-Feed?
$language="de"; //Sprachkürzel
$link="http://www.svakindberg.at/web-site/rss-feed.xml"; //Link
$itemTitle="headline"; //Spaltenname aus der DB, wo der Titel des einzelnen Items steht
$itemText="beschreibung"; //Spaltenname aus der DB, wo der Text des einzelnen Items steht

//das SQL-Statement muss an die eigenen Erfordernisse angepasst werden
$sql="SELECT * FROM ".$tableName." ORDER BY id DESC LIMIT 0,$lines";

//Bitte beachten, dass in der Zeile 45 noch die Variable $itemLink angepasst werden muss.
////ENDE KONFIGURATION

//DOCUMENT_ROOT wird automatisch ermittelt
$siteRoot= substr_replace ($_SERVER[DOCUMENT_ROOT].$_SERVER["PHP_SELF"],
"",strrpos ($_SERVER[DOCUMENT_ROOT].$_SERVER["PHP_SELF"], "/")+1);

//Erzeugen des RSS-Inhaltes:
$rssHeader="<?xml version='1.0' encoding='ISO-8859-1'?>
<rss version='0.91'>
<channel>
<title>".htmlentities($title)."</title>
<description>".htmlentities($description)."</description>
<language>".htmlentities($language)."</language>
<link>".htmlentities($link)."</link>
";
$rssFooter="</channel>
</rss>";
$dbLink = mysql_connect ($dbServer,$dbUser,$dbPassword) or die (mysql_error());
$setdb = mysql_select_db($dbName,$dbLink) or die (mysql_error());
$result=mysql_query($sql,$dbLink) or die(mysql_error());
$content=$rssHeader;
while($row=mysql_fetch_array($result)){
$titel=substr ($row[$itemTitle], 0, 150); //$row anpassen! auch in der nächsten Zeile
$text=substr ($row[$itemText], 0, 500); //der Text darf höchstens 500 Zeichen lang sein
$itemLink="?content=news&submenue=home&ID=1"; //di
$content.="<item>
<title>".htmlentities($titel)."</title>
<description>".htmlentities($text)."</description>
<link>".htmlentities($itemLink)."</link>
</item>
";
}
$content.=$rssFooter;

//file wird geschrieben
$fh=fopen ($siteRoot.$filename.".rss", "w");
fputs ( $fh, $content);
fclose($fh);

//file wird umbenannt
rename ($siteRoot.$filename.".rss", $siteRoot.$filename.".xml");
return;
}
?>
<html>
<head>
<title>SVA - Die Steierm&auml;rkische - VOEST Alpine - Kindberg - Web-Site - www.svakindberg.at</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="style.css" type="text/css" rel="stylesheet">
<link href="rss-feed.xml" rel="alternate" type="application/rss+xml" title="SVAK Newsfeed!">
<style type="text/css">
body {background-image:url(Bilder/svakindberg_02.jpg); background-repeat:repeat-x; background-color: #EBEBEB; font-family:Verdana, Arial, Helvetica, sans-serif;}
</style>
</head>

der_nic der_nic am 19.09.07 17:33

1. Zensier dein mySQL Passwort
2. Das Script musst du nicht in die index-Datei einbinden, es reicht wenn die Datei aufgefrufen wird, wenn eine neue News veröffentlicht wurde.
3. mach mal error_reporting(E_ALL); ganz an den Anfang, direkt nach <?php

danieL danieL am 19.09.07 17:35

Hab das ganze mal zensiert.

hochitom am 19.09.07 20:02

jo, danke, hab ich total vergessen.

mhm, kann es sein dass ich einfach eine zu schwache php version hab?

Is das normal, dass beim erroreport nichts passiert?

der_nic der_nic am 19.09.07 21:38

Quote
Original von hochitom
mhm, kann es sein dass ich einfach eine zu schwache php version hab?

Mh... gibt ihm mal ein paar Aufbauvitamine? *SCNR*

hast du das ganze irgendwo online zum anschauen?

hochitom am 19.09.07 21:46

meinst du die seite?

http://www.svakindberg.at/web-site/rss-test.php

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt