Avatar billede turbodk Nybegynder
08. september 2009 - 21:07 Der er 33 kommentarer

Lave automatisk RSS-Feed

Hej :)
Jeg sidder og roder med en hjemmeside, som vil poste en form for nyheder/blog-indlæg..
Disse skal ligges ind i et RSS-Feed automatisk når de bliver tilføjet, men hvordan gøres dette bedst?

Jeg har været ude i sådan noget her:

<--- Kode starter --->

<?xml version="1.0" encoding="UTF-8"?>

    <rss version="2.0">
        <channel>
            <title>FirstTouch.dk</title>
            <link>http://www.firsttouch.dk/upload</link>
            <description>A feed for articles on web development</description>

<?php

include("mysqldata.php");
    $db = mysql_connect($db_host, $db_user, $db_password);
    mysql_select_db($db_name, $db);
    $query = mysql_query("SELECT *,  DATE_FORMAT(time, '%a, %d %b %Y %T PST') AS newdate FROM content ORDER BY id DESC LIMIT 10");
    while($data = mysql_fetch_array($query)) {
        echo '<item>';
            echo '<title>$data[title]</title>';
            echo '<link><![CDATA[http://www.firsttouch.dk/upload/index.php?side=Vis&id=$data[id]]]></link>';
            echo '<description><![CDATA[$data[content2]]]></description>';
            echo '<pubDate>$data[newdate]</pubDate>';
        echo '</item>'; }

?>

        </channel>
    </rss>

<--- Kode slutter --->

Det var noget jeg fandt en tutorial med, men jeg kan forstå at man ikke kan bruge php-filer som rss-feeds længere?

Ret mig gerne hvis jeg tager fejl...

Hvordan løser jeg mit problem nemmest?
Avatar billede olebole Juniormester
08. september 2009 - 21:28 #1
<ole>


<?php header("Content-Type: application/rss+xml") ?>
<?xml version="1.0" encoding="UTF-8"?>

    <rss version="2.0">
        <channel>



/mvh
</bole>
Avatar billede turbodk Nybegynder
08. september 2009 - 21:40 #2
Det hjælper desværre ingenting :(
Avatar billede turbodk Nybegynder
08. september 2009 - 21:41 #3
Det kunne være jeg lige skulle sige hvad fejl den laver..

Firefox laver bare blank side, og IE skriver at Webstedet ikke kan vises, og påstår at det er en intern HTTP 500-fejl...
Men serveren fejler altså intet :)
Avatar billede olebole Juniormester
08. september 2009 - 21:52 #4
Prøv at lægge et link til dokumentet
Avatar billede turbodk Nybegynder
08. september 2009 - 21:55 #5
Avatar billede olebole Juniormester
08. september 2009 - 22:01 #6
Har du prøvet at se, hvad dit PHP skriver ud? Prøv at se, hvad denne fil resulterer i:


<?php
error_reporting(E_ALL);
include("mysqldata.php");
    $db = mysql_connect($db_host, $db_user, $db_password);
    mysql_select_db($db_name, $db);
    $query = mysql_query("SELECT *,  DATE_FORMAT(time, '%a, %d %b %Y %T PST') AS newdate FROM content ORDER BY id DESC LIMIT 10") or die (mysql_error());
    while($data = mysql_fetch_array($query)) {
        echo '<item>';
            echo '<title>$data[title]</title>';
            echo '<link><![CDATA[http://www.firsttouch.dk/upload/index.php?side=Vis&id=$data[id]]]></link>';
            echo '<description><![CDATA[$data[content2]]]></description>';
            echo '<pubDate>$data[newdate]</pubDate>';
        echo '</item>'; }

?>

Avatar billede turbodk Nybegynder
08. september 2009 - 22:07 #7
Gjort, den siger stadig intet...

http://www.firsttouch.dk/upload/rss.php
Avatar billede olebole Juniormester
08. september 2009 - 22:19 #8
- og hvad sker der, hvis du sletter din while løkke?
Avatar billede erikjacobsen Ekspert
08. september 2009 - 22:24 #9
Du skal nok i hvert fald udskifte en del af dine '....' strenge med "....." strenge - dem, der indholder variabler, du vil bruge værdien af.

Er der noget i tabellen content?
Avatar billede olebole Juniormester
08. september 2009 - 22:28 #10
Det er klart, variablerne blot bliver skrevet ud som rå tekst - men de resulterer næppe i en 500 fejl  =)
Avatar billede erikjacobsen Ekspert
08. september 2009 - 22:33 #11
Er domaindirect også een af dem, der slår PHP-fejl fra pr. default, så man skal ind og pille i deres kontrolpanel, for at slå dem til igen?
Avatar billede olebole Juniormester
08. september 2009 - 22:52 #12
error_reporting(E_ALL); burde kunne gøre det på dokumentniveau
Avatar billede turbodk Nybegynder
09. september 2009 - 10:24 #13
Error reporting siger som sagt ingenting..
Der er tekst i databasen den skal hente ud...

