Archief - PHP/XML: RSS-feed op blog

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

joyraider

Legacy Member
Dag allemaal,
een tijdje terug ben ik begonnen met een blog/portfolio, www.joyraider.be, zoals sommigen misschien wel weten.

Over het algemeen ben ik er vrij tevreden over, maar ik hoor steeds meer mensen zeggen "Waar is de RSS?". Deze week had ik er genoeg van, en heb ik wat research gedaan ;)

Bon, het principe is voor mij heel duidelijk: een XML-bestand, met een boomstructuur waarin bijvoorbeeld de laatste 10 "nieuws-items" komen. Dat snap ik dus al, gezien er vrij veel over is terug te vinden op internet.

Wat snap ik écht niet? Hoe krijg ik die nieuws-items uit mijn database in dat XML-bestand? Vreemd genoeg vind ik hier ook weinig of niets over terug...

Ik kan in zo'n XML-bestand toch moeilijk met sql-queries gaan werken, of zie ik dit verkeerd? Mja, als iemand dit zou kunnen uitleggen, graag :)

NeoNeke

Legacy Member
ja de header (via php) verander je van die file... zodat hij toch xml uitput (heb ik hier snel gevonden via google)

http://bzabza.com/php/60/



Ook heb ik nog scripts gezien die via .htaccess werken en die bepaalde file (den rss-file) via een commando toch door de php-parsers zenden. Misschien als het eerste niet lukt daar wat op zoeken

joyraider

Legacy Member
NeoNeke zei:
ja de header (via php) verander je van die file... zodat hij toch xml uitput (heb ik hier snel gevonden via google)

http://bzabza.com/php/60/



Ook heb ik nog scripts gezien die via .htaccess werken en die bepaalde file (den rss-file) via een commando toch door de php-parsers zenden. Misschien als het eerste niet lukt daar wat op zoeken

Deze site heb ik inderdaad ook voorbij zien komen tijdens mijn zoektocht, maar ik had het idee dat dat niet was wat ik zocht, omdat ze daar werken met een php-bestand in plaats van XML, maar dat gaat dus ook? Prima, zal het eens proberen, thanks!

joyraider

Legacy Member
na wat proberen kom ik tot de conclusie dat het ding enorm moeilijk doet over symbolen zoals "=" en "&". maar dat is vooral omdat ik een enorme knoeier ben in die zaken; in mijn database zijn namelijk alle dubbele aanhalingstekens vervangen door "%34", die ik terug vervang voor dubbele aanhalingstekens bij het terughalen. dit is not the way, dat weet ik :p

code ziet er zo uit:

PHP:
<?php

header ("Content-Type: text/xml");
echo '<?xml version="1.0" encoding="ISO-8859-1" ?>';
include "connect.php";
$query = "SELECT * FROM jbe_blog ORDER BY blogid DESC";
$res = mysql_query($query);
$num = mysql_num_rows($res);
if($num == 0)
{
  exit;
}
else
{
  echo "<rss version=\"2.0\">\n";
  echo "<channel>\n";
  echo "<title>joyraider.be :: RSS-feed\n";
  echo "<link>http://www.joyraider.be/\n";
  echo "<description>joyraider.be live RSS-feed\n";
   
  while($sql = mysql_fetch_object($res))
  {
	$blog_title	   = stripslashes($sql->title);
	$blog_link		= "blogid=".$sql->blogid;
	$blog_description = ereg_replace("%34","\"",stripslashes($sql->message));
	$blog_description = ereg_replace("&","en",$blog_description);
	echo "<item>\n";
	echo "<title>".$blog_title."\n";
	echo "<link>".$blog_link."\n";
	echo "<description>\n";
	echo $blog_description;
	echo "</description>\n";
	echo "</item>\n";
  }
  
  echo "</channel>\n";
  echo "</rss>\n";
}
?>

en dit is de rss-page:
http://lowgrav.net/joyraider/rss.php

