Získávejte data z Facebooku pomocí Graph API a cURL

Zhruba před rokem jsem pro VSadu.cz, webové stránky místního baru, vytvářel PHP skript, který z facebookové stránky vytáhne informace o blížících se událostech a zobrazí je na webu.

Nejedná se o nic složitého, skript využívá Graph API a notoficky známou PHP funkci cURL. V dnešním článku vám ukážu, jak takový skript funguje.

App ID a App Secret, bez nich to nepůjde

Podobně jako při práci s Google Maps API, o kterém jsem psal nedávno, je i pro
přístupup k facebookovým datům přes Graph API potřeba mít unikátní klíč a navíc také identifikátor aplikace, tedy App ID.

K získání App ID a App Secret je potřeba nejprve na facebook for developers vytvořit novou aplikaci, i když budete tvořit jen jednoduchý skript. K tomu na portálu slouží zelené tlačítko s nápisem + Add a New App.

Vytvořit novou aplikaci

Během vytváření nové aplikace je nutné zvolit její název, zadat kontaktní e-mail a zařadit aplikaci do příslušené kategorie. V tomto případě na kategorii ale příliš nezáleží, vyberte třeba Apps for Pages (Aplikace pro stránky).

První krok vytváření nové aplikace. Pokráčováním souhlasíte s podmínkami facebookové platformy.

Jakmile vytvoříte aplikaci, jste automaticky přesměrování do její administrace, vpravo nahoře vidíte App ID přidělené vaší nové aplikaci, na levé straně se nachází hlavní nabídka. Zde llikněte na Settings (Nastavení).

Kliknutím na App ID se vám identifikátor vloží do schránky

V základním módu nastavení (Basic) můžete změnit hodnoty, které jste zadali v prvním kroku, tedy během vytváření aplikace, ale hlavně vedle App ID, které jak vidíte, je uvedené i zde, máte možnost zobrazit App Secret.

Z bezpečnostních důvodů je nutné pro zobrazení App Secret zadat heslo facebookového účtu, pod kterým byla aplikace vytvořena. V případě, že by došlo k jeho vyzrazení, je zde také možnost App Secret vyresetovat.

Kliknutím na Reset je aplikaci přiděleno nové App Secret

App ID i App Secret si zapište někam stranou a můžete se pustit do samotného PHP skriptu.

PHP skript vypíše datum, název, popis, čas události a přidá odkaz na Facebook

Skript funguje velice jednoduše, nejprve si definujeme proměnné, jejichž hodnoty budou rozhodovat o tom, z jaké facebookové stránky budeme informace o událostech získávat, v jakém rozsahu je budeme získávat atd. viz komentáře v následujícím kódu.

//Identifikátor, tedy ID stránky zjistíte v jejím nastavení, rychlejší je však využít službu na adrese http://findmyfbid.com/
$fb_page_id = "id facebookové stránky";

//Časové rozmezí událostí, o kterých získáme informace. Tyto hodnoty říkají, že se zobrazí všechny události konající se ode dneška do začátku přespříštího roku...
$year_range = 2; 
$since_date = date('Y-m-d');
$until_date = date('Y-01-01', strtotime('+' . $year_range . ' years'));
 
//Graph API však potřebuje datumčas v unixovém formátu, hodnoty převedeme pomocí funkce strtotime() 
$since_unix_timestamp = strtotime($since_date);
$until_unix_timestamp = strtotime($until_date);
 
//...nebo můžete nastavit rozsah napevno.
//$since_unix_timestamp = strtotime("2017-03-19");
//$until_unix_timestamp = strtotime("2018-12-31");

//Zde zadáme přidělené App ID a App Secret, obě hodnoty oddělujeme svislou čarou
$access_token = "App ID|App Secret";

//Ke každé události budete chtít znát id, název, popis a datumčas jejího začátku i konce
$fields="id,name,description,start_time,end_time";

K proměnné $fields se v samotném závěru ještě vrátíme, teď ale pokračujte vytvořením URL adresy pro Graph API a jejím uložením do proměnné $url.

$url = "https://graph.facebook.com/v2.7/$fb_page_id/events/attending/?fields=$fields&access_token=$access_token&since=$since_unix_timestamp&until=$until_unix_timestamp";

