¿Has descomentado la línea 39? Yo he probado el programa que está en la primera página del hilo, después de las últimas modificaciones, y va bien.
En caso de dudas, mejor publica el programa que estás usando.
¿Puedes saber en qué línea se está produciendo el error? No me refiero al error del HTML::Entities, sino en qué línea del programa tuyo genera ese error.
Para hacer las pruebas, no te olvides de borrar el fichero de caché en cada ocasión. Si no, no genera el xml. Para mayor seguridad, elimina también el Marca.xml anterior.
A mí me ha funcionado bien con la línea 39, pero es posible llamar a una función llamada passthru(), que indica los valores que se usarán en la creación del objeto XML::RSS. Por ejemplo, podemos indicar la versión RSS para que sea v2.0. O el 'encoding' de salida, a otro que no sea el de por defecto 'UTF-8'.
Según la documentación de XML::RSS::FromHTML, XML::RSS activa la bandera de que las cadenas de caracteres analizadas son todas del tipo UTF-8.
He escrito una variación, para que el xml de salida está en codificación 'iso-8859-15' (la misma que la página de partida), y además, que
no cree entidades XML (por lo que el fichero resultado estará completamente codificado en 'iso-8859-15').
Using perl Syntax Highlighting
#!/usr/bin/perl
#
# Análisis del diario Marca
# Joaquín Ferrero. 20110624
#
use strict;
use warnings;
use utf8; # este programa está escrito en codificación utf8
package Marca;
#use Encode qw'decode';
use base 'XML::RSS::FromHTML';
sub init {
my $self = shift;
# configuración
$self->name('Marca');
$self->url('http://www.marca.com/futbol/1adivision.html');
$self->passthru({encoding => 'iso-8859-15', encode_output => 0 }); # condiciones de la salida
}
sub defineRSS {
my $self = shift;
my $xmlrss = shift;
# definiciones del RSS generado
$xmlrss->channel(
title => 'Fuente de titulares de Marca.com, Fútbol 1ª div.',
description => 'Titulares de la 1ª división de Fütbol en España',
);
}
sub makeItemList {
my $self = shift;
my $html = shift;
# interpretamos el código HTML y crear con ello una lista
my @list;
# $html = decode('iso-8859-15', $html);
while ($html =~ m|<h3><a href="(.*?)" title="(.*?)".+?<p>(.+?)<|smg){
# print "[$1][$2][$3]\n";
push(@list,{
link => $1,
title => $2,
description => $3,
});
}
return \@list;
}
sub addNewItem {
my $self = shift;
my ($xmlrss,$eachItem) = @_;
# crear cada elemento del RSS usando el método XML::RSS->add_item
$xmlrss->add_item(
link => $eachItem->{link },
title => $eachItem->{title },
description => $eachItem->{description},
);
}
#### nuestro programa principal
package main;
#use Marca; # No es necesario incluirle, porque está antes
my $rss = Marca->new();
$rss->update;
__END__
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Notas:
* el
use utf8; solo es necesario si estás trabajando (editando este programa) en una terminal o editor de textos con codificación utf8,
porque en las líneas 29 y 30 hay caracteres tildados, y debemos indicarle a Perl en qué codificación están. Una forma de evitar este lío sería que los caracteres de esas líneas estuvieran descritos como entidades unicode, como se describe en el módulo
charnames. Si estuvieras trabajando en otra codificación (distinta de iso-8859-1 y utf8), lo puedes indicar con el pragma
encoding.
* en la línea 21 es donde está la magia de esta última versión: indicamos la codificación de salida y que
no genere entidades XML. Editando el xml resultado, se ve la diferencia (más abajo).
* he comentado las líneas 13 y 41, porque ya no son necesarias (estoy indicando antes que la codificación de salida es la misma que la de entrada. No es muy ortodoxo, pero funciona).
* la expresión regular de la línea 43 se ha cambiado, porque los señores de Marca permiten poner titulares en la página pero sin enlace (sin
href). He cambiado los cuantificadores '+' por '*'.
El resultado es:
Using xml Syntax Highlighting
<?xml version="1.0" encoding="iso-8859-15"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
xmlns:admin="http://webns.net/mvcb/"
>
<channel rdf:about="">
<title>Fuente de titulares de Marca.com, Fútbol 1ª div.</title>
<link></link>
<description>Titulares de la 1ª división de Fütbol en España</description>
<items>
<rdf:Seq>
<rdf:li rdf:resource="" />
<rdf:li rdf:resource="http://www.marca.com/reportajes/2011/01/la_primera_vuelta/seccion_00.html" />
<rdf:li rdf:resource="http://www.marca.com/deporte/futbol/primera-division/2010-2011/dorsales/" />
<rdf:li rdf:resource="http://www.marca.com/2010/08/13/multimedia/graficos/1281720946.html" />
<rdf:li rdf:resource="http://www.marca.com/2009/11/13/multimedia/graficos/1258122822.html" />
<rdf:li rdf:resource="http://www.marca.com/2009/02/07/futbol/equipos/real_madrid/1234005565.html" />
<rdf:li rdf:resource="http://www.marca.com/edicion/marca/otros_deportes/graficos/es/desarrollo/1046308.html" />
<rdf:li rdf:resource="http://www.marca.com/edicion/marca/otros_deportes/graficos/es/desarrollo/1079288.html" />
</rdf:Seq>
</items>
</channel>
<item rdf:about="">
<title>Resumen 2010-2011</title>
<link></link>
<description>El Barcelona pudo con el 'efecto Mou'. Deportivo, Hércules y Almería descienden.</description>
</item>
<item rdf:about="http://www.marca.com/reportajes/2011/01/la_primera_vuelta/seccion_00.html">
<title>1ª Vuelta</title>
<link>http://www.marca.com/reportajes/2011/01/la_primera_vuelta/seccion_00.html</link>
<description>Consulta todos los detalles que nos han dejado los primeros cuatro meses de competición</description>
</item>
<item rdf:about="http://www.marca.com/deporte/futbol/primera-division/2010-2011/dorsales/">
<title>Todos los dorsales</title>
<link>http://www.marca.com/deporte/futbol/primera-division/2010-2011/dorsales/</link>
<description>Consulta todos los dorsales de los jugadores de la Liga BBVA</description>
</item>
<item rdf:about="http://www.marca.com/2010/08/13/multimedia/graficos/1281720946.html">
<title>La nueva perla del fútbol</title>
<link>http://www.marca.com/2010/08/13/multimedia/graficos/1281720946.html</link>
<description>Analizamos todas las cualidades del nuevo jugador del Real Madrid.</description>
</item>
<item rdf:about="http://www.marca.com/2009/11/13/multimedia/graficos/1258122822.html">
<title>Iniesta, el crack silencioso</title>
<link>http://www.marca.com/2009/11/13/multimedia/graficos/1258122822.html</link>
<description>Descubre todos los secretos del juego de Iniesta y su regate con sello propio.</description>
</item>
<item rdf:about="http://www.marca.com/2009/02/07/futbol/equipos/real_madrid/1234005565.html">
<title>Raúl González Blanco</title>
<link>http://www.marca.com/2009/02/07/futbol/equipos/real_madrid/1234005565.html</link>
<description>No te pierdas el gráfico sobre el '7' blanco tras convertirse en el máximo goleador de la historia del Madrid.</description>
</item>
<item rdf:about="http://www.marca.com/edicion/marca/otros_deportes/graficos/es/desarrollo/1046308.html">
<title>Leo Messi</title>
<link>http://www.marca.com/edicion/marca/otros_deportes/graficos/es/desarrollo/1046308.html</link>
<description>Diseccionamos las jugadas favoritas del azulgrana Leo Messi</description>
</item>
<item rdf:about="http://www.marca.com/edicion/marca/otros_deportes/graficos/es/desarrollo/1079288.html">
<title>Kun Agüero</title>
<link>http://www.marca.com/edicion/marca/otros_deportes/graficos/es/desarrollo/1079288.html</link>
<description>Analizamos todas sus características: remate, regates, control...</description>
</item>
</rdf:RDF>
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Observar que la cabecera marca que todo lo que sigue está en 'iso-8859-15'; y que todos los caracteres tildados, son de justo esa codificación, no son entidades XML.