Ver Mensaje Individual
  #5 (permalink)  
Antiguo 23/02/2011, 13:04
Avatar de almagropaco_
almagropaco_
 
Fecha de Ingreso: marzo-2008
Ubicación: Mar del Plata
Mensajes: 854
Antigüedad: 16 años, 1 mes
Puntos: 25
Respuesta: Leer feed para actualizar mi base de datos

Bueno, no se porque no me deja editar el mensaje anterior. Bueno te digo como haria yo con el codigo que tengo.

El Lector RSS, que uso es este:
Cita:
<?php

/*
Created by Global Syndication's RSS Parser
http://www.globalsyndication.com/rss-parser
*/

set_time_limit(0);

$file = "http://www.lanacion.com.ar/herramientas/rss/index.asp?origen=2";

$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 {
$rss_channel[$main][$item_counter][$currently_writing] = $data;
}
break;
}
}
}

$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);

// output HTML
print ("<div class=\"channelname\">" . $rss_channel["TITLE"] . "</div>");

if (isset($rss_channel["ITEMS"])) {
if (count($rss_channel["ITEMS"]) > 0) {
for($i = 0;$i < count($rss_channel["ITEMS"]);$i++) {
if (isset($rss_channel["ITEMS"][$i]["LINK"])) {
print ("\n<div class=\"itemtitle\">" . $rss_channel["ITEMS"][$i]["TITLE"] . "</div>");
} else {
print ("\n<div class=\"itemtitle\">" . $rss_channel["ITEMS"][$i]["TITLE"] . "</div>");
}
print ("<div class=\"itemdescription\">" . $rss_channel["ITEMS"][$i]["DESCRIPTION"] . "</div><br />"); }
} else {
print ("<b>There are no articles in this feed.</b>");
}
}
print ("<br/><span style='font-size:xx-small;'>www.nelsonk.com.ar</span>");
?>
Lo saque del problema que le surgio a Samuel2005, http://www.forosdelweb.com/f18/leer-rss-con-php-388826/

Lo que tu podrias hacer es la consulta a partir de estas lineas:
(El codigo varia un poco ya que este es el personalizado por mi):
Cita:
if (isset($rss_channel["ITEMS"])) {
if (count($rss_channel["ITEMS"]) > 0) {
for($i = 0;$i < count($rss_channel["ITEMS"]);$i++) {
if (isset($rss_channel["ITEMS"][$i]["LINK"])) {
print ("\n<div class='post'><h2 class='title'>" . utf8_decode($rss_channel["ITEMS"][$i]["TITLE"]) . "</h2>\n");
} else {
print ("\n<div class='post'><h2 class='title'>" . utf8_decode($rss_channel["ITEMS"][$i]["TITLE"]) . "</h2>\n");
}
print ("<div class='entry'><p>" . utf8_decode($rss_channel["ITEMS"][$i]["DESCRIPTION"]) . "</p></div>\n</div>\n"); }
} else {
print ("<b>No hay articulos.</b>");
}

}
En ese mismo if lo que deberias hacer es la consulta e insertar, por ejemplo:
Cita:
INSERT INTO noticias (titulo, descripcion) VALUES ('$rss_channel[ITEMS][$i][TITLE]', '$rss_channel[ITEMS][$i][DESCRIPTION]')
Eso seria un ejemplo basico, podrias personalizarlo a tu manera. Suerte