
19/01/2006, 08:01
|
 | /** @package Moderador */ | | Fecha de Ingreso: julio-2004 Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 7 meses Puntos: 102 | |
 ... funciones.
Para no complicarse la vida, podrías crear un array con las URL a los XML y poner el parseo dentro de un foreach()  ...
---------------
Prueba con esto: Código PHP: <?php /* PHP RSS Reader v1.1 By Richard James Kendall Bugs to [email protected] Free to use, please acknowledge me Place the URL of an RSS feed in the $file variable. The $rss_channel array will be filled with data from the feed, every RSS feed is different by by and large it should contain: Array { [TITLE] = feed title [DESCRIPTION] = feed description [LINK] = link to their website [IMAGE] = Array { [url] = url of image [DESCRIPTION] = alt text of image } [ITEMS] = Array { [0] = Array { [TITLE] = item title [DESCRIPTION] = item description [LINK = a link to the story } . . . } } By default it retrives the Reuters Oddly Enough RSS feed. The data is put into the array structure so you can format the information as you see fit. */ set_time_limit(0);
$rss_channel = array(); $currently_writing = ""; $main = ""; $item_counter = 0;
function startElement($parser, $name, $attrs) { global $rss_channel, $currently_writing, $main; switch($name) { case "RSS": case "RDF:RDF": case "ITEMS": $currently_writing = ""; break; case "CHANNEL": $main = "CHANNEL"; break; case "IMAGE": $main = "IMAGE"; $rss_channel["IMAGE"] = array(); break; case "ITEM": $main = "ITEMS"; break; default: $currently_writing = $name; break; } }
function endElement($parser, $name) { global $rss_channel, $currently_writing, $item_counter; $currently_writing = ""; if ($name == "ITEM") { $item_counter++; } }
function characterData($parser, $data) { global $rss_channel, $currently_writing, $main, $item_counter; if ($currently_writing != "") { switch($main) { case "CHANNEL": if (isset($rss_channel[$currently_writing])) { $rss_channel[$currently_writing] .= $data; } else { $rss_channel[$currently_writing] = $data; } break; case "IMAGE": if (isset($rss_channel[$main][$currently_writing])) { $rss_channel[$main][$currently_writing] .= $data; } else { $rss_channel[$main][$currently_writing] = $data; } break; case "ITEMS": if (isset($rss_channel[$main][$item_counter][$currently_writing])) { $rss_channel[$main][$item_counter][$currently_writing] .= $data; } else { //print ("rss_channel[$main][$item_counter][$currently_writing] = $data<br>"); $rss_channel[$main][$item_counter][$currently_writing] = $data; } break; } } }
// output as HTML <<- lo movemos para que se imprima antes que todo print ("<html><head><title>PHP RSS Reader</title></head><body>");
foreach($files as $file) { // << recorremos la matriz $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "characterData"); if (!($fp = fopen($file, "r"))) { die("could not open XML input"); }
while ($data = fread($fp, 4096)) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser);
if (isset($rss_channel["IMAGE"])) { print ("<a href=\"" . $rss_channel["LINK"] . "\" target=\"_blank\"><img border=\"0\" src=\"" . $rss_channel["IMAGE"]["URL"] . "\" align=\"middle\" alt=\"" . $rss_channel["IMAGE"]["TITLE"] . "\"></a> <font size=\"5\">" . utf8_decode(trim(addslashes($rss_channel["TITLE"]))) . "</font><br><br>"); } else { print ("<font size=\"5\">" . $rss_channel["TITLE"] . "</font><br><br>"); } print ("<i>" . utf8_decode(trim(addslashes($rss_channel["DESCRIPTION"]))) . "</i><br><br>"); $rss_channel=array(); // << borramos datos almacenados } ?> y lo emplearías así: Código PHP: <? $files[]= "http://www.forosdelweb.com/index.xml"; $files[]= "http://newsrss.bbc.co.uk/rss/spanish/news/rss.xml"; $files[]= "http://rss.news.yahoo.com/rss/topstories";
include("parser.php"); ?> ... ve que se intentó hacer las modificaciones mínimas. Parece que sirve... |