Actualmente estoy usando Magpie RSS, pero a veces se cae cuando el feed RSS o Atom no está bien formado. ¿Hay alguna otra opción para analizar feeds RSS y Atom con PHP?La mejor manera de analizar feeds RSS/Atom con PHP
Respuesta
Sus otras opciones incluyen:
Zend Feed http://framework.zend.com/manual/en/zend.feed.html – artur
No me gustan tales "respuestas", dando enlaces sin ningún comentario. Parece googlearlo y vincularlo con algunos resultados principales. Especialmente porque el asker tiene algo de experiencia en RSS y necesita un analizador * mejor *. –
En caso de que alguien necesite un consejo, Último RSS es el más fácil de los tres mencionados anteriormente. Solo necesita 1 archivo para "requerir", y puede obtener el RSS dentro de 5 líneas, con una salida de matriz decente. – Raptor
utilizo SimplePie a analizar un canal lector de Google y funciona muy bien y tiene un conjunto de características decente .
Por supuesto, no lo he probado con feeds RSS/Atom no bien formados, así que no sé cómo lo hace, supongo que los de Google son bastante compatibles con los estándares. :)
La biblioteca HTML Tidy es capaz de corregir algunos archivos XML con formato incorrecto. Ejecutar sus feeds a través de eso antes de pasarlos al analizador puede ayudar.
Siempre he usado the SimpleXML functions built in to PHP para analizar documentos XML. Es uno de los pocos analizadores genéricos que tiene una estructura intuitiva, lo que hace que sea extremadamente fácil crear una clase significativa para algo específico como un feed RSS. Además, detectará advertencias y errores XML, y al encontrar cualquiera, simplemente podría ejecutar la fuente a través de algo como HTML Tidy (como lo mencionó ceejayoz) para limpiarlo e intentarlo de nuevo.
considerar esta clase muy áspero, simple usando SimpleXML:
class BlogPost
{
var $date;
var $ts;
var $link;
var $title;
var $text;
}
class BlogFeed
{
var $posts = array();
function __construct($file_or_url)
{
$file_or_url = $this->resolveFile($file_or_url);
if (!($x = simplexml_load_file($file_or_url)))
return;
foreach ($x->channel->item as $item)
{
$post = new BlogPost();
$post->date = (string) $item->pubDate;
$post->ts = strtotime($item->pubDate);
$post->link = (string) $item->link;
$post->title = (string) $item->title;
$post->text = (string) $item->description;
// Create summary as a shortened body and remove images,
// extraneous line breaks, etc.
$post->summary = $this->summarizeText($post->text);
$this->posts[] = $post;
}
}
private function resolveFile($file_or_url) {
if (!preg_match('|^https?:|', $file_or_url))
$feed_uri = $_SERVER['DOCUMENT_ROOT'] .'/shared/xml/'. $file_or_url;
else
$feed_uri = $file_or_url;
return $feed_uri;
}
private function summarizeText($summary) {
$summary = strip_tags($summary);
// Truncate summary line to 100 characters
$max_len = 100;
if (strlen($summary) > $max_len)
$summary = substr($summary, 0, $max_len) . '...';
return $summary;
}
}
tiene una etiqueta final sin etiqueta de inicio. ;) –
Bueno, tenía uno, pero estaba siendo comido por el formateador de código de SO ya que no tenía una línea vacía encima. En una nota relacionada, no comenzaste tu oración con una letra mayúscula. ;) –
Por favor, cambie '$ feed_uri = $ feed_or_url;' a '$ feed_uri = $ file_or_url;' ... además de eso, ¡gracias por este código! ¡Funciona genial! – Tim
Si el alimento no se XML bien formado, que se supone que rechazarla, sin excepciones. Tiene derecho a llamar al creador de feeds a bozo.
De lo contrario, estamos allanando el camino al desastre que terminó en HTML.
+1, no debería intentar trabajar con ningún XML que no esté bien formado. Hemos tenido malas experiencias con ellos, créanme, fue un gran dolor :( –
Sin embargo, los programadores no pueden elegir socios comerciales y tienen que analizar lo que se les ofrece. –
¿Qué sucede si está creando un RSS/Atom universal? lector de fuentes? Si algún archivo xml mal formado puede "ensuciar" tu HTML, ¿quién es el Bozo?;) sé liberal en lo que recibes. – yPhil
Personalmente uso de piensos BNC avanzada parser- me gusta el sistema de plantillas que es muy fácil de usar
Con 4 líneas, importar un rss a una matriz.
$feed = implode(file('http://yourdomains.com/feed.rss'));
$xml = simplexml_load_string($feed);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
Para una solución más compleja
$feed = new DOMDocument();
$feed->load('file.rss');
$json = array();
$json['title'] = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
$json['description'] = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('description')->item(0)->firstChild->nodeValue;
$json['link'] = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('link')->item(0)->firstChild->nodeValue;
$items = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('item');
$json['item'] = array();
$i = 0;
foreach($items as $key => $item) {
$title = $item->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
$description = $item->getElementsByTagName('description')->item(0)->firstChild->nodeValue;
$pubDate = $item->getElementsByTagName('pubDate')->item(0)->firstChild->nodeValue;
$guid = $item->getElementsByTagName('guid')->item(0)->firstChild->nodeValue;
$json['item'][$key]['title'] = $title;
$json['item'][$key]['description'] = $description;
$json['item'][$key]['pubdate'] = $pubDate;
$json['item'][$key]['guid'] = $guid;
}
echo json_encode($json);
Otra gran analizador libre - http://bncscripts.com/free-php-rss-parser/ Es muy ligero (sólo 3 kb) y fácil de usar!
no puede decirse que es "excelente" usando gzinflate y base64_decode, generalmente deshabilitado por razones de seguridad. –
me gustaría introducir script sencillo para analizar RSS:
$i = 0; // counter
$url = "http://www.banki.ru/xml/news.rss"; // url to parse
$rss = simplexml_load_file($url); // XML parser
// RSS items loop
print '<h2><img style="vertical-align: middle;" src="'.$rss->channel->image->url.'" /> '.$rss->channel->title.'</h2>'; // channel title + img with src
foreach($rss->channel->item as $item) {
if ($i < 10) { // parse only 10 items
print '<a href="'.$item->link.'">'.$item->title.'</a><br />';
}
$i++;
}
El lector PHP RSS - http://www.scriptol.com/rss/rss-reader.php - es un analizador completo pero sencillo utilizado por miles de usuarios ...
- 1. ¿La mejor manera de analizar el flotador?
- 2. Mejor manera de analizar un HTML no válido en PHP
- 3. Feeds RSS en PHP
- 4. Cómo analizar rss-feeds/xml en un guión de shell
- 5. ¿Cuál es la mejor manera de analizar una gramática simple?
- 6. La mejor manera de hacer hooks PHP
- 7. La mejor manera de analizar Java en Java
- 8. ¿La mejor manera de analizar HTML en Qt?
- 9. La mejor manera de crear un PDF con PHP
- 10. Mejor manera de analizar un documento de texto
- 11. ¿Cuál es la mejor manera de analizar Paypal NVP en PHP?
- 12. Mejor/más fácil manera de analizar los parámetros de configuración en Sh/Bash y php
- 13. Mejor estructura de base de datos para almacenar feeds RSS
- 14. cómo analizar JSONP con PHP
- 15. Analizar operaciones matemáticas con PHP
- 16. Mejor manera de analizar DateTime en el servidor SQL
- 17. mejor manera de analizar espacio separado del texto
- 18. Analizando Json Feeds con google Gson
- 19. ¿La mejor manera de devolver html desde la función php?
- 20. ¿Cuál es la mejor manera de analizar el gran archivo JSON e insertarlo en la base de datos utilizando php?
- 21. La mejor manera de comprimir una cadena en PHP
- 22. ¿La mejor manera de ejecutar periódicamente un script PHP?
- 23. ¿La mejor manera de incluir archivos en PHP?
- 24. ¿La mejor manera de documentar el código AJAX + PHP?
- 25. ¿Cuál es la mejor manera de comparar cadenas hash? (PHP)
- 26. Cuál es la mejor manera de paginar resultados en php
- 27. La mejor manera de leer el archivo zip en PHP
- 28. La mejor manera de permitir complementos para una aplicación PHP
- 29. ¿La mejor manera de destruir un objeto PHP?
- 30. La mejor manera de codificar y decodificar texto PHP
Hay un problema con esta solicitud la mayoría de los lectores de Feed están utilizando los lectores de núcleo XML de php y si el XML no está Bien Formateado como lo requieren los estándares XML, caerá sobre él podría mirar los que no usan lectores XML y usar un Text Reader sin embargo la carga en el servidor aumentará drásticamente. Sé que esto está respondido Estoy haciendo que las personas sean conscientes de los inconvenientes del uso de lectores de fuentes XML –
Nunca intente analizar XML no válido. Culpa a la fuente. – Lothar