Gå til innhold

Lage rss/xml feed gjennom .php | Problemer


Anbefalte innlegg

Heisann. Jeg prøver å lage en rss feed gjennom et .php script. Problemet mitt er at det feltet jeg skal fylle inn med info (<item><name> osv.) ligger ca. midt inne i .xml fila.

 

Derfor bruker jeg foreach() og explode() til å dele opp hele fila.

 

News.xml tom

<?xml version="1.0" encoding="iso-8859-1" ?> 
<rss version="2.0">
<channel>
</channel>
</rss>

 

Scriptet deler linja ved <channel> og der kommer infoen min inn. Når infoen er ferdig kommer slutten av fila altså </channel> og </rss>.

 

Men av en eller annen merkelig grunn funker ikke dette. Jeg har prøvd en million ganger. Og jeg er ikke veldig godt med foreach() og explode() enda.

 

Script.php

<?php
//Her finner vi riktig sted i fila!
$shit = file("news.xml"); 
foreach($shit as $rssalt) 
{
$x99 = explode( "<channel>", $rssalt );
$forst = $x99[0];
$sist = $x99[1];
}

echo $rssalt;

$rssitem = "<item>
<title>".$titel."</title>
<description>Kommer</description>
<link>".$site."/noeeee/kommer</link>
<pubDate>Kommer</pubDate>
</item>\n";

$rsstext = $forst . "" . $rssitem . "" . $sist;

echo $rsstext;

if(!$rss = fopen("news.xml","a"))
{
die("Couldn't open file. Please contact admin");
}

if(!fwrite($rss,$rsstext))
{
die("Couldn't write to file. Please contact admin");
}
fclose($rss);

echo $rsstext;

?>

 

Outputen i .xml når jeg er ferdig med scriptet en gang:

 

  2: <rss version="2.0">
 3: <channel>
 4: </channel>
 5: </rss></rss>
 6: <item>
 7: <title>Thomas</title>
 8: <description>Kommer</description>

 

Hvorfor deler den oppe opp fila? Den legger all infoen etter det som allerede er i news.xml.

 

$rsstext = $forst . "" . $rssitem . "" . $sist;

Lenke til kommentar
Videoannonse
Annonse
if(!$rss = fopen("news.xml","a"))

 

prøv med w der

8932683[/snapback]

 

faktisk, det slo meg før jeg posta. Stupid me. Takk for hjelp, tror det skal funke nå :)

 

Scriptet mitt ser sånn ut:

 

<?php
session_start;

//Open file and get info
$file = file("database.txt"); 

// Cut the string into more strings with right info
foreach($file as $alt) 
{
$x = explode( '%%%', $alt );
$linje = $x[0];
}

$x2 = explode( "|||", $linje );
$id = $x2[0];
$tittelogtext = $x2[1];

$x3 = explode( '---', $tittelogtext );
$titel = $x3[0];
$text = $x3[1];


//  Open rss feeder and cut the stringinfo in two
$shit = file("news.xml"); 

$x99 = explode( "<channel>", $shit );
$forst = $x99[0];
$sist = $x99[1];

echo $x99[0];

// Itemtext for the rss feeder
$rssitem = "<item>
<title>".$titel."</title>
<ID>".$id."</ID>
<description>Kommer</description>
<link>".$site."/noeeee/kommer</link>
<pubDate>Kommer</pubDate>
</item>\n";

$rsstext = $forst . "" . $rssitem . "" . $sist;

echo $rsstext;

if(!$rss = fopen("news.xml","w"))
{
die("Couldn't open file. Please contact admin");
}

if(!fwrite($rss,$rsstext))
{
die("Couldn't write to file. Please contact admin");
}
fclose($rss);

echo $rsstext;

?>

 

Men det vil forsatt ikke funke. Outputen blir:

 

ArrayArray<item>
<title>Sofie info</title>
<ID>29</ID>
<description>Kommer</description>
<link>/noeeee/kommer</link>
<pubDate>Kommer</pubDate>
</item>
Array<item>
<title>Sofie info</title>
<ID>29</ID>
<description>Kommer</description>
<link>/noeeee/kommer</link>
<pubDate>Kommer</pubDate>
</item>

 

Array, wtf?!

Endret av TheClown
Lenke til kommentar
Heisann. Jeg prøver å lage en rss feed gjennom et .php script. Problemet mitt er at det feltet jeg skal fylle inn med info (<item><name> osv.) ligger ca. midt inne i .xml fila.

8932552[/snapback]

Er det ikke likegreit og bare lage ett script som skriver hele rss informasjonen for deg? Err skal den blades med info fra XML? Uansett vil jeg anbefale deg og fårst hente inn all info du trenger fra andre kilder først, for så og lage en "rssout.php" fil, som kun streamer rss. Du kan du gjøre det veldig enkelt:

 

PHP

<?php

header("Content-type: application/xhtml+xml");

echo "<x3fxml version="1.0" encoding="ISO-8859-1"x3f>";

// legg inn en loop her som echo-er ut den info du måtte ønske enten hentet fra sql / array e.el

?>

 

Ønsker du og hante informasjon til denne feeden -kun- fra di egen database/array er dette desidert lettest. Om du ønsker og hente informasjon fra andre rss / xml / el. ville jeg laget en funksjon for dette først (som kanskje går med jevne mellomrom og oppdaterer seg mot en fil / database på din server) sånn at om evt den siden du henter info fra er nede / utilgjengelig. Så kan den beholde sist motatt info, eller skrive ut en feilmelding.

 

Edit: La merke til at backslashen forsvant under posting. det skal være en backslash på linje 3 foran hver x3f og foran hvert "

Endret av pulse
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...