Jeg har prøvet at fjerne while-løkken(altså bare sætte // foran), men det hjalp intet..

Jeg har ligeledes prøvet at sætte en echo i toppen hvor jeg bare har skrevet "Hej"; men det giver heller intet udslag.
Avatar billede olebole Juniormester
09. september 2009 - 11:21 #14
Du er med andre ord voldsomt meget klogere. Nu ved du, fejlen ligger i:


<?php
error_reporting(E_ALL);
print "HepHey";
include("mysqldata.php");
    $db = mysql_connect($db_host, $db_user, $db_password);
    mysql_select_db($db_name, $db);
    $query = mysql_query("SELECT *,  DATE_FORMAT(time, '%a, %d %b %Y %T PST') AS newdate FROM content ORDER BY id DESC LIMIT 10") or die (mysql_error());}
?>



Så fortsætter du bare med at slette én linje ad gangen, nedefra  =)
Avatar billede turbodk Nybegynder
09. september 2009 - 11:54 #15
Jeg går ud fra at du mener at slette alle de linjer hvor jeg henter noget fra databasen?

Det er gjort, og der sker stadig intet, den skriver heller ikke noget ud...
Avatar billede olebole Juniormester
09. september 2009 - 12:34 #16
Så er der vel kun ét spørgsmål tilbage: Understøtter din server overhovedet PHP?

Hvis dette ikke virker:


<?php
error_reporting(E_ALL);
print "HepHey";
?>



Må du have en alvorlig fejl på serveren
Avatar billede turbodk Nybegynder
09. september 2009 - 13:09 #17
Den understøtter php, hele siden er lavet i php :)

Jeg går ud fra problemet ligger i det her med at jeg prøver at lave en xml-fil i en php-fil..
Jeg har prøvet at lave en rigtig xml fil, der virkede det fint, men sådan en skal jo opdateres manuelt..
Avatar billede olebole Juniormester
09. september 2009 - 16:10 #18
Nej, du prøver ikke at lave en XML-fil. Den bette to-linjers fil, jeg skrev ovenfor, har absolut intet med XML at gøre. Hvis du ikke kan kalde den og få den til at skrive HepHey i din browser, er der noget dramatisk galt på din server
Avatar billede olebole Juniormester
09. september 2009 - 16:12 #19
- og hvis du ikke kan kalde filen ovenfor og få den til at skrive noget, kan du ikke have noget virkende PHP kørende på serveren. En PHP-fil kan ikke laves simplere  =)
Avatar billede turbodk Nybegynder
09. september 2009 - 19:31 #20
Du forstår mig ikke :)

Jeg starter med at skrive at serveren UNDERSTØTTER PHP, og så sprang jeg videre og begyndte at snakke om mit feed :)

Din test er fuldstændig ligegyldig(det lyder lidt hårdt, sorry) for jeg har lavet en hel side der poster nyheder og lignende i php som kører på lige nøjagtigt den server...

Det jeg siger er at problemet må ligge i det med at jeg prøver at få en php-fil til at opføre sig som en xml-fil da php'en på mit site jo virker fint :)
Avatar billede olebole Juniormester
09. september 2009 - 20:32 #21
Jo, jeg forstår dig sådan set godt, men du er nødt til at tage én ting ad gangen. Du skal ikke koncentrere dig om at lave et XML-/RSS-feed i første omgang. Allerførst må du have dit script til at skrive markup-strengen ud. Så er det a piece of cake at få det til at spytte XML ud  =)
Avatar billede olebole Juniormester
09. september 2009 - 20:34 #22
- og så kan det godt være, du startede med at skrive, din server understøtter PHP, men hvis du ikke kan få koden i #16 til at skrive HepHey, er der noget helt forrykt på din server
Avatar billede turbodk Nybegynder
09. september 2009 - 21:19 #23
Nårh :)
Okay, det er mig der haster frem så, undskyld :)

Den viser fint HepHey når jeg laver en fil der hedder test.php og ligger på min webside...
Avatar billede olebole Juniormester
09. september 2009 - 21:37 #24
Fint! Så prøver du koden i #14 - og derefter smider du while løkken på igen. Hvergang kalder du filen direkte i browseren. På et eller andet tidspunkt går noget galt - og så ved vi præcis, hvor det går galt  ;o)

Når det er fixed, kan vi gå videre til at åbne og lukke filen og sætte korrekt MIME type ... og dit feed vil fungere. Der er nemlig med garanti intet i vejen for at skabe et RSS-feed med PHP  =)
Avatar billede turbodk Nybegynder
09. september 2009 - 22:39 #25
Kæft du er god :P

