Roland: RSS aus PHP-Datei?

Hi!

Ist es erlaubt mit Hilfe einer PHP-Datei einen RSS-Feed erzeugen zu lassen?

Danke
Roland

  1. Moin!

    Ist es erlaubt mit Hilfe einer PHP-Datei einen RSS-Feed erzeugen zu lassen?

    Ja.

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
    1. Hi!

      Was stimmt dann nicht wenn ich eine Datei namens "news.php" habe, die folgenden Code beinhaltet?

        
       <?xml version="1.0" encoding="ISO-8859-1"?>  
      <?xml-stylesheet href="rss.css" type="text/css" media="screen"?>  
      <rss version="2.0">  
        
        <channel>  
          <title>Rolands News-Feed</title>  
          <link>www.rolandschuetz.at.tt</link>  
          <description>]erklaerungstext]</description>  
          <language>at-de</language>  
          <copyright>copyright 2006 Roland Sch&uuml;tz. All rights reserved</copyright>  
          <pubDate>17.09.06</pubDate>  
          <image>  
            <url>[image-link]</url>  
            <title>Rolands News-Feed</title>  
            <link>www.rolandschuetz.at.tt<link>  
          </image>  
        
        
          <item>  
            <title>[Titel]</title>  
            <description>[Erklaerung]</description>  
            <link>http://www.avant.at/rolandschuetzfun-archiv.php?show=1</link>  
            <author>Roland Sch&uuml;tz &lt;[eimailadresse]&gt;</author>  
          </item>  </channel>  
        
      </rss>  
      
      

      Danke
      Roland

      1. Moin!

        Hi!

        Was stimmt dann nicht wenn ich eine Datei namens "news.php" habe, die folgenden Code beinhaltet?

        <?xml version="1.0" encoding="ISO-8859-1"?>

          
        Womöglich sind shport-tags in der php.ini aktiviert.  
        Hilfe:  
        1) abstellen  
          
        oder  
          
        
        > ~~~html
          
        
        >  <?php echo '<?xml version="1.0" encoding="ISO-8859-1"?>'; ?>  
        > 
        
        

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
        1. Ich geb das die ganze Zeit schon mit dem echo-befehl aus, aber das Hilft nix...

          lg
          Roland

      2. Was stimmt dann nicht wenn ich eine Datei namens "news.php" habe, die folgenden Code beinhaltet?

        Du solltest auch den folgenden header senden:
        <?php header('Content-type: application/rss+xml'); ?>

        Gruß
        Philipp

        1. Das hatte ich nicht, aber es ändert leider auch nichts, seitdem ich den header habe kann ich die datei im firefox gar nicht mehr öffnen (=> es kommt ein Download-Fenster und Thunderbird meint noch immer das es ein ungültiger RSS-Feed ist, aber warum?

          Danke
          Roland

          1. also mit

              
            <?php header('Content-type: application/xml'); ?>  
            
            

            funktionierts!

            Wäre das eh Standardkonform?

            Danke
            Roland

            1. Hallo,

              <?php header('Content-type: application/xml'); ?>
              Wäre das eh Standardkonform?

              Jain.

              Streng genommen ist das standardkonform, RSS ist ein XML-Format, also greift dieser allgemeine MIME Media Typ für XML.

              Allerdings wird application/rss+xml schon seit Ewigkeiten für RSS in all seinen Variationen genutzt. application/rss+xml ist zwar nicht als offizieller MIME Media Typ bei der IANA registriert, trotzdem kennt und nutzt ihn aber so ziemlich jede professionelle RSS verarbeitende Software, bei RSS Autodiscovery in HTML wird er sogar benötigt. Und .. es ist ein Ersuchen in Anmarsch, nach fünf Jahren Nutzung diesen Media Typ endlich offiziell zu machen. Sprich: Es spricht nichts dagegen, diesen zu verwenden.

              Dass es bei Dir nicht mit application/rss+xml funktionierte, kann ich mir irgendwie nicht vorstellen – schließlich funktioniert es überall sonst im Rest des Webs – auch mit Thunderbird. Ich kann Dir nur noch mal ans Herz legen, Deinen Feed im Feed Validator zu validieren. Ich denke ja eher, dass sich Thunderbird an den Fehlern in den link- und pubDate-Elementen verschluckte.

              Tim

      3. Hallo,

        Ein paar Hinweise auf Fehler und Warnungen in Deinem Feed:

        <?xml version="1.0" encoding="ISO-8859-1"?>

        Die Angabe der Kodierung ist bei XML nur nötig, wenn das XML auch tatsächlich in ISO 8859-1 kodiert ist. Ist es das? Ich glaube bei PHP ist das der Default.

        <channel>
            ...
            <link>www.rolandschuetz.at.tt</link>

        Das ist keine richtige URI. Die richtige URI würde mit "http://" beginnen.

        <description>]erklaerungstext]</description>

        Sind diese eckigen Klammern ein Feature von PHP, das ich noch nicht kenne?

        <language>at-de</language>

        Der richtige Language Code für Deutsch österreichischer Prägung wäre "de-at".

        <pubDate>17.09.06</pubDate>

        Das ist kein in RSS 2.0 erlaubtes Datumsformat. Das Datumsformat in RSS 2.0 richtet sich nach RFC 822 und sähe dann so aus:

        <pubDate>Tue, 17 Sep 2006 00:00:09 GMT</pubdate>

        <image>
              <url>[image-link]</url>
              <title>Rolands News-Feed</title>
              <link>www.rolandschuetz.at.tt<link>

        Das ist keine richtige URI. Die richtige URI würde mit "http://" beginnen.

        <author>Roland Sch&uuml;tz &lt;[eimailadresse]&gt;</author>

        Das Entity "&uuml;" ist in RSS 2.0 nicht erlaubt. Die Definition von "&uuml;" wird normalerweise im Doctype vorgenommen. In HTML geschieht das z.B. im Doctype von HTML. Das Format RSS hatte nur in der Version 0.91 von Netscape einen Doctype, der solche Zeichen definierte, danach wurde der fallen gelassen. Du hast stattdessen folgende Möglichkeiten:

        • Ein numerisches Entity nehmen, das das kleine "ü" anhand des Zahlencodes identifiziert. Das wären dann &xFC; oder &252;.
        • Einfach "ü" schreiben. Du nutzt ISO 8859-1, das kleine ü ist darin enthalten.

        <author>Roland Sch&uuml;tz &lt;[eimailadresse]&gt;</author>

        Zweite Anmerkung: Das Format ist falsch. Generell sagt der RSS 2.0 Standard nur, dass in den Elementen author, managingEditor und webMaster nur eine Mailadresse enthalten sein darf, das sähe dann so aus:

        <author>vorname.nachname@example.org</author>

        Da es im Standard aber in den Beispielen erwähnt wird, hat es sich auch eingebürgert, den Namen des Besitzers der Mailadresse in Klammern dahinter zu setzen:

        <author>vorname.nachname@example.org (Vorname Nachname)</author>

        Das ist wieder eine andere Syntax als in Email-Nachrichten benutzt wird, deren Syntax ja Du geborgt zu haben scheinst. Allerdings sollte man sich schon an die obigen Formate halten, nicht jeder RSS-Reader macht den gedanklichen Sprung von Mailadresse zu "Mailadresse wie in Emails". Warum auch, es sind ja zwei verschiedene Dinge.

        <author>Roland Sch&uuml;tz &lt;[eimailadresse]&gt;</author>

        Dritte Anmerkung dazu: Die Emailadresse steht hier im Klartext, das ist also ein gefundenes Fressen für Adresssammler, die diese Mailadressen dann an Spammer verkaufen. Viele lassen deswegen das author-Element weg, schließlich ist es ja nur optional. Ein Ersatz für author, bei dem nicht die Mailadresse angegeben werden muss, ist das Element creator aus dem Dublin Core Metadatensatz:

        <dc:creator>Vorname Nachname/dc:creator>

        Natürlich muss nach den Regeln von XML das Präfix "dc" dann noch an den Namensraum von von Dublin Core gebunden werden, am geschicktesten macht man das gleich am Anfang:

        ~~~xml <rss version="2.0"
                              xmlns:dc="http://purl.org/dc/elements/1.1/">

          
        ...  
          
        Ich empfehle Dir trotzdem noch dringend, den fertigen Feed mit dem [Feed Validator](http://feedvalidator.org/) automatisch auf Richtigkeit überprüfen zu lassen. Das sollte man immer tun, wenn man einen Feed entwickelt.  
          
          
        Tim
        
        1. DANKE!!!

          Noch 2 kurze Fragen:
          1. Wie kann ich bei der anzeige im Browserfenster 1. breaks (in html <br>) machen?

          2. Wie kann ich das Bild richtig anzeigen lassen?

          danke
          Roland

          1. Hallo,

            1. Wie kann ich bei der anzeige im Browserfenster 1. breaks (in html <br>) machen?

            Kommt drauf an, wo Du HTML Breaks machen willst. Im Inhalt der Description-Elemente?

            Nun jaa .. da kann man HTML reinpacken. Aber nicht so, sondern maskiert. Das sieht zum Beispiel so aus:

            <description>&lt;p&gt;Ich bin ein &lt;a href="http://example.org/"&gt;Link&lt;/a&gt; in HTML&lt;/p&gt;</description>

            Sprich: Alle "<", ">" und "&" durch die entsprechenden Entities ersetzen. Oder es in CDATA-Bereiche packen:

            <description><![CDATA[<p>Ich bin ein <a href="http://example.org/">Link</a> in HTML</p>]]></description>

            Bezüglich Browserfenster: RSS-Feeds liest man unverarbeitet eigentlich nicht im Browser. Sprich: Wenn man ein Stylesheet anbietet, dann formatiert das meist nur den Feed und gibt ein paar Zusatzinformationen, was das hier sein soll und dass man das besser in seinem RSS-Reader abonnieren solle.

            Wird der Feed im Browserfenster mit einem XSLT-Stylesheet gerendert, dann sollte man die maskierten Bereiche auch noch entmaskieren lassen.

            1. Wie kann ich das Bild richtig anzeigen lassen?

            Wie wird es denn „nicht richtig“ angezeigt?

            Tim

            1. Hallo,

              <description><![CDATA[<p>Ich bin ein <a href="http://example.org/">Link</a> in HTML</p>]]></description>

              Nachtrag: Es existiert übrigens keine zuverlässige Methode für RSS-Reader, eindeutig festzustellen, ob der Inhalt des description-Elementes nun reiner Text ist oder HTML. Das ist einer der kleinen Fehler von RSS 2.0. Hersteller von RSS-Readern sagen inzwischen, dass man bei der Variante Text kein "&lt;" oder "gt;" im Text unterbringen und bei der Variante HTML bitte mindestens ein HTML Element reinpacken soll. Was natürlich extrem doof ist, denn was ist, wenn man diesen String "Es gilt in der Mathematik der Natürlichen Zahlen dieses: 3 < 5" veröffentlichen will.

              Das neuere Feed-Format Atom 1.0 leidet nicht darunter, da wurde ein Lösungsweg gefunden. Ich persönliche würde nur noch Atom und kein RSS mehr einsetzen – denn auch wenn das nur ein minimales Problem ist, irgendwann beisst es einen in den Allerwertesten. Atom kann alles, was RSS auch kann, wird von den populären Feedreadern unterstützt; letztendlich gibt es keinen Grund mehr, RSS zu benutzen. Ausser dass es den bekannteren Namen hat.

              Tim

            2. ich hab nur so eine Erklärung was dieser feed hier is und wie man den verwendet & nettes Bild, die feed-items werden vollständig ausgebendet!

              naja, er zeigt das Bild nicht an, sondern nur den title, obwohl der link funktioniert :-(

              Danke
              Roland

              1. Hallo Roland,

                naja, er zeigt das Bild nicht an, sondern nur den title, obwohl der link funktioniert :-(

                Warum sollte er auch? Er weiss ja nicht, dass das Bild des RSS-Feeds im Browser gerendert werden sollte, er stellt nur ein beliebiges XML-Dokument dar. Für den Browser hat das dieselbe Aussagekraft wie

                <schubidu>http://example.org/image.jpg</schubidu>

                ... und nicht wie das <img /> aus XHTML. Der Browser weiss also nicht, was er damit machen soll; kein Wunder, RSS-Feeds sind ja nicht dafür gedacht, im Browser dargestellt zu werden.

                Die einzige Möglichkeit, den Browser dazu zu bringen, das Bild als Bild zu rendern ist, ein XSLT-Stylesheet darauf anzuwenden. Sprich: Das XML des RSS-Feeds in HTML umzuwandeln. Aber wozu?

                Tim

  2. sry, eine frage hab ich noch vergessen:
    Was ist denn ein Guide-element, reicht es wenn ich in diesem die Ids aus meiner mysql-tabelle eintragen lasse?

    Danke
    Roland

    1. Hallo,

      Was ist denn ein Guide-element, reicht es wenn ich in diesem die Ids aus meiner mysql-tabelle eintragen lasse?

      Ja und Nein.

      Ja, weil es keine strengen Vorschriften gibt, was man zwischen <guid> und </guid> schreiben darf.

      Nein, weil eine reine Integer-Zahl vollkommen dem Sinn von GUIDs wiederspricht. GUID steht für Global Unique Identifier. Sprich das was darin steht, sollte global eindeutig sein. Integer-Zahlen wie 120 haben dagegen eine gute Chance auch woanders gebraucht zu werden. Die beste Lösung für eine GUID ist es, den Permalink den Newseintrages zu nehmen, da URIs nun mal global eindeutig sind:

      <guid>http://example.org/weblog/120</guid>

      Ich habe neulich einen längeren Post dazu geschrieben, warum GUIDs so wichtig sind; eventuell interessiert er Dich.

      Tim