Facebook developer API

Jeg er i gang med at tage endnu et online kursus som hedder DATA ANALYTICS IN R. Som navnet antyder handler det om at lave data analyser i sproget R. Den seneste opgave vi blev stillet var at indsamle alle dine facebook venners fødselsdage og prøve at undersøge hvilken måned der er fleste der har fødselsdage og hvem der har fødselsdag samme dag som dig osv. Opgaven i sig selv er ikke så interessant da data mængden ikke er vanvittig stor, det der var den store udfordring var at få data ud af Facebook. Ifølge flere blogs kan man gøre det direkte gennem facebook, som har noget funktionalitet til at lave sådan en export, men desværre har de skiftet design og i det nye design er det ikke længere tilladt. Til gengæld er der noget som hedder developer.facebook.com der blandt andet tillader at man kan søge i facebooks nye graph database. Og det er jo spændende!

facebook developer api

facebook developer api

På developer.facebook.com i tools menuen finder man Graph API Explorer, som netop tillader at man søger i grafen. Søgninger kan gøres gennem interfacet på siden eller gennem http requests direkte, som returnere json. Her ses web interfacet.

Facebook GraphAPI

facebook Graph Api

Man kan nu vælge mellem at bruge http requests eller FQL queries. http requests er Restfull, mens FQL er et SQL ligende sprog. Følgende er et eksempel på hvordan det ser ud.


SELECT name, birthday, birthday_date, concat(substr(birthday_date,0,6),"2013")
FROM user
WHERE uid in (SELECT uid2
FROM friend
WHERE uid1 = me())
AND birthday_date != 'null'

Hvilket skulle finde alle dine venners fødselsdag.Men det gjorde det så ikke, og nu skal i høre hvorfor;

Facebook FQL interface

Facebook FQL interface

Her begyndte jeg for alvor at syntes det var sjovt, for man skal selv vælge hvilke data der må returneres fra din facebook profil, når man forespørger et ”Access Token”. Her kan man se hvad man giver andre applikationer tilladelse til at se når man installere en facebook app.

privacy setting in developer.facebook

privacy settings in developer.facebook

Med de nye privacy regler (new facebook login) har man lavet restriktioner så det ikke er muligt for mig at tillade at en app kan se mine venners fødselsdag (hvilket jeg faktisk godt kan lide), men det betyder at man kun kan søge begrænset mængder af data, og derfor fik jeg kun 2 fødselsdage ud af den søgning jeg lavede ovenfor, og det er fordi der kun er to af mine facebook venner som også bruger developer.facebook, og derfor har givet app tilladelse til at returnere deres data, og jeg har givet tilladelse til at vise dem.

Men husk næste gang at du bruger facebook login på en 3 parts side, så tillader du også den side at tilgå det her graph API og trække de data som du giver tilladelse, heldigvis kan du ikke bestemme om siden må se dine venners data, men de kan nemt for tilladelse til at se dine posts, billeder ect. Tilsidst endte jeg med at lave en grim export a mine facebook data ind i en Google Calendar (link) (i dag kan jeg ikke tilgå denne funktionalitet mere (link)) , som jeg så exportede som CSV, som jeg så læste ind i R. Ved at udføre følgende script:


library(lubridate)
data <- read.csv('C: \birthdays.CSV', header=TRUE)
data$Month <- month(dmy(data$Start.Date))
qplot(data$Month, binwidth=1)
ggsave('bithdayPerMonthHistogram.png')

Fik jeg følgende:

fødselsdags histogram

fødselsdags histogram

Som viste at hovedparten af mine venner har fødselsdag i september, hvilket jo er pudsigt. I hvertfald indtil jeg kiggede lidt nærmere i mine data og opdagede at jeg også havde exportede de entries i google calendar jeg havde indsat for at huske at min hund skulle have antibiotika 3 gange dagligt i september sidste år. Men graf databaser er sjove, så jeg tror jeg skal i gang med at lave en facebook app, som ikke gør meget udover at spørge om tilladelse til at kigge i brugernes data, således jeg kan få et ordenligt datasæt at lege med, det er det de fleste facebook apps tjener penge på alligevel.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *