prace nad dnews postępują powoli. bardzo powoli.
pisałem dziś kawałek kodu do czytania rss'ów/atom'ów/rdf'ów.
prosty test na rss'ach planety ubuntu i wynik:
undefined entity at line 527, column 19, byte 70093 at /usr/lib/perl5/XML/Parser.pm line 187
wrrrrrr.
a co jest w tej linii?
=> head -n 527 planet.ubuntulinux.org.xml | tail -n 1 <title>Sebastian Kügler: We are out of real life</title>
jeśli nie zgadłeś – problemem jest ten ü.
co z tym zrobić? popytałem na ircu, poszukałem na googlu. w końcu trafiłem na stronę która mówi o przyczynach i jak zapobiec.
w związku z tym musiałem zastosować taki kawałek hacka:
$content =~ s{ \A ( \s* <\?.*\?> \s* ) < ([A-Z0-9:_-]+) }{$1 . get_doctype($2) . "<" . $2}eixms;
gdzie funkcja get_doctype wygląda:
sub get_doctype { my $tag = shift; return <<__DOCTYPE__; <!DOCTYPE $tag [ <!ENTITY % HTMLlat1 PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"> %HTMLlat1; <!ENTITY % HTMLspecial PUBLIC "-//W3C//ENTITIES Special for XHTML//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent"> %HTMLspecial; <!ENTITY % HTMLsymbol PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent"> %HTMLsymbol; ]> __DOCTYPE__ }
co to powoduje?
wstawia przed pierwszy tag w xml'u deklarację używania entity z html'a.
po tym – xml::feed działa mi już poprawnie nie marudząc o nic 🙂
wniosek? część (zgaduję, że większość) feedów rdf/rss/atom jest zwalona jeśli chodzi o poprawność xml'a.
spytam z głupia frant: czym jest dnews? agregatorem rssów?
tak poza tym, to miło, że piszesz dalej:)
czy ma byc, bo jak widać prace postępują bardzo powoli (strasznie przeszkadza fakt, że nie możemy z webmasterem usiąść i jednocześnie popracować.
dnews ma być agregatorem rss’ów z dodatkowymi funkcjami. filtry, powiadomienia, i sporo innych.