ik heb dus al wat zitten knoeien met ereg_replace, maar is het niet mogelijk om in 1 klap die symbolen erdoor te krijgen?

joyraider

Legacy Member
het bovenstaande probleem heb ik al opgelost door een nieuw veld "description" te maken, zonder vreemde symbolen.

nu zit ik nog steeds met het volgende probeem: de link naar een item is alsvolgt:

index.php?view=comment&blogid=

de ?, = en & krijg ik er niet in, dus probeerde ik het met backslashes:

index.php\?view\=comment\&blogid\=

dit pakt ie ook niet :wtf: hoe krijg ik dan ooit die link aan de gang?

xml

Legacy Member
&amp;

? zou normaal moeten werken.

alles wat begint met & in xml is een zogenaamde xml-entiteit.

joyraider

Legacy Member
xml zei:
&amp;

? zou normaal moeten werken.

alles wat begint met & in xml is een zogenaamde xml-entiteit.

en indeed it does, u doet uw naam alle eer aan ;) erg bedankt!

hij werkt op Sage, dus ik ga ervan uit dat het in orde is :)

NeoNeke

Legacy Member
alé vooruit kunt ge stoefen volgende week vrijdag dat uw site rss heeft :P

servi

Legacy Member
Als je wil vermijden dat je telkens queries gaat uitvoeren wanneer iemand je XML-pagina bezoekt, kan je dit doen door middel van een gecachde rss-feed-pagina.

Het principe is eigenlijk vrij eenvoudig. Het enige moment dat je RSS-feed verandert is als je in je controlepaneel bij nieuws bezig bent. Wat je dus doet is een functie oproepen in je controlepaneel die de vernieuwe rss-feed aanmaakt.

voorbeeld hiervan :
PHP:
<?php

function maakRSSFeed() {
	$query = 'SELECT title,blogid,message FROM jbe_blog ORDER BY blogid DESC';
	$res = mysql_query($query);
	$num = mysql_num_rows($res);
	
	if($num == 0) { 
		exit; 
	} else {
	  	$fp = fopen('rss.xml','w');
		$uitvoer = "<rss version=\"2.0\">\n";
	  	$uitvoer .= "<channel>\n";
	  	$uitvoer .= "<title>joyraider.be :: RSS-feed</title>\n";
	  	$uitvoer .= "<link>http://www.joyraider.be/</link>\n";
	  	$uitvoer .= "<description>joyraider.be live RSS-feed</description>";

		while($sql = mysql_fetch_object($res)) {
	    		$blog_title       = stripslashes($sql->title);
	    		$blog_link        = 'index.php?view=comment&amp;blogid='.$sql->blogid;
	    		$blog_description = ereg_replace("%34","\"",stripslashes($sql->message));
	    		$blog_description = ereg_replace("&","en",$blog_description);
	    		
			$uitvoer .= "<item>\n";
	    		$uitvoer .= "<title>$blog_title</title>\n";
			$uitvoer .= "<link>$blog_link</link>";
			$uitvoer .= "<description">;
	    		$uitvoer .= $blog_description;
	    		$uitvoer .= "<description>\n";
			$uitvoer .= "</item>\n";
		}
		// schrijf het resultaat weg naar de xml 
		fwrite($fp,$uitvoer);
		fclose($fp);
  	}

}
?>

En zo voer je dus alleen maar queries uit wanneer nodig en niet telkens iemand je rss-feed bezoekt.

joyraider

Legacy Member
NeoNeke zei:
alé vooruit kunt ge stoefen volgende week vrijdag dat uw site rss heeft :P

arf, busted :p mja was idd de bedoeling, maar een kameraad zei dat het vrij eenvoudig was om RSS op je blog te krijgen... als ik ni zo'n prutser was met symbolen zou het ook vrij eenvoudig zijn ;)

ook bedankt daarvoor Servi, kga er in t weekend es naar kijken :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan