Avatar billede repox Seniormester
29. juli 2006 - 15:14 Der er 7 kommentarer og
1 løsning

Dynamisk RSS Feed

Jeg er i øjeblikket i gang med at forsøge mig med at lave et dynamisk feed og synes pludseligt jeg står stille.

Der vil følge to script-eksempler, hvoraf det ene virker og det andet ikke virker. Jeg vil så meget gerne vide hvorfor og eventuelt have et løsningsforslag.

Den første kode er meget simpel og virker som efter hensigten (dette var blot for at teste om feedet ville validere når jeg nu smed det ud gennem php).
Den anden kode spørger mig blot om jeg vil gemme en fil. Filen indeholder dog det korrekte script, men jeg vil jo gerne have den åbner feed'et i browseren, ligesom den normalt ville gøre.

Kode 1:
<?php
header('Content-type: application/rss+xml');
echo '<?xml version="1.0" encoding="ISO-8859-1" ?>';

echo '
<rss version="2.0">

<channel>
  <title>test</title>
  <link>http://www.test.dk</link>
  <description>En lille beskrivelse</description>
  <category>Test</category>
  <copyright>yack yack</copyright>
  <language>da</language>
  <managingEditor>mig@test.dk</managingEditor>
  <webMaster>test@test.dk</webMaster>
  <item>
    <title>Test</title>
    <link>http://test.dk/test1</link>
    <description>En let beskrivelse</description>
    <guid>http://test.dk/test1</guid>
    <pubDate>Mon, 24 Jul 2006 13:00:00 GMT</pubDate>
  </item>
 
</channel>

</rss>

';

?>

Kode 2:
<?php

//lidt mysql_connect()

        $rss = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
        $rss .= "<rss version=\"2.0\">\n\n";
        $rss .= "<channel>\n";
      $rss .= "\t<title>test</title>\n";
      $rss .= "\t<link>http://www.test.dk</link>\n";
      $rss .= "\t<description>en lille beskrivelse</description>\n";
      $rss .= "\t<category>Test</category>\n";
      $rss .= "\t<copyright>yack yack yack</copyright>\n";
      $rss .= "\t<language>da</language>\n";
      $rss .= "\t<managingEditor>mig@test.dk</managingEditor>\n";
      $rss .= "\t<webMaster>mig@test.dk</webMaster>\n";
     
        $query = mysql_query("SELECT * FROM items");
        if(mysql_num_rows($query) > 0)
        {
            while($feed = mysql_fetch_object($query))
            {
                $rss .= "\t<item>\n";
                $rss .= "\t\t<title>".$feed->title."</title>\n";
                $rss .= "\t\t<link>".$feed->link."</link>\n";
            $rss .= "\t\t<description>".$feed->description."</description>\n";
            $rss .= "\t\t<guid>".$feed->link."</guid>\n";
            $rss .= "\t\t<pubDate>".$feed->pubdate."</pubDate>\n";
              $rss .= "\t</item>\n";
          }
      }
     
      $rss .= "</channel>\n\n";
      $rss .= "</rss>";
         
          echo $rss;

?>
Avatar billede repox Seniormester
29. juli 2006 - 15:15 #1
glemte lige at skrive at header('Content-type: application/rss+xml'); også er med i kode 2. (står som det første)
Avatar billede Slettet bruger
29. juli 2006 - 17:47 #2
Hvilken browser snakker du om?
Avatar billede repox Seniormester
29. juli 2006 - 18:30 #3
Efter lidt forsøg frem og tilbage (cross browsers) er jeg kommet frem til at problemet ligger i min header.
Ifølge W3C standarden skal feedet leveres som application/rss+xml
Men sender jeg det med php stejler det og kun Opera vil se det som et rigtigt feed.

Retter jeg det til text/xml virker det korrekt, men feedet validerer ikke længere.
Et forslag fra W3C fortæller at men også kan bruge application/xml men resultat giver det samme som application/rss+xml

So far, so good... hvad så herfra?
Avatar billede Slettet bruger
29. juli 2006 - 18:40 #4
Fidusen er at de fleste browsere slet ikke har en funktion, som kan vise RSS direkte - altså som en side, der er beregnet til at blive læst af mennesker.

Til gengæld kan man f.eks i Firefox oprette et "Live bookmark" til RSS-feedets adresse og det vil så have en undermenu med feedets indhold.
Avatar billede repox Seniormester
29. juli 2006 - 18:45 #5
Så det vil egentlig sige at der egentlig ikke er noget problem?
Udover at det kun er for valideringens skyld?
Nå, så gider jeg at få hovedpine over det... :)
Læg et svar, så lukker jeg tråden.... :)
Avatar billede Slettet bruger
29. juli 2006 - 19:04 #6
Ok

Jeg vil bare lige gøre opmærksom på en detalje, som du skal være opmærksom på. RSS er en type af XML, men det har du vist allerede opdaget. Det betyder til gengæld, at man skal være meget forsigtig med de tegn, der kommer i udskriften. Der må f.eks ikke være < eller & uden at de bliver encodet (med mindre det & er en del af en entity, som f.eks &oslash;)
Avatar billede Slettet bruger
29. juli 2006 - 19:06 #7
Tilføjelse: Regler for XML siger, at hvis en XML-fil har et < eller & på et forkert sted, så skal programmet, som forsøger at læse den fil brokke sig meget tydeligt (nægte at behandle filen).
Avatar billede repox Seniormester
29. juli 2006 - 20:06 #8
Okay! :) Takker! :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester