Kom ihåg mig?
Home Menu

Menu


php RSS parse.

Ämnesverktyg Visningsalternativ
Oläst 2006-02-25, 19:38 #1
stakess avatar
stakes stakes är inte uppkopplad
Medlem
 
Reg.datum: May 2005
Inlägg: 219
stakes stakes är inte uppkopplad
Medlem
stakess avatar
 
Reg.datum: May 2005
Inlägg: 219
Ok det är så att jag har ett php-skript för att hämta rss data från en extern websida.

Mitt problem är, rss feeden innehåller cirka.. 200 inlägg.. och det ökar hela tiden. Detta gör att mina sida tar lång tid att ladda och designen deformeras, jag vill helst bara visa de senaste TVÅ inläggen från feeden.

Tyvärr är min logiska förmåga lika med usel när det kommer til sådant här. Jag har försökt att hitta vägar runt problemet men det blir bara invecklat och fel. Finns det någon snabb konkret lösning på detta? Kanske någon inbygg funktion, eller måste jag använda mig av ett cron job som skriver det senaste till en database eller fil, och sedan hämtar därifrån.... som sagt.. jag vet inte..! arghh!..

Altså kort sagt: Vill bara ha de två senaste inläggen från denna "nyhets" rss kanal.

tack på förhand..

bifogar här även min kod (ps hittar ni något annat fel eller vill kritsera koden från en annan synpunkt så gör det gärna!)

Kod:
<?php


$insideitem = false;
$title = "";
$link = "";


function startElement($parser, $name, $attrs) {
	global $insideitem, $tag, $title, $link;
	if ($insideitem) {
 $tag = $name;
	} elseif ($name == "ITEM") {
 $insideitem = true;
	}
}

function endElement($parser, $name) {
	global $insideitem, $title, $link;
	if ($name == "ITEM") {
      
 printf ("<img src=gfx/arrow.gif> <b><a href='%s'>%s</a></b><br/><br/> \n",
 	trim($link),utf8_decode(htmlspecialchars(trim($title))));

 $title = "";
 $link = "";
 $insideitem = false;
	}
}

function characterData($parser, $data) {
	global $insideitem, $tag, $title, $link;
	if ($insideitem) {
	switch ($tag) {
 case "TITLE":
 $title .= $data;
 break;

 break;
 case "LINK":
 $link .= $data;
 break;
	}
	}
}


$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
$fp = fopen("http://www.muf.se/rss_newsfeed.php","r")
	or die("Error reading RSS data.");
while ($data = fread($fp, 4096))
	xml_parse($xml_parser, $data, feof($fp))
 or die(sprintf("XML error: %s at line %d", 
 	xml_error_string(xml_get_error_code($xml_parser)), 
 	xml_get_current_line_number($xml_parser)));
fclose($fp);
xml_parser_free($xml_parser);

?>
stakes är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-02-26, 11:50 #2
PeterM PeterM är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 56
PeterM PeterM är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 56
Din sida hämtar ett RSS-feed på cirka 200KB varje gång den laddas? Jag hoppas att jag inte behöver påpeka hur galet det är...

Att hämta feed'et x gånger per dag med hjälp av crontab och spara i en fil eller databas är absolut inte svårt. Här har du ett exempel som laddar hem filen och skapar en textfil med länkar till de två senaste posterna. Värt att notera är att jag använder simplexml (en extension till PHP) och koden blir en aning enklare. Har du inte tillgång till simplexml så, tja, se till att skaffa det eller anpassa koden.

Kod:
<?php
$feed = file_get_contents("http://www.muf.se/rss_newsfeed.php");
$xml = simplexml_load_string($feed);

$fh = fopen("links.txt", "wb");
for($i = 0; $i < 2; $i++) {
  $link = utf8_decode($xml->channel->item[$i]->link);
  $title = utf8_decode($xml->channel->item[$i]->title);
  fwrite($fh, "<a href=\"" . $link . "\">" . $title . "</a>\n");
}
fclose($fh);
?>
För att visa länkarna på din sida kan du med fördel använda file().

Kod:
<?php
$lines = file("links.txt");
echo $lines[0];
echo $lines[1];
?>
PeterM är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-02-27, 12:08 #3
stakess avatar
stakes stakes är inte uppkopplad
Medlem
 
Reg.datum: May 2005
Inlägg: 219
stakes stakes är inte uppkopplad
Medlem
stakess avatar
 
Reg.datum: May 2005
Inlägg: 219
löst på annan väg..

tack ändå.
stakes är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 17:56.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017