Foros del Web » Programando para Internet » PHP »

Leer feed para actualizar mi base de datos

Estas en el tema de Leer feed para actualizar mi base de datos en el foro de PHP en Foros del Web. Hola muy buenas a todos. Tengo una idea en mente y os queria preguntar, se que es posible pero no se como hacerlo. Mi idea ...
  #1 (permalink)  
Antiguo 23/02/2011, 09:31
 
Fecha de Ingreso: abril-2010
Mensajes: 86
Antigüedad: 14 años, 6 meses
Puntos: 0
Leer feed para actualizar mi base de datos

Hola muy buenas a todos.

Tengo una idea en mente y os queria preguntar, se que es posible pero no se como hacerlo.
Mi idea es actualizar mi web utilizando rss de otras webs, la idea no es meter un reader y mostrar los datos del feed. Mi idea es poder leer el feed y poder pasar esos datos a mi base de datos para manejarlos como yo quiera.
Un ejemplo claro seria algo como:

Feed externa:
url: http://www.elnombredecualquierweb.com/articulo1.html
imagen: patitos.jpg
texto: Mira que monos los patitos cruzando la carretera.

Y lo que yo querria hacer es poder llenar una tabla de mi base de datos con esos datos

campo 1 de mi tabla : http://www.elnombredecualquierweb.com/articulo1.html
campo 2 de mi tabla patitos.jpg
campo 3 de mi tabla: Mira que monos los patitos cruzando la carretera.

¿Me explico?

Saludos y gracias a todos !!
  #2 (permalink)  
Antiguo 23/02/2011, 12:41
 
Fecha de Ingreso: abril-2010
Mensajes: 86
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Leer feed para actualizar mi base de datos

No sabe nadie guiarme un poco? donde buscar o algo...

No se si no me expliqué bien, si es asi diganmelo y lo intento de nuevo


Saludos y gracias de nuevo a todos !!
  #3 (permalink)  
Antiguo 23/02/2011, 12:57
Avatar de almagropaco_  
Fecha de Ingreso: marzo-2008
Ubicación: Mar del Plata
Mensajes: 854
Antigüedad: 16 años, 8 meses
Puntos: 25
Respuesta: Leer feed para actualizar mi base de datos

El lector de Feed, va el que tengo yo en mi web, distingue titulos, descripcion de contenido. Entonces podrias hacer eso simplamente, esperame que ahora busco el codigo y lo pongo aca.
  #4 (permalink)  
Antiguo 23/02/2011, 13:01
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 11 meses
Puntos: 51
Respuesta: Leer feed para actualizar mi base de datos

No es tan dificil:

1) leés el feed ( supongo xml ) con file_get_contents o cURL

2) procesas el xml con simplexml

3) guardás en la base de datos.
  #5 (permalink)  
Antiguo 23/02/2011, 13:04
Avatar de almagropaco_  
Fecha de Ingreso: marzo-2008
Ubicación: Mar del Plata
Mensajes: 854
Antigüedad: 16 años, 8 meses
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

Etiquetas: feed
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:22.