FQL: dotazujte se Facebooku podobně jako databáze

Chcete z Facebooku získat různé informace k nějaké webové adrese, třeba aktuální stránce? Použijte dotazovací jazyk FQL. Snadno se jej naučíte, podobá se totiž dotazům do databáze psaným v SQL. V článku si ukážeme několik jednoduchých příkladů, jak zaslat dotaz a zpracovat data vrácená Facebookem.

Facebook není z pohledu vývojáře webu jen o tom, že si na něj třemi způsoby (iframe, HTML5, XFBML) umístíte lajkovací tlačítko a box. Existuje celá řada dalších způsobů, jak webovou stránku s Facebookem propojit.

Jedním z takových propojení na Facebook je speciální dotazovací jazyk FQL - Facebook Query Language. Můžete jej používat k získávání informací o počtu kliknutí na Líbí se Ti, počtu sdílení, celkovém součtu těchto čísel a o mnoha dalších věcech.

Když se podíváte na domovskou stránku FQL, uvidíte tam přehled jednotlivých tabulek. Každou z nich si můžete rozkliknout a uvidíte seznam jejích sloupečků, spolu s vysvětlením, jaké informace se v nich nacházejí.

Podívejte se například na tabulku link_stat. Obsahuje informace o tom, jak je nějaká URL na Facebooku oblíbená. Získáte z ní všechny informace, které jsem uvedl výše.

Prakticky v PHP: jak získat data o oblibě stránky z Facebooku pomocí FQL

Podívejme se tedy, jak použití FQL funguje v praxi. Pomocí FQL si sestavíte příslušný dotaz. Následně jej Facebooku odešlete metodou HTTP GET, tedy jednoduše zavoláním URL se zakomponovaným dotazem. Facebook vám pak vrátí XML s informacemi, které požadujete.

<?php
 $url =  'https://www.maxiorel.cz/';
 $fql = 'SELECT  like_count, share_count, click_count, comment_count, total_count from link_stat  where  url="'.$url.'"';
 $query_url = 'https://api.facebook.com/method/fql.query?query='.urlencode($fql);
 $result = simplexml_load_file($query_url);
 print 'Počet lajků: '.$result->link_stat->like_count.'<br/>';
 print 'Počet sdílení: '.$result->link_stat->share_count.'<br/>';
 print 'Počet komentářů: '.$result->link_stat->comment_count.'<br/>';
 print 'Celková obliba: '.$result->link_stat->total_count.'<br/>';
 print 'Počet kliknutí z Facebooku: '.$result->link_stat->click_count.'<br/>';
?>

Krátké vysvětlení k výše uvedenému kódu pro méně znalé PHP. Nejprve přiřadíme požadovanou URL do proměnné $url. Do proměnné $fql spojíme dotaz a připravenou URL, aby Facebook věděl, na jakou adresu se jej ptáme.

Připravený dotaz v proměnné $fql zakódujeme funkcí urlencode() tak, aby šel zadat coby URL adresa (tj. uvozovky a další znaky se převedou na HTML entity) a finálně připravenou adresu pro volání vložíme do proměnné $query_url.

S využitím simplexml_load_file() kde předáme adresu vracející XML s požadovanými informacemi, získáme objekt s XML výstupem z Facebooku. Poté už jen stačí získaná data vypsat v nějaké formě do prohlížeče.

Uvedený kus PHP kódu můžete vložit do těla nějaké webové stránky, proměnnou $url naplnit její adresou a při načtení tak hned sledovat získaná data. Upozorňuji ale, že nevím, kolik volání za den vám Facebook dovolí.

Dotazování na Facebook pomocí FQL v JavaScriptu

Nyní se podívejme na jednoduchý příklad volání FQL v JavaScriptu. Ne vždy budete chtít, aby se data zobrazila hned po načtení stránky. S pomocí JavaScriptu můžete nechat tyto informace zobrazit třeba po stisku nějakého tlačítka na stránce.

Připravte si tedy jednoduchou strukturu HTML, do které vložíte jedno tlačítko s id=tlacitko. Dále do dokumentu napojte jQuery. Pomocí $(document).ready() zpracujete přiřazení události kliknutí na tlačítko a vytvoříte obsluhu této události.

Podobně jako v ukázce s PHP si nyní připravte proměnné s URL, dotazem FQL a finálně sestrojenou adresou, která vrátí XML data z Facebooku. Připravte konstrukci $.ajax(), ve které připravenou adresu s výsledky v XML zavoláte a v případě úspěšného volání projdete získaná data. V příkladu získané informace prostě po stisku tlačítka zapíšu do těla stránky.

Celá ukázka kódu HTML stránky s voláním FQL pomocí JavaScriptu je zde:

<!DOCTYPE html>
<html>
<head>
    <title>Ukázka použití FQL</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <script type="text/javascript" src="jquery.js"></script>
    <script>
        $(document).ready(function(){
            $('#tlacitko').click(function(){
                var $url =  'https://www.maxiorel.cz/';
                var $fql = 'SELECT like_count, share_count, click_count, comment_count, total_count from link_stat  where  url="'+$url+'"';
                var $query_url = encodeURI('https://api.facebook.com/method/fql.query?query='+$fql);
                $.ajax
                (
                  {
                    type: "GET",
                    url: $query_url,
                    dataType: "xml",
                    success: function(xml)
                    {
                        $(xml).find('link_stat').each
                        (
                          function()
                          {
                             var likes      = $(this).find('like_count').text();
                             var shares    = $(this).find('share_count').text();
                             var clicks = $(this).find('click_count').text();
                             var comments    = $(this).find('comment_count').text();
                             var total    = $(this).find('total_count').text();
                             $(document.body).append('<p>Líbilo se: '+likes+'x</p>');
                             $(document.body).append('<p>Sdíleno: '+shares+'x</p>');
                             $(document.body).append('<p>Kliknutí: '+clicks+'x</p>');
                             $(document.body).append('<p>Komentáře: '+comments+'x</p>');
                             $(document.body).append('<hr>');
                             $(document.body).append('<p>Celkem: '+total+'</p>');
                          }
                        );                         
                    }
                  }
                );
            });    
        })
    </script>
</head>
<body>
    <input type="button" value="Získat data z Facebooku" id="tlacitko" />
</body>
</html>

Pomocí FQL se Facebooku samozřejmě můžete dotazovat na celou řadu jiných věcí, nejenom statistik pro danou URL. Doporučuji prostudovat seznam všech tabulek a příkladů na domovské stránce FQL.

Buďme ve spojení, přihlaste se k newsletteru

Odesláním formuláře souhlasíte s podmínkami zpracováním osobních údajů. 
Více informací v Ochrana osobních údajů.

Autor článku: Jan Polzer

Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.

Komentáře k článku

Přidat komentář

Odesláním komentáře souhlasíte s podmínkami Ochrany osobních údajů

reklama
Moje kniha o CMS Drupal

 

Kniha 333 tipů a triků pro Drupal 9


Více na KnihyPolzer.cz

Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Hosting pro Drupal a WordPress

Hledáte český webhosting vhodný nejenom pro redakční systém Drupal? Tak vyzkoušejte Webhosting C4 za 1200 Kč na rok s doménou v ceně, 20 GB prostoru a automatické navyšováním o 2 GB každý rok. Podrobnosti zde.

@maxiorel na Twitteru

Maxiorel na Twitteru