Pedigreen kotisivuilla näkyy reaaliaikaisesti heidän Facebook fanisivujen fanimäärä. Osaako joku kertoa miten tällaisen saa oikein tehtyä? Pelkkänä tekstinä, ilman flashiä.
Ohjelma kirjautuu ensin sivulle (Facebook) jonka jälkeen se suunnistaa sivulle jossa on fanimäärä. Tämän jälkeen se parsii kaiken muun fanimäärän ympäriltä ja tulostaa sen.
Vastaavan voi kirjoittaa PHP:llä, mutta tämä hidastaa sivunlatauksia aivan turhaan, joten kannattaa ajaa se esimerkiksi enintään kymmenen minuutin välein.
Mutta, toisaaltaan sitä ei tarvitse edes automaattisesti päivittää. Tuskin kukaan käyttäjä on niin kauaa samalla sivulla, että se ehtii muuttua. (Empä sitten tiedä, että miten niitä faneja siellä tulee.)
Tarkoitankin ihan tavallisia sivunlatauksia. Jos palvelin joka kerta lataa Facebookista sivuja, käyttäjän odotusaika kaksinkertaistuu (ellei enemmänkin, jos tarvitaan useampi lataus).
Onkin tietysti aivan toinen kysymys, kiinnostaako ketään täsmällinen lukumäärä. Varmaan riittäisi, että päivittää sen kerran tai pari vuorokaudessa.
Tietenkin voi tehdä kuten tuolla pedigreen sivuilla, että muu sivu latautuu ensin ja sen jälkeen vasta ladataan fanien määrä, jolloin sivun peruslataus ei hidastu...
<?php ini_set('user_agent', 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)'); $facebook = file_get_contents('http://www.facebook.com/Pedigree.Koirien.ehdoilla'); $facebooks = strpos($facebook, "box_header clearfix"); echo str_replace(".", ",", floatval(str_replace(",", ".", substr($facebook, $facebooks + 33, 30)))); ?>
Tuo toimii ainakin kyseisellä ryhmällä (Vähän purkka ratkaisu), mutta muista en tiedä. Saat itse koittaa.
manne kirjoitti:
<?php ini_set('user_agent', 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)'); $facebook = file_get_contents('http://www.facebook.com/Pedigree.Koirien.ehdoilla'); $regex = '/<span>6 of (.+?) fans/'; preg_match($regex, $facebook, $fanit); echo $fanit[1]; ?>Tässä toinen vaihtoehto, toimii ainakin kaikilla sivuilla mitä itse koitin.
En tiiä varmaan, kun en facebookkia käytä, mutta kuulostaisi että tuo ei toimi jos on alle 6 fania?
OILgame kirjoitti:
En tiiä varmaan, kun en facebookkia käytä, mutta kuulostaisi että tuo ei toimi jos on alle 6 fania?
Totta turiset. Koska se ettii siitä kohtaa missä mainitaan 6 / kaikki fanit.
Ehkä loogisemmin näin:
<?php $regex = '#<span>(?:.+?\\s+)?([0-9,]+)\\s+fans?</span>#'; if (preg_match($regex, $teksti, $fanit)) { $fanit = intval(str_replace(',', '', $fanit[1])); } else { $fanit = 0; }
En tiedä, onko systeemi toteutettu niin hienosti, että esimerkiksi kysymysmerkki s-kirjaimen perässä olisi tarpeen yhden fanin tapauksessa, mutta onpa sekin tarkistettu. :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.