FQL (Facebook Query Language) спада у групу упитних језика који омогућава Facebook корисницима да користе SQL[1] упите за податке изложене од Graph API-ја. FQL пружа напредне функције које нису доступне у Graph API-ју.[2] Подаци враћени од FQL упита су по подразумеваном JSON формату. Документација о FQL је јавно доступна свима те овај језик може свако да научи.

FQL нуди могућност претраге јавно доступних података на Facebook-у, а ефекат је исти као при коришћењу Graph API-ја. Међутим, FQL се неће користити после верзије 2.0 Facebook API-а, након чега се програмерима препоручује да пређу на коришћење Graph API-а.

Карактеристике уреди

Иако су исти подаци доступни путем неке од API функција, овако је омогућен једноставнији, селективни и бржи приступ. Нема потребе за тражењем одговараћује API функције, дохватања свих доступних података из одређене категоије и затим програмске обраде и селекције корисних података. Овако на јединствен начин имамо приступ свему и уз мало сложеније упите знатно смањујемо количину података с којом морамо радити.

Историја уреди

FQL први пут постао јавно доступан у фебруару 2007. године [3]

Упити уреди

Упити су следећег облика:

SELECT [поља] FROM [табела] WHERE [услови]

За разлику од SQL-a, FQL омогућава само SELECT упите, без UPDATE и DELETE, такође FROM клаузула мође да саржи само једну табелу што значи да се не може реализовати JOIN. Можете да користите кључну реч IN у клаузулама SELECT и WHERE како бисте радили са угљежденим упитима. У WHERE клаузули могуће је постављати услове везане за индексирана поља, та поља су у списку поља означена са '*'.

FQL поседује:

  • могућност обављања оснивних математичких операција
  • AND и NOT логичке операторе
  • ORDER BY и LIMIT клаузуле(ORDER BY клаузула се додаје на крају упита и може да садржи само једно поље)

За сваки упит који узима uid може се проследити me(), који враћа пријављеног корисника.

Пример:

SELECT name FROM user WHERE uid = me()

Остале доступне функције су:

  • now()
  • strlen()
  • substr()
  • strpos()

Пример упита који дохвата све информације о кориснику за активне кориснике и пријатеље:

SELECT uid, name, pic_square FROM user WHERE uid = me()

OR uid IN (SELECT uid2 FROM friend WHERE uid1 = me())

Вишеструки упити уреди

Вишеструки упити (енг. multi-query) обрађују серију FQL упита у једном и враћају податке за сваки један по један.

Ова метода узима JSON-енкодиране речнике који се називају „упити“ где појединачни упит користи синтаксу као једноставни упит. Међутим, ова метода омогућава да се креирају комплекснији упити. Могу се дохватити подаци у једном упиту и користити у другом, у истом позиву. WHERE клаузула је опциона у другом упиту, пошто се референцира на податке који су већ дохваћени. Да би се референцирали на резултате упита у другом упиту у оквиру истог позива, потребно је у FROM клаузули специфицирати његово име које се наводи након знака #.

