Kontakt Skriv ut
Dela på Twitter Dela på Facebook RPC-ping, ja...

Datum: 2010-05-13

Nu har jag äntligen löst problemet med den automatiska RPC-pingen i OZP (mitt hembyggda webbpubliceringssystem). Tror jag. Det började med att jag tog hem en färdig funktion för PHP som jag sedan modifierade rejält för att passa i det egna systemet (det var i princip bara curl och headers jag var intresserad av), och i viss mån verkade den först fungera ganska bra.

Enligt Anders brukar de dock bugga ganska rejält, i alla fall hade det gjort det för hans del.

Det vill säga att man skickar en automatisk ping från systemet, och får ett svar från länkportalen som visar att det har tagits emot, men sedan indexeras inte sidorna trots allt. Och det verkade som om det var samma problem med den funktion jag byggde ihop.

OZP har en ganska bra logg/statistikfunktion som visar när man får besök från de olika länkportalernas crawlers. Det är relativt enkelt att identifiera t ex Twingly, som sänder en väldigt informativ header med user agent-information, "Twingly Recon" säger den, plus att jag vet vilka IP-adresser deras crawlers använder. Dessvärre har jag inte lyckats identifiera user agent-strängen för Bloggportalen eller Nyligen.se (så om du vet hur de ser ut får du gärna tipsa mig), men å andra sidan funkar det väldigt bra med endast Twingly.

Vad är problemet? Jo, när det fungerar med pingandet innebär det oftast ett besök från crawlern inom några minuter. Visserligen står det på de olika portalernas sidor att man ska ha tålamod, eftersom det kan dröja innan de dyker upp. Men min erfarenhet är att om crawlern inte dyker upp inom 10-15 minuter dyker den inte upp överhuvudtaget.

Alternativt att det beror på at pinget trots allt inte tagits emot eller skickats korrekt.

Först tänkte jag att en smidig lösning kunde vara att helt enkelt skicka ett automatiskt ping med olika intervaller. Kanske med 10 minuters mellanrum, eller varje halvtimme. Dessvärre brukar inte länkportalerna gilla att man gör det, eftersom de vill ha ping endast när innehållet har uppdaterats. Just dessa automatiska ping innebär annars att det kanske blir så stor belastning att de missar "riktiga" ping. En webbplats KAN visst bli blockerad om man har otur och pingar överdrivet mycket, även om jag inte tror att risken är så stor.

Jaha, hur gör man då då?

Jag skissade fram en slags hybridlösning. OZP har ju PHP i botten. Av någon anledning finns det vissa myter kring PHP, bland annat att man inte kan objektorientera när man utvecklar i PHP, liksom att alla skript måste triggas genom en browser.

Fel, och fel. Man kan - och BÖR - objektorientera i PHP. Annars blir det gott om dubblerade funktioner, och man får ett system som efter ett tag blir helt oöverskådligt, även om man kanske inte behöver använda sig av objekt och konstruktorer i så stor omfattning. Det är även ganska lätt att sätta upp skript och funktioner som snurrar i bakgrunden på servern. Jag har löst det genom någonting så basalt som en scheduled task i Windows som med jämna mellanrum triggar ett visst skript. På Linux/Unix kan det lösas genom ett cron-jobb. Vill man vara lite mer hardcore kan man bygga ett eget program som körs som en service eller process och triggar vissa skript och funktioner med jämna mellanrum. OK, nog om det.

Eftersom jag har en del processer som går i bakgrunden och bland annat hämtar hem feedar som ska cachas (de sparas först lokalt för att minska laddningstiderna på O-ZONE) bestämde jag mig för att använda mig av samma funktion för RPC-pinget. Andra uppgifter som körs regelbundet är att städa bort skräpkod ur artiklarnas innehåll, att ta bort artikelkommentarer som inte blivit verifierade i tid, liksom att ta städa upp i besöksloggen eftersom vissa besök inte ska registreras som just besök (som crawlers från google och msn search).

Så jag lade in en ny variant av pinget som en bakgrundsprocess.

Det som nu händer när jag publicerar en ny artikel eller blogginlägg är att länkportalens och den lokala sajtens id läggs in i en ping-kö. Sajtens id behövs eftersom OZP stöder multipla webbplatser. Varje gång bakgrundsprocessserna körs kontrolleras kön. Så länge de ligger kvar i den kön kommer ett ping att skickas med ett visst intervall, beroende på vad jag har ställt in. Kanske med 10 eller 15 minuter emellan. Och så länge det finns någonting i kön kommer pingandet att fortsätta.

När ett besök från crawlern registreras och identifieras som rätt user agent (t ex Twingly)  och på rätt webbplats (i det här fallet www.o-zone.nu) tas den posten i kön bort, och bakgrundsprocessen slutar pinga. Skriver jag en ny artikel eller blogginlägg läggs en ny post in i kön och pingandet återupptas. Det känns som en ganska OK lösning trots allt, även om jag hade föredragit att det hade fungerat omedelbart.

Så, nu ska jag se om det här inlägget blir indexerat. Ska bli intressant. Sedan ska jag försöka lista ut hur Bloggportalen och Nyligen.se identifierar sig, så jag kan lägga in även dem.

Kommentera:

blog comments powered by Disqus
feedBlogginlägg

Not In My BackYard - helt rätt!
2012-01-27

Bra? För vem?
2012-01-20

Antidemokratisk faktion
2012-01-12

Höger eller vänster? Om vägen går rakt fram?
2012-01-09

Sociala utvecklare? Men snälla rara då...
2011-12-20

Sluss till en sång
2011-12-20

Som ett farväl?
2011-12-18

Vad har du i handväskan, Bea!
2011-12-16

This is truly a day of days
2011-12-12

Mitt förakt går inte att klä i ord
2011-12-02

feedInkommande länkar

DN:s ansvar och Ekens kis
2011-12-04

Med båda fötterna i klaveret: Om föräldraledighet och KulturSlussen
2011-11-26

Kulturskymning, Kulturelit och Kultursluss
2011-11-21

Något är ruttet i Eken
2011-11-16


2011-06-11

feedTwittrat

ozonenu: Insåg just vad jag skulle vilja ha - en subversionserver att köra i android-luren. Fast målgruppen känns väldigt snäv... ;-)

ozonenu: LG Intelligent Update försökte uppdatera sig själv. Fil för fil ersattes. Tills internetanslutningen dök. Gissa hur bra det funkar nu... ;-)

ozonenu: Filosoferar en del kring skillnaden mellan att vara social och socialt kompetent. Begreppen används gärna synonymt: http://t.co/YWujOLVN

ozonenu: Sitter och skriver gigantiska SQL-frågor, och tycker faktiskt att det är kul. Tre UNIONs som alla har JOINar. Måste börja bli sjuk... #geek

ozonenu: Där slog kreativiteten till. Shit med idéer jag fick helt plötsligt. Allt som behövdes var att höra om någon annans problem med någonting.

...