Alex: RSS-Einbau

Hallo zusammen,
ich habe mal eine Frage zu folgendem Script:

<html>
<head>
<title>abcdefg</title>
</head>
<body>
Warum klappt es nicht?<br>

<?php
require_once('rss_fetch.inc');
$url = 'http://www.heise.de/open/news/news.rdf';
$rss = fetch_rss($url);
echo "<p>", $rss->channel['title'], "</p>";
echo "<p><ul>";
foreach ($rss->items as $item) {
$title = $item[title];
$link = $item[link];
$desc = $item[description];
echo "<li><p><a href=$link>$title</a><br>$desc</p></li>\n";
}
echo "</ul></p>";
?>

</body>
</html>

Ich habe Magpie RSS als Parser genommen und die Schreibrechte des RSS sowie des Cache-Verzeichnisses auf chmod 777 gesetzt. Trotzallem bekomme ich folgende Ausgabe:

Warum klappt es nicht?
", $rss->channel['title'], ""; echo "

* "; foreach ($rss->items as $item) { $title = $item[title]; $link = $item[link]; $desc = $item[description]; echo "

$title
      $desc
      \n"; } echo "

"; ?>

Kann mir da jemand in "allgemeinverständlicher" Form weiterhelfen?
Vielen Dank vorab,
Alex

  1. Lieber Alex,

    Warum klappt es nicht?<br>
    <?php
    echo "<p>", $rss->channel['title'], "</p>";

    wenn Du Zeichenketten (Strings) miteinander verknüpfen möchtest, anstatt für jeden String eine eigene echo-Anweisung schreiben zu müssen, dann solltest Du den dazu nötigen Operator kennen.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. echo $begrüßung;

      echo "<p>", $rss->channel['title'], "</p>";

      wenn Du Zeichenketten (Strings) miteinander verknüpfen möchtest, anstatt für jeden String eine eigene echo-Anweisung schreiben zu müssen, dann solltest Du den dazu nötigen Operator kennen.

      Ja, kann man nehmen, muss man aber nicht. echo kann man mehrere mit Komma getrennte Ausdrücke übergeben. Dann gibt echo die Ergebnisse der Ausdrücke einzeln und nacheinander aus, anstatt erst temporär einen großen String daraus zu erzeugen und den dann auszugeben.

      echo "$verabschiedung $name";

  2. Hallo,

    beim Problem um PHP halte ich mich als PHP-Unkundiger besser zurück, dafür zwei kleinere andere Anmerkungen:

    Zum einen wird Dein generiertes HTML invalide, eine Struktur wie /p/ul/li/p ist schon nicht erlaubt, weil das p-Element keine anderen Blockelemente wie ul oder auch p selber enthalten darf.

    Zum anderen:

    $url = 'http://www.heise.de/open/news/news.rdf';

    Heise ist berüchtigt dafür, dass sie aus was für Gründen auch immer den ältesten Dialekt von RSS benutzen, den es gibt, Netscape RDF-RSS 0.9. Dieser Dialekt ist nur für die Übermittlung  vonVerweisen, sprich Links und Link-Titeln gedacht, mehr Daten zu Einträgen (items) im Feed gibt es nicht. Also auch kein Description-Element. Heise bietet auch keines an.

    $desc = $item[description];
    echo "<li><p><a href=$link>$title</a><br>$desc</p></li>\n";

    Es lohnt sich also gar nicht, nach $item[description] zu fragen, weil Magpie dieses im Feed gar nicht finden kann. Eventuell willst Du da selber eine Fehlerbehandlung schreiben, damit es im generierten HTML-Quellcode nicht zu unschönen Fehlern kommt.

    Tim

  3. echo $begrüßung;

    require_once('rss_fetch.inc');
    Kann mir da jemand in "allgemeinverständlicher" Form weiterhelfen?

    Ohne den Inhalt der rss_fetch.inc zu kennen, kann das vermutlich niemand. Ich nehme an, der Fehler liegt darin. Ich habe versucht, ihn nachzustellen, was mir aber nicht gelang.

    Vielleicht kommst du selbst drauf, wenn du einen Editor mit Syntax-Unterstützung verwendetest. Da sieht man oft recht schnell, wenn z.B. eine Zeichenkette nicht abgeschlossen wurde.

    Außerdem:

    ... $item[title] ...

    Array do's and don'ts - Why is $foo[bar wrong?]

    Es ist immer empfehlenswert, beim Entwickeln das error_reporting auf E_ALL zu setzen und die Ursachen der dadurch angezeigten Notiz-Meldungen zu beseitigen.

    echo "$verabschiedung $name";