Kyselin viime vuoden puolelle miten Facebookin minkä tahansa sivun fanimäärän saisi jotenkin "kaapattua" omille nettisivuille. Keskustelu oli osoitteessa https://www.ohjelmointiputka.net/keskustelu/
Nyt tuo Facebook on uusiutunut jollain tavalla, enkä saa millään tavalla enää toimimaan tuota "kaappausta". Yhtenä ongelmana on varmasti minun amatöörimäisyys... Olisko jollain jonkinlaista ratkaisua tähän ongelmaan?
Mikäli sinulla on käytössä Metabolixin edellisessä ketjussa esittämä ratkaisu, tavitset siihen uuden säännöllisen lausekkeen. Linkki sivuun, josta fanimäärä pitäisi "kaapata", tai pätkä sivun lähdekoodia siitä kohtaa, jossa fanimäärä ilmoitetaan, auttaisi huomattavasti.
Esimerkkinä voisi ottaa vaikka tuon Pedigree Facebook-sivun http://www.facebook.com/Pedigree.Koirien.
Ja lähdekoodista löytyy tällainen kohta:
<h5 class="box_header UITitle UITitle_h5">17 325 henkilöä tykkää tästä.</h5>
Facebookilla on valmiina fanilaskureita, mutta haluan tulostaa fanimäärän sellaisilta sivuilta joissa en ole ylläpitäjä. Lisäksi ajattelin tehdä sellaisen jatkon tuohon, että kun tietty fanimäärä ylittyy, minulle tulee automaattisesti sähköpostia. Tuon sähköpostiosuuden osaan tehdä, mutta tuo toisen sivun lähdekoodista kaappaaminen ei jotenkin onnistu, ainakaan tämän Facebookin osalta.
Ja juuri tuo preg_match -funktion käyttö tässä kohtaa olisi mukava oppia.
Kokeile tätä koodia:
<?php preg_match ('/\<h5 class\="box_header UITitle UITitle_h5"\>([0-9 ]*?) henkilöä tykkää tästä/', $sivun_lahdekoodi, $faneja); $faneja = intval (str_replace (' ', '', $faneja [1]));
Mikäli haluat opetella säännöllisiä lausekkeita, Ohjelmointiputkasta löytyy opas niistä.
Edit: muokkasin lauseketta hieman.
<?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?v=wall'); preg_match('/([0-9 ]{2,}) henkil/',$facebook,$sum); $fanit = intval(str_replace(" ","",$sum[1])); echo $fanit; ?>
testattu ja toimii.
Plop, pahoitteluni, pyyhin semihyödyllisen vastaukseni kun en puusilmänä huomannut mainittua "minkä tahansa sivun." Kyllähän tuohon regexpilläkin pääsee käsiksi, mutta vanha kunnon strpos+substr-kombo on näissä simppeleissä tapauksissa paljon nopeampi vaihtoehto. Semanttinen vaihtoehto on käyttää DOMia. Siihen, hiertääkö sivujen villi parsiminen Feissarin käyttöehtoja vastaan, en osaa sanoa pikavilauksella juuta enkä jaata. Varmaan joku ehdottikin jonkinmoista kakutusta jo aiemmin.
Aivan loistavaa! Kiitoksia oikein paljon. Tuohon suuntaan sen teinkin, mutta en ikinä saanut minkäänlaista tulostusta. Ongelma taisi olla noiden keno- ja kauttaviivojen kanssa... Kiitoksia vielä kerran kaikille!
Antamani esimerkki vaatii muuten vähintään sen 2 numeroisen luvun.
awly kirjoitti:
Antamani esimerkki vaatii muuten vähintään sen 2 numeroisen luvun.
Onko tuohon jokin syy? Minulle ei tule mieleen mitään syytä tehdä sitä noin.
Huomasin tosin juuri, että minunkin toteutukseni vaatii vähintään kaksi henkilöä. Se tosin on helppo korjata lisäämällä kysymysmerkki ä:n perään.
-tossu- kirjoitti:
...
Onko tuohon jokin syy? Minulle ei tule mieleen mitään syytä tehdä sitä noin.
...
Se johtuu tästä {2,} härpäkästä. Lyhyemmät vaihtoehdot {1,} tai + löytää sivulta jonkun täysin väärän kohdan ja tulostaa pelkästään luvun 2.
Tiedän kyllä että se johtuu tuosta {2,} -härpäkkeestä. Tuota lausekettasi kannattaisi muutenkin tarkentaa, se poimii herkästi väärän luvun, ja samalla se toimisi myös yhden numeron mittaisilla luvuilla.
preg_match('/h5\\\">([0-9 ]+) henkil/',$facebook,$sum);
Nyt pitäis löytää niin yksi- kuin moninumeroisetkin luvut.
Itse tykkään käyttää palveluiden tarjoamia apeja.
<?php $page_id = 150335959471; $data = json_decode(file_get_contents('http://graph.facebook.com/' . $page_id), true); echo 'Sivulla <a href="' . $data['link'] . '">' . $data['name'] . '</a> on ' . $data['fan_count']. ' fania.'; ?>
Tulostaa:
Sivulla Pedigree -Koirien ehdoilla on 17306 fania.
^ Hah, owned.
"joo morjens toi on kans hyvä, mut tos ei pääse leikii millää säännöllisil_ _lauseil"
Mitenköhän must tuntuu, et jos Stige olis oikeasti kiinnostunut, olisi hän löytänyt samaisen "urlin" ihan Facebookin Dev dokkareista.
Aihe on jo aika vanha, joten et voi enää vastata siihen.