Seznam.cz a RSS – jak to zpracovat?

**Noname píše:** omlouvám se za dotaz, ale je tu mnoho znalých lidí, kteří možná znají odpověď na jeden problém – Seznam.cz umožňuje přidat si na homepage RSS zdroje, mezi pár vyvolenými servery, které jsou nabízeny standardně je dokonce i Marigold.cz. Problém je, že po migraci Seznam odmítá nové RSS akceptovat, ukazuje stále staré články. Přitom původní adresy na RSS zdroje jsou funkční (mod rewrite).

Hlavně ale Seznam odmítá akceptovat i když dám přidat konktrétní adresu na Marigoldí RSS zdroj, nezkousne ani http://www.marigold.cz/feed (plně validní RSS 2.0 zdroj), ani http://www.marigold.cz/wp-rss2.php (to samé bez mod rewrite), ani http://www.marigold.cz/wp-rss.php (RSS 1.0 zdroj). Nevíte někdo nějaký fígl jak udělat RSS zdroj, který Seznam „sežere“? (p.s.: support linka Seznamu samozřejmě nefunguje)

Jak se vám líbil článek?
1 Star2 Stars3 Stars4 Stars5 Stars (hlasováno 17×, průměr: 1,82)
Loading...

29 komentářů

  • A co se zeptat rovnou tady? Pana nejvyššího a nejchytřejšího?
    http://ilblog.sblog.cz/

  • si měl zkusit Iva na blogu 🙂

  • když mi nefunguje notepad, taky nevolám Billovi.

  • Je to divné. Nevadí jim třeba encoding? XML hlavička? Úvodní XML komentář? Postupně bych to zkoušel ubírat…

  • wu: nevím, musel bych to všechno zkoušet a těch možností jsou mraky. Je to plně validní RSS feed a čtečky s tím nemají problém, takže rozhodně bude chyba někde u nich. Ten wordpress feed skript je taky standardní, neměnili jsme na něm ani tečku, takže by se to teoreticky mělo týkat všech wp feedů, jenže netýká – jiné feedy z jiných wp serverů fungují. Možná tam zůstaly nějaké divné konstrukce z předchozího systému, ale prostě nevím kde je problém

  • Podíval jsem se na hlavičky od serveru a je tam několik podivností. Např. chybí Content-Length. Ale já osobně vsázím na tohle: Content-Encoding: gzip. Zkusil bych to vypnout …

  • Stejný problém je i na http://www.netvibes.com
    Nevezme mi ani jednu z těch tří rss adres.

  • wu – zkusil jsem, nepomáhá, zkusil jsem nastavit jen jeden RSS příspěvek, tj. zobrazoval se tam jen tento (takže ani staré články to nemohly způsobovat) – nefungovalo to. Nastavil jsem, aby tam dával jen výtah místo celého článku, nepomohlo to.

  • tokugawa kratce.cz ani prehled.net s tím nemají problémy, stejně tak žádná sw čtečka, kterou jsem zkoušel

  • Moc se v tom nevyznám, ale třeba blog Filipa Rožánka blok.rozanek.cz , který je myslím také na WordPressu mi na Seznamu funguje. (narozdíl od např. Panacek.com který také jako vy nefunguje)

  • noname: hmm, snad že by content-length? To by mohlo vést k neúplnému načtení a tudíž nevaliditě…

  • Filip Rožánek to má o dost jiné:
    1) má content-length
    2) servíruje content type text/html
    3) nemá v xml úvodní xml deklaraci

  • Co se to stalo s mým komentářem? Aha, texy. Chtěl jsem jenom očíslovat možnosti 🙂

  • no že by chtěli po xml feedech aby byly s text html deklarací a typem se mi nezdá, ten content-length by asi u blbých systémů mohl být problém (je to ovšem nepovinný parametr), the question is, jak jej tam dostat, netuším jak spočítat kolik bude mít rss feed bytů. Filip používá prastarý wordpress (1.5), takže to nemusí být vůbec tím.

  • Ještě bych zkusil uložit hotové RSS jako xml soubor, dát na server a nechat ho Seznamem načíst. Pokud to projde, je to v nějakém nastavení pro posílání dynamických souborů.

  • wu – výborný nápad, díky, tohle funguje. Takže teď ještě kde je chyba – samozřejmě nový soubor (marigold.xml) má content-length ale všiml jsem si jiného rozdílu a tam je podle mě jádro pudla – kódování. To XML jsem uložil normálně jako UTF, ovšem když si to prohlídnu, tak má na první pohled „pomršenou češtinu“, ale funguje, na rozdíl od toho, který ji má na první pohled správnou, ale nefunguje. Srovnejte
    http://web-sniffer.net/?url=http%3A%2F%2Fwww.marigold.cz%2Fmarigold.xml&submit=Submit&http=1.1&gzip=yes&type=GET&ua=Opera%2F9.00+%28Windows+NT+5.1%3B+U%3B+cs%29+Web-Sniffer%2F1.0.24
    a
    http://web-sniffer.net/?url=http%3A%2F%2Fwww.marigold.cz%2Ffeed&submit=Submit&http=1.1&gzip=yes&type=GET&ua=Opera%2F9.00+%28Windows+NT+5.1%3B+U%3B+cs%29+Web-Sniffer%2F1.0.24
    naprosto nechápu a jsem ztracen, nechápu proč jedno z toho prohlížeč automaticky odhadne jako utf-8 a zobrazí správně a to druhé odhadne a zobrazí špatně (když se to ručně přepne na utf-8, tak se i ta druhá stránka zobrazí správně). Takže – jak dostat do php skriptu délku výsledného dokumentu, abychom mohli odflitrovat ten content length problém?

  • jinak soubor wp-rss2 php má tento úvod, takže tam někam zřejmě patří „nějak“ doplnit funkce pro vypsání délky

    /—code php
    < ?php if (empty($wp)) { require_once('wp-config.php'); wp('feed=rss2'); } header('Content-type: text/xml; charset=' . get_settings('blog_charset'), true); $more = 1; ?>
    < ?php echo '‚; ?>
    \—

  • 18:31:16$~/Desktop/cz-local-search/img>telnet http://www.marigold.cz 80
    Trying 217.11.242.16…
    Connected to marigold.cz.
    Escape character is ‚^]‘.
    GET /feed/ HTTP/1.1
    Host: http://www.marigold.cz

    HTTP/1.1 200 OK
    Date: Thu, 09 Nov 2006 17:29:26 GMT
    Server: Apache
    X-Pingback: http://www.marigold.cz/xmlrpc.php
    Last-Modified: Thu, 09 Nov 2006 12:51:17 GMT
    ETag: „06144929e5dad2a42005342aab0cacf1“
    Status: 200 OK
    Connection: close
    Transfer-Encoding: chunked
    Content-Type: text/xml; charset=UTF-8

    79b2


  • Tak ještě jednou s entitama, tam chybí pointa:

    18:31:16$~/Desktop/cz-local-search/img>telnet http://www.marigold.cz 80
    Trying 217.11.242.16…
    Connected to marigold.cz.
    Escape character is ‚^]‘.
    GET /feed/ HTTP/1.1
    Host: http://www.marigold.cz

    HTTP/1.1 200 OK
    Date: Thu, 09 Nov 2006 17:29:26 GMT
    Server: Apache
    X-Pingback: http://www.marigold.cz/xmlrpc.php
    Last-Modified: Thu, 09 Nov 2006 12:51:17 GMT
    ETag: „06144929e5dad2a42005342aab0cacf1″
    Status: 200 OK
    Connection: close
    Transfer-Encoding: chunked
    Content-Type: text/xml; charset=UTF-8

    79b2
    <?xml version=“1.0″ encoding=“UTF-8″?>
    <!– generator=“wordpress/2.0.5″ –>
    <rss version=“2.0“

    To „79b2“ mi připadá podezřelý, myslím, že to tam nemá co dělat. Podíval bych se, jestli tam neposíláš identifikační byty UTF-8.
    Ale možná je to i něco jinýho 🙂

  • ad Pachollini: Poprvé vidíš chunked (nakouskovaný) přenos? Ten začátek není příznak utf-8, to je délka příslušného kousku (chunk).
    Aby se nakonec neukázalo, že géniové v Seznamu neumí http/1.1 (umět chunked je povinné 🙂

  • Tak třeba já jsem měl doteď ve čtečce tohle URL http://www.marigold.cz/feed/rss2.xml , které už není ani feed ani rss…

  • Aby byl v response Content-Length se da vetsinou nastavit i na urovni HTTP serveru. Problem je v tom ze u skriptovanych veci se na zacatku nevi kolik dat se bude posilat, proto je to nevyplnene. Ale da se nastavit, aby se skriptovane veci nejdriv poskladaly na serveru, ohlavickovaly skutecnou velikosti a potom se teprve odesilaly na klienta. Mozna bych si vzpomnel kde je to u IIS, jednou jsem to tam nastavoval jako rychly workaround chyby moji aplikace 🙂

    Nicmene jako dlouhodobe reseni bych to nedoporucoval, navic bych to jako pricinu skoro vyloucil. Na Content-Length se neda spolehat nikdy a Seznam by mel mnohem vetsi problemy kdyby bez nej neumel pracovat.

  • Pro doplneni odkaz na to jak se to nastavuje a jak to funguje v IIS (i kdyz tusim ze to asi nepomuze :)):
    http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0b8f96a0-53ab-4ef4-ab2e-7bfc5b6f426d.mspx?mfr=true

  • … a jeste jeden napad: zkusil bych se zamerit na to jaka prijde hlavicka requestu ze Seznamu (odchytit ji v logu) a jaky skutecne response se vrati po tomhle requestu (na to se da vyuzit treba ta hlavicka a poslat znovu). Napriklad by podle me mohlo byt v hlavicce requestu zajimave Accept-Charset nebo Accept-Encoding.

    No, jen napady 🙂

  • Ja vedel ze jsem to s Content-Length kdysi davno delal nejak i v PHP 🙂
    http://www.edginet.org/techie/website/http.html
    Kapitola Content-Length header

    Staci dat na zacatek generovani XML ob_start(), na konec ob_end_flush() a pred to pridani HTTP hlavicky:
    header(‚Content-Length: ‚ . ob_get_length());

    Vyreseni problemu bych si od toho nesliboval, ale Content-Length to prida.

  • Koukám že jsme se trochu posunuli. Zkusil bych přidat content-length, vypnout chunked (Martin by mohl mít pravdu) a ten zip, no já nevím, možná taky. Aby to bylo co nejpodobnější statickému xml.

  • Robot, který stahuje stránku při prvním kontaktu, používá „GET **http://www.marigold.cz**/wp-rss2.php HTTP/1.1“. Marigold na to vrátí *404* a pak soubor vypíše (?). Pokud se volá jen „GET /wp-rss2.php HTTP/1.X“, vyhodí server klasicky *200*.

    No a Seznam vcelku pochopitelně kontroluje nejdřív hlavičky a na těch se zarazí.

  • re Jan – děkuji, to je zajímavá informace že Seznam používá tenhle způsob určený pro anonymní proxy. To bude zřejmě ta chyba, předpokládám, že to je o nějakém nastavení u poskytovatele, dnes v 18:00 se bude konečně přecházet na ten nethost, tak se mi na to pak kouknou

  • Sice byl problém už vyřešen, ale ještě doplním – pokud je transfer-encoding chunked, pak je nesmysl posílat i content-length! Plyne to už z principu – chunked je určen pro případy, kdy nevíme celkovou délku a posíláme odpověď po kouscích (u kterých délku známe).

    Každý kdo se montuje do web aplikací by měl mít protokol http nastudovaný!