Prohlédněte si tučně zvýrazněné části tohoto krátkého kódu a ještě jednou si projděte předchozí část skriptu. Vše je zcela zřejmé, že? Pokračujeme s funkcí curl() a dekódováním json výstupu pomocí funkce json_decode().

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);

$arr = json_decode($output, TRUE);

V této fázi tedy máme pole $arr, které obsahuje data týkající se událostí z facebookové stránky, v našem případě tedy ke každé události id, název, popis a datumčas začátku a konece (viz proměnná $fields)

Pole si můžete vypsat pomocí funkce print_r(), pro přehlednst vloženou mezi tagy <pre></pre>.

echo '<pre>';
print_r($arr);
echo '</pre>';

V takové podobě ale návštěvníkům vašeho webu určitě informace o událostech prezentovat nebudete. Na řadu přichází cyklus do while, viz finální část kódu.

//Hodnota proměnné $n určí, kolik se nejvýše vypíše událostí v časovém rozsahu určeném proměnnými $since_unix_timestamp a $until_unix_timestamp, chcete-li vypsat všechny události, jednoduše zvolte hodnotu dostatečně vysokou
$n = 99;

//Cyklus do while projede pole od konce (aby nejnovější události byly vypsány první), pokud narazí na nulové $id, pouze od $n odečte 1 a přejde k dalšímu záznamu, to nám zajistí, že se mezi událostmi nezobrazí hluché záznamy  
do { 
$id =  $arr['data'][$n]['id'];
$date = $arr['data'][$n]['start_time'];
$end_date = $arr['data'][$n]['end_time'];
if ($id != 0) {
 echo "<strong>";
 echo date("j.n.Y H:i", strtotime($date)); //převede datumčas do pro nás standardního formátu D.M.RRRR HH:MM
 echo " – ";
 echo date("j.n.Y H:i", strtotime($end_date));
 echo " | ";
 echo $arr['data'][$n]['name'];
 echo "</strong>";
 echo "<br>";
 echo $arr['data'][$n]['description'];
 echo "<br>";
 echo "<a href=\"https://www.facebook.com/events/$id\" target=\"_blank\">Zobrazit na Facebooku</a><br><br>"; //Odkaz pro zobrazení události na Facebooku je jednoduchý, stačí k němu znát její id     
    $n=$n-1;
  }
  else { $n=$n-1;
  }  
} while ($n >= 0);

Kód je otestovaný, v této podobě funguje na už v úvodu zmiňovaném webu. Pokud jste vše udělali správně, měl by tedy fungovat i vám. Máte-li se skriptem nějaké potíže, neváhejte se na mě obrátit v komentářích.

Něco navíc k proměnné $fields

Pomocí Graph API můžete samozřejmě z Facebooku získat nejen základní informace o událostech, jako je id, název, místo, popis a čas, ale třeba také link na obrázek události nebo počet přihlášených účastníků.

Do proměnné $fields stačí přidat některé z následujících hodnot, které vždy oddělujeme čárkou a pole $arr pak obsahuje i tyto informace. Logicky je pak musíte zahrnout i do cyklu do while.

attending_count 
//datový typ int32, počet uživatelů, kteří se události zúčastní

declined_count
//int32, počet uživatelů, kteří účast na události odmítli

maybe_count
//int32, počet uživatelů, kteří se možná zúčastní

interested_count
//int32, počet uživatelů, které událost zajímá

noreply_count
//int32, počet uživatelů, kteří zatím na pozvání neodpověděli

cover
//obrázek události

category
//string, kategorie události 

can_guests_invite
//boolean, mohou hosté pozvat své přátelé?

guest_list_enabled
//boolean, mohou hosté vidět seznam hostů?

is_canceled
//boolean, byla událost označena jako zrušená?

is_page_owned
//boolean, byla událost založena stránkou

owner
//profil, ze kterého byla událost založena

parent_group
//skupina, ke které událost náleží

place
//místo, kde se událost koná

ticket_uri
//string, odkaz pro zakoupení lístků

timezone
//enum, časové pásmo události

type 
//enum {private, public, group, community}, typ události

updated_time
//datetime, datumčas poslední aktualizace události (ve formátu dle ISO 8601)

Více informací o Graph API naleznete ve velmi pěkně zpracované oficiální dokumentaci.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

89 − = 81