Det viser sig at det er følgende linje der skaber problemer:

<?xml version="1.0" encoding="UTF-8"?>

Hvordan kan det være? Skal den ikk være der?
Avatar billede erikjacobsen Ekspert
09. september 2009 - 23:09 #26
Lav den med en print i PHP i stedet for.

Når "short open tags" er slået til i PHP vil den tro at

<?xml ... ?> er en PHP-blok.

Man slår derfor "short open tags" fra, så en PHP-blok kun kan begynde med <?php

Du skal altså bare

<?php print '<?xml version="1.0" encoding="UTF-8"?>' ?>

...eller ændre indstilling på serveren...
Avatar billede turbodk Nybegynder
09. september 2009 - 23:17 #27
Den laver det samme nummer med bare at vise en blank side..

Men anyways, jeg har været igennem en validator, og den brokker sig ikke over at den mangler, så mon ikk det går?
Avatar billede erikjacobsen Ekspert
09. september 2009 - 23:30 #28
Det er nok ikke bare en blank side, men en fejl 500 som før.

Så vidt jeg kan orientere mig om domaindirect kan man (måske) ikke slå fejlvisning til, men man kan kigge i error_log - hvor en fejl 500 bliver beskrevet. Prøv det, og se om det faktisk kan hjælpe at se hvad fejlen er.

Og vis os gerne den kode, du rent faktisk kører, i stedet for bare at sige at det du har lavet ikke virker.
Avatar billede turbodk Nybegynder
09. september 2009 - 23:39 #29
Jeg har sådan set postet en kode længere oppe :)
Men anyways, skidtet virker upåklageligt og validerer fint, altså kan der jo ikke være problemer? :)

Og nej, det er nok en fejl 500, men jeg vil hellere end gerne indrømme at det ikke fortæller mig så meget som det måske burde..
Jeg ved bare at når jeg sætter den xml-linje ind, så får jeg en blank side :)
Avatar billede erikjacobsen Ekspert
09. september 2009 - 23:42 #30
Nej, koden står ikke længere oppe. I #27 siger du at den "laver det samme nummer" som før, men det må jo være med den kode, jeg foreslår, som ikke burde lave fejl (ja, burde, jeg ved jo ikke alt).

Men hvis du er tilfreds med det du har, så skal jeg da ikke blande mig yderligere.
Avatar billede turbodk Nybegynder
09. september 2009 - 23:51 #31
Njarh nu fik jeg snakket for tidligt...
IE brokker sig...

Internet Explorer kan ikke vise dette feed.
Dette feed indeholder fejl.

Et semikolon var ventet. Linje: 10 Tegn: 91

<item><title>Tester RSS</title><link>http://www.firsttouch.dk/upload/index.php?side=Vis&id=48</link><description>Den nyeste funktion, RSS, er ved at blive testet p

Dette skriver den.. Det er fordi tegnet der fucker up og laver et andet tegn i kildekoden end det å der skal være der...

<--- Kode starter --->

<?php header("Content-Type: application/rss+xml; charset=ISO-8859-1") ?>

    <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
        <channel>
            <title>FirstTouch.dk</title>
            <link>http://www.firsttouch.dk/</link>
            <description>Hej :)</description>
            <copyright>2009 FirstTouch.dk</copyright>
            <atom:link href="http://www.firsttouch.dk/upload/rss.php" rel="self" type="application/rss+xml" />

<?php

include("mysqldata.php");
    $db = mysql_connect($db_host, $db_user, $db_password);
    mysql_select_db($db_name, $db);
    $query = mysql_query("SELECT *,  DATE_FORMAT(time, '%a, %d %b %Y %T +0200') AS newdate FROM content ORDER BY id DESC LIMIT 10") or die (mysql_error());
    while($data = mysql_fetch_array($query)) {
        echo "<item>";
            echo "<title>$data[titel]</title>";
            echo "<link><![CDATA[http://www.firsttouch.dk/upload/index.php?side=Vis&id=$data[id]]]></link>";
            echo "<description><![CDATA[$data[content2]]]></description>";
            echo "<pubDate>$data[newdate]</pubDate>";
            echo "<guid isPermaLink='true'><![CDATA[http://www.firsttouch.dk/upload/index.php?side=Vis&id=$data[id]]]></guid>";
        echo "</item>"; }

?>

        </channel>
    </rss>

<--- Kode slutter --->

Charset skulle være ok?
Avatar billede turbodk Nybegynder
09. september 2009 - 23:53 #32
Avatar billede erikjacobsen Ekspert
10. september 2009 - 00:18 #33
Når du vil bruge fx æøå, så er det en god idé at have styr på tegnsæt.
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