На пример, потребно је узети неке податке о кориснику који присуствује неком догађају. Уобичајено би било да се изврше два упита, један за другим, чекајући на резултат првог упит, пошто други упит зависи од података првог. Међутим, са FQL multyquery, могу се оба упита покренути у исто време, резултати се добијају када је потребно, и на тај начин обезбеђују се се боље перформансе него кад се покреће серија упита. Прво је потребно користиит ID и RSVP статус (фр. RSVP - répondez s'il vous plaît, , тј. en please respond, молим одговорите) сваког госта, тако да може да се формулише први упит, query1. Ово се извршава на следећи начин:

"query1":"SELECT uid, rsvp_status FROM event_member WHERE eid=12345678"

Након тога се узимају подаци профила сваког госта (name, URL, и слика), а затим се извршава други упит – query2 – који се референцира на резултате првог упита, query1. Query2 се формулише на следећи начин:

"query2":"SELECT name, url, pic FROM profile WHERE id IN (SELECT uid FROM #query1)"

 
Тренутни изглед FQL-а на Фејсбуку

Ево примера покретања FQL упита:

<?php

$app_id = 'YOUR_APP_ID';

$app_secret = 'YOUR_APP_SECRET';

$my_url = 'POST_AUTH_URL';

$code = $_REQUEST["code"];

// auth user

if(empty($code)) {

$dialog_url = 'https://www.facebook.com/dialog/oauth?client_id='

. $app_id . '&redirect_uri=' . urlencode($my_url) ;

echo("<script>top.location.href='" . $dialog_url . "'</script>");

}

// get user access_token

$token_url = 'https://graph.facebook.com/oauth/access_token?client_id='[мртва веза]

. $app_id . '&redirect_uri=' . urlencode($my_url)

. '&client_secret=' . $app_secret

. '&code=' . $code;

// response is of the format "access_token=AAAC..."

$access_token = substr(file_get_contents($token_url), 13);

// run fql query

$fql_query_url = 'https://graph.facebook.com/'[мртва веза]

. 'fql?q=SELECT+uid2+FROM+friend+WHERE+uid1=me()'

. '&access_token=' . $access_token;

$fql_query_result = file_get_contents($fql_query_url);

$fql_query_obj = json_decode($fql_query_result, true);

// display results of fql query

echo '

' 

print_r("query results:");

print_r($fql_query_obj);

echo '

';

// run fql multiquery

$fql_multiquery_url = 'https://graph.facebook.com/'[мртва веза]

. 'fql?q={"all+friends":"SELECT+uid2+FROM+friend+WHERE+uid1=me()",'

. '"my+name":"SELECT+name+FROM+user+WHERE+uid=me()"}'

. '&access_token=' . $access_token;

$fql_multiquery_result = file_get_contents($fql_multiquery_url);

$fql_multiquery_obj = json_decode($fql_multiquery_result, true);

// display results of fql multiquery

echo '

'

print_r("multi query results:");

print_r($fql_multiquery_obj);
 
echo '

'; ?>

Намена уреди

FQL се користи за упите над табелама Facebook-a које су отворене, као што су:

Име Опис
album албум фотографија или видео снимака предстаљене у FQL
application апликација представљена у FQL
apprequest FQL табела која садржи послате захтеве преко апликације
comment Коментари у вези са једним или више фејсбук коментарима

представљени у FQL

cookies Списак колачића који су постављени за корисника у FQL
developer FQL табела која представља улоге корисничке апликације
у App Dashboard. Уместо тога користите app_role
event FQL табела која даје информације о догађају
event_member Садржи листу учесника за догађај у FQL
family Садржи детаљне информације о корисниковој породици
friend FQL табела која се може користити да врати списак

корисникових пријатеља или да покаже да ли су два корисника пријатељи

friendlist_member FQL табела која показује да ли је корисник

члан листе пријатеља

friend_request FQL табела која показује нерешене захтеве од

стране корисника тренутне сесије

group Група којој корисници могу да се придруже
group_member Садржи листу чланова за групе у FQL
insights FQL табела која садржи статистичке податке о пријавама,

страницама и доменима са 30 или више веза.

like FQL табела која даје ИД кориснка који је лајковао објекат

(видео, слику, белешку, везу или албум)

link FQL табела која садржи линкове које је корисник објавио
link_stat FQL табела која показује како су корисници у интеракцији

на Фејсбуку са датим линком

mailbox_folder FQL табела која садржи информације о корисниковом

поштанском сандучету

message Информација о порукама представљена у FQL. Да бисте приступили

овој табели потребан вам је приступни токен са read_mailbox дозволама

notification Тренутне нотификације корисника представљене у FQL
offer FQL табела која даје информације о понудама са објава страница
page За приступ на нивоу држава користите page_fans_country

и page_storytellers_by_country

Види још уреди


Референце уреди

  1. ^ „Facebook Query Language (FQL)”. Documentation. Facebook. Архивирано из оригинала 17. 07. 2011. г. Приступљено 16. 12. 2010. 
  2. ^ „About Facebook-FQL”. Tag info. Stack Overflow. Приступљено 18. 5. 2012. 
  3. ^ Steinberg, Ari (26. 2. 2007). „Facebook Query Language (FQL)”. The Facebook Blog. Facebook. Приступљено 18. 5. 2012. 

Литература уреди

Спољашње везе уреди