Matchnutí pozice (#) v dokumentu Facebook botem

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
maarlin
Člen | 207
+
0
-

Mám na stránce pár odkazů přímo s pozicí – např.

/stats/342343/4-months#skip-navigation

Routa vypadá následovně:

$router[] = new NRoute('stats/<code>[/<interval>]', array(
    'presenter' => 'Countries',
    'action' => 'detail'
));

Vše funguje očekávaně, při návštěvě klasického prohlížeče, tedy interval se matchne jako 4-months.

Ovšem v případě, kdy Facebookový bot {facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)} prochází stránku kvůli získání náhledu při sdílení odkazu, tak se matchne interval jako 4-months#skip-navigation.

Nechápu proč se tak děje.

Zkoušel jsem i určit pravidla pro interval – <interval [^\#]>, stejný výsledek.

Editoval maarlin (26. 10. 2010 17:31)

Mikulas Dite
Člen | 756
+
0
-

Facebook pravděpodobně získá hash jako %3A místo #.

maarlin
Člen | 207
+
0
-

Mikulas Dite napsal(a):

Facebook pravděpodobně získá hash jako %3A místo #.

Souhlasím, taky mě to napadlo, tohle Facebook nedělá úplně dobře, ale dá se to nějak odfiltrovat v routě explicitně? Třeba ideálně určit nějaké pravidlo pro všechny proměnné – tuším že už tam nějaké defaultní je – třeba že to nežere lomítka atp. a tohle pravidlo uplatňovat jen v případě návštěvy botem…
Prostě (hodnota-promenne)%3A.* → mělo by se získat jen hodnota proměnné.

Edit: Tady si evidentně někdo stěžuje na úplně opačný problém:
http://efreedom.com/…er-Sharerphp

Editoval maarlin (26. 10. 2010 17:38)

Mikulas Dite
Člen | 756
+
0
-

Zkusil bych napsat jednouduchou debug akci, která vrátí požadavek – na ověření, jestli je to opravdu escapované, nebo ne. Pokud ano, bylo by lepší prozkoumat, v čem je problém (protože fb to normálně nedělá). Nastavovat na to routu bych bral až jako úplně poslední možnost.

maarlin
Člen | 207
+
0
-

Tak já v zásadě získávám tuhle informace z podrobných výpisů Laděnky, máš dojem že se dá získat ještě něco podrobnějšího, jak ověřit, že to je #, jeho encoded-alternativa, popř. něco jiného?

Spíše mě teď dost překvapilo při podrobnějším zkoumání, že se ten parametr (ve správném tvaru) dostal do samotného $_GETu…

Mikulas Dite
Člen | 756
+
0
-

Laděnka snad stačí, akorát si nejsem na 100 % jistý, jestli by ve výstupu escapované znaky nepřevedla.

Zítra to zkusím, zajímalo by mě, co se s linkem dělo, že v get nejsou i ostatní parametry.

Mikulas Dite
Člen | 756
+
0
-

Podle té první routy se do GET nic dostat nemůže. Pošli i ostatní, problém bude tam.