Ok, vi risparmio la battuta sugli insetti :)
Facebook mette a disposizione di tutti gli utenti/programmatori un comodo set di funzioni, che in gergo si chiamano API (Application Programming Interface), scritte in vari linguaggi web, per interagire con la piattaforma del popolare social network e sviluppare le proprie applicazioni, siano esse integrate in Facebook (la maggior parte sono così) oppure applicazioni “stand-alone”, cioè fruibili da un sito esterno ma collegate alla banca dati di Facebook.
Fb rende l’impatto tra il programmatore e le API molto semplice, ponendolo di fronte ad un’interfaccia per gli sviluppatori che guida passo passo nella creazione delle applicazioni, integrandosi con utili strumenti come il Wiki ed una Test Console, che permette di effettuare chiamate di prova alle varie funzioni, specificandone i parametri, e ricevendo in risposta il relativo output in formato leggibile.
Le API si compongono di una parte che gira lato server dell’utente, le librerie client, ed una parte in formato markup che viene processata dal server di Facebook, il quale produce normali tag HTML interpretando un linguaggio ideato da Facebook chiamato FBML.
Il programmatore potrà utilizzare le librerie client ufficiali in PHP oppure una di quelle non ufficiali, disponibili in tantissimi linguaggi tra cui Java, Ruby on Rails, Perl, Python, .Net.
Con queste librerie bisognerà produrre un codice sorgente, che avrà un output in HTML, XML oppure FBML e che, anche nel caso di applicazioni da integrare in Facebook, dovrà essere ospitato presso un server web esterno per poi essere collegato a Facebook tramite l’interfaccia di amministrazione dell’applicazione. Quindi bisognerà trovare un hosting web, anche gratuito, che fornisca lo spazio per l’applicazione.
Facebook non chiede nient’altro, perchè consente ai programmatori di salvare le informazioni utilizzate dalle applicazioni in un vero e proprio database, il DataStore, in cui è possibile memorizzare i dati necessari a ciascun utente, senza doversi procurare un database su un server esterno, che costituirebbe una spesa sicuramente più grossa dello spazio web.
Anche per quanto riguarda il database Facebook ha “inventato” qualcosa: si chiama FQL, ed è un derivato del SQL che ha lo scopo di interrogare il database di Facebook ponendo alcune restrizioni sui permessi di accesso alle tabelle, perchè ogni utente può accedere solo alle informazioni proprie e dei propri amici che le condividono, non di più.
Per iniziare, una applicazione di esempio potrebbe essere questa:
<?php
require_once 'client/facebook.php';
$appapikey = 'YOUR_API_KEY';
$appsecret = 'YOUR_APP_SECRET';
$facebook = new Facebook($appapikey, $appsecret);
$user_id = $facebook->require_login();
$friends = $facebook->api_client->friends_get();
?>
<p>Ciao, <fb:name uid="<?= $user_id ?>" useyou="false" />!</p>
<p>I tuoi amici:
<ul>
<? foreach ($friends as $friend) { ?>
<li><fb:name uid="<?= $friend ?>" useyou="false" /></li>
<? } ?>
</ul></p>
?>
YOUR_API_KEY e YOUR_APP_SECRET vanno sostituiti con i codici assegnati da Facebook, che identificano univocamente l’applicazione e le consentono di effettuare le chiamate alle API per le quali è stata autorizzata inizialmente.
L’oggetto $facebook diventa l’interfaccia verso la piattaforma, la quale viene interrogata tramite le varie funzioni in PHP5 (ad oggetti).
I tag che inziano con <fb: sono i tag FBML di cui parlavo prima: essi verranno interpretati da Facebook e diventeranno, in questo caso, dei collegamenti ai profili specificati nell’attributo uid. Il particolare il primo diventerà un link al profilo dell’utente dell’applicazione ($user_id) e l’altro sarà un link al profilo di uno degli amici ($friend).
Per iniziare può bastare quanto detto finora, ma l’appetito vien mangiando… le possibilità sono infinite!
Per esempio utilizzando la seguente chiamata
$facebook->api_client->call_method("facebook.status.get",
array('uid'=>$user_id, 'limit'=>10));
ho ottenuto tutto il necessario per realizzare sul mio sito la parte del modulo Social Networks relativa a Facebook (beh… in realtà ho dovuto realizzare un wrapper RSS perchè il sito è in Ruby On Rails, mentre la libreria è in PHP).
Buon divertimento! :)












NOn funziona :-( copiato/incollato, sostituito le api key e api secret…
scrive solo ciao e appare il primo pallino dell’elenco puntato :-(
Ciao raffaele… non so se l’hai già fatto, ma prima di poter utilizzare lo script (che deve essere pubblicato su un tuo spazio web) devi modificare le impostazioni dell’applicazione dall’interfaccia di Facebook, per farla puntare allo script in questione.
Si fa dalla pagina http://www.facebook.com/developers, poi clicchi sulla tua applicazione nel menù a destra, Modifica Impostazioni, e poi cliccando su Modelli (a sinistra) devi inserire l’URL dello script PHP nel campo Canvas Callback URL.
Ah, ovviamente devi avere estratto le librerie API di facebook nella cartella ./client, come indicato nel codice PHP.
mmm.. non sembra funzionare neanche a me.
copia-incolla, sostituite le apikey con quelle fornite da facebook, caricato il file php sul mio spazio insieme alla libreria ufficiale scaricata da facebook (ma perchè la cartella “client”?)ma non funzia.
“non funziona” non è un’espressione molto utile… COSA non funziona? QUALE ERRORE viene visualizzato?
Quel codice che ho scritto presuppone che nella sotto-directory ./client siano estratte le librerie API scaricate da Facebook, in modo che in questa directory sia presente appunto il file facebook.php e tutti gli altri file delle API (in pratica sarebbe il contenuto della directory facebook-platform/php all’interno dell’archivio facebook-platform.tar.gz).
E’ ovvio che per utilizzare l’applicazione è necessario accedervi tramite Facebook (tramite l’URL configurato nelle impostazione dell’applicazione, del tipo http://apps.facebook.com/nomeapplicazione), e NON dirigendo il browser direttamente sul server esterno.
Ciao, grazie per il post a me funziona ( ho importato gli ultmin 10 post nel mio sito) però funziona solo se sono loggato altrimenti mi appare questo errore.
“Session key invalid or no longer valid”.
Posso importare i post anche se non sono loggato su facebook?
Grazie
Ciao Emanuele,
quella che vuoi realizzare è un altro tipo di applicazione, detta “desktop application”.
Si istanzia con:
C’è poca documentazione a riguardo, ma se leggi il codice delle API vedi che c’è il modo di memorizzare la chiave di sessione ed utilizzare sempre la stessa anche quando non sei loggato.
Ciao a tutti,
volevo sapere se è possibile stampare la lista degli amici di un mio amico, se si quale funzione usare.
Grazie
Ciao Umberto. No, non si può fare con una chiamata API standard, perchè la funzione Friends.get può agire soltanto sull’utente che utilizza l’applicazione.
FORSE è possibile farlo utilizzando una query FQL di questo tipo:
SELECT uid2 FROM friend WHERE uid1=<id-utente>
ma non ho provato. Potresti provare tu e farci sapere ;)
Ciao!
Ciao,
Sto facendo delle prove iniziali per scrivere un’applicazione di facebook ma ho un problema, l’applicazione funziona solo in modalità IFrame mentre in modalità FBML mi dice che l’URL non p valida, la cosa mi scoccia un pochino perchè vorrei provare le tag FBML e anche le query FQL.
Hai mica qualche consiglio da darmi?
Ti ringrazio.
Ciao Denis, probebilmente Facebook non riesce a raggiungere il server sul quale hai fatto l’upload dello script PHP.
Infatti, in modalità FBML, Facebook fa da “proxy” tra il client (il browser) ed il server su cui sta lo script… legge l’output dello script, interpreta i tag FBML trasformandoli in normale HTML, e poi restituisce l’output all’utente.
Quindi verifica il motivo per cui Facebook non arriva al server… non è che stai utilizzando l’indirizzo “localhost”?
Bye ;)
Sì, facevo proprio così, ma siccome la cosa con IFrame funzionava avevo pensato che non fosse quello il problema e a come vedo mi sbagliavo.
Il fatto è che ciò che sto facendo è un lavoro per l’università, lì ci danno uno spazio web dove posso caricare delle pagine, ma siccome quel server blocca facebook non credo che le pagine che creo possano funzionare.
Mi sa che mi tocca creare uno spazio web personale.
Grazie dell’aiuto!
Infatti con l’iFrame non è Facebook a fare da tramite, quindi vedi esattamente la pagina che proviene dal server dove sta lo script (o anche in locale).
La soluzione dello spazio web personale mi sembra la più appropriata, su Netsons o Altervista lo puoi avere gratuitamente.
Ciao… e grazie per il commento! :)
Sul sito di facebook non è più disponibile il file facebook-platform.tar.gz (da error 404 Not Found), per caso ne hai una copia ?
Eventualmente me lo potresti inviare via mail ?
Grazie
Ciao Vittorio, ho caricato l’archivio delle API sul mio server. Lo puoi scaricare a questo indirizzo:
http://www.brunomendola.net/facebook/facebook-platform.tar.gz
Non so perchè lo abbiano cancellato dal sito di Facebook, spero non stiano cambiando le API… non voglio riscrivere tutte le mie applicazioni! :-/
Ciao, mi chiedevo se invece di importare info da fb è possibile, ad esempio, postare notizie su fb.
Immagina lo scenario: attraverso il mio cms carico una notizia sul mio sito e voglio che compaia anche sul mio profilo fb.
sto cercando info ma nn trovo nulla…
Grazie!
ciao, complimenti per l articolo ti volevo chiedere (perchè nn riesco a trovarlo da nessuna parte) se le api di facebook e anche degli altri social network fossero a pagamento. Metti caso che la tua applicazione abbia un successo clamoroso, mi sembra strano che facebook o chi per esso non chieda una parte (probabilmente finchè non diventa famosa non ti chiederà nulla…ma semmai dovesse macinare soldi???)
@ivan: Ciao, grazie per il commento!
Per quanto ne so, le API di Facebook sono gratuite semplicemente perchè Facebook ci guadagna anche così… come? in utenti e pubblicità! :)
Per maggiori informazioni ci sarebbe il regolamento per gli sviluppatori… ecco il link: http://developers.facebook.com/policy/
ciao e in bocca al lupo! ;)
@Cesare: scusa, ma sto vedendo adesso il commento… quando l’hai scritto ero in vacanza.
Quello che dici è fattibilissimo ed in più di un modo: potresti collegare il feed RSS del tuo blog al profilo su Fabebook… e di quel caso non ci sarebbe bisogno di sviluppare nessuna applicazione. Oppure potresti sviluppare una funzione sul tuo sito che utilizza le API di tipo “desktop”, cioè per la realizzazione di un’applicazione che non viene eseguita all’interno di Facebook. In questo modo al primo utilizzo l’applicazione memorizza una chiave di sessione abbinata al tuo account e può postare notizie sul tuo profilo.
Tutto ciò utilizzando le vecchie REST API, cioè quelle descritte in questo post.
Ciao, ho un problema con le nuove api di fb, in pratica non riesco a capire come ottenere detemerminate info dell’utente tipo picture, friend e quello che una volta era “friends_getAppUsers()” metodo per sapere quali amici avesse accettato l’applicazione.
Ciao riccardo, è tutto spiegato in questo link:
http://developers.facebook.com/docs/api
Adesso le informazioni sono accessibili tramite dei semplici link, non più con chiamate API. E’ più semplice, e riduce il carico di lavoro dei server di Facebook.
Io comunque preferivo la vecchia maniera :)
Avevo dimenticato il mio nome…
$me = $facebook→api(‘/me’);
questo metodo ritorna un array con tutti dati per il nome cogonome etc.
Se volessi ottenere gli amici dell’utente farei
$friends = $facebook→api(‘/friend’);
Ma per le picture, in cui si parla di connessione(?fb connect), non so quale sia il metodo?
Mi sono perso qualcosa?
Ciao e grazie per la risposta
Ma… se sai l’ID o lo username della persona di cui vuoi prendere l’avatar… non ti basta un tag img?
<img src=“http://graph.facebook.com/718322529/picture” />
Si hai ragione, bastava taggare con l’ID :)))
Ormai sono abituato male…
Grazie
Un’ultima cosa, forse :))), in sostituzione di “friends_getAppUsers()” ovvero il metodo per sapere quali amici hanno accettato l’applicazione , cosa debbo usare?
Ho trovato accounts, ma come faccio?
Grazie ancora
Bella domanda!
Non mi è mai capitato di utilizzare questa funzione con le nuove API, ma credo che potresti prenderti le platformrequests dall’oggetto User… i dettagli qui (in fondo alla pagina):
http://developers.facebook.com/docs/reference/api/user
L’avevo visto e l’unico spunto è il modo in cui richiamare le url…
da questo:
curl -F ‘access_token=…’ \
https://graph.facebook.com/[user_id]/platformrequests
oppure da questo:
$result = json_decode(file_get_contents(
‘https://api.facebook.com/method/dashboard.incrementCount?’ .
‘format=json&access_token=’ .
$cookie[‘oauth_access_token’]));
Domani ci provo e se riesco a fare un mix con la sintassi ti faccio sapere.
Stile fb:
“To learn more about calling the graph api, read the documentation here. " il link non funziona naturalmente.
In bocca al lupo!
In effetti le documentazioni di FB per gli sviluppatori sono sempre state ORRENDE!
Ho trovato in rete questa soluzione:
$my_friends_using_this_app = $facebook→api(array(‘method’ => ‘friends.getAppUsers’, ‘callback’ => ’’));
Nel file facebook.php sono presenti tutti le chiamate che si possono effettuare con questo metodo, api().
Un po di luce…ciao e grazie ancora
Ciao, sono un programmatore php e sto facendo i primi esperimenti del caso.
Vorrei che la procedura del mio sito sia parzialmente con il atso “log in” per essere completata con un paio di campi obbligaotri.
Inoltre mi interesserebbe molto riprendere i campi come ho visto fanno qui http://temi.repubblica.it/repubblica-appello/?action=vediappello&idappello=391200&ref=HREC1-5
grazie molto, nemmeno io mi sono trovato molto con le guide ufficiali, sarebbero belli degli esempi pratici…
Infine mi piacciono molto alcuni trucchetti tipo “se non condividi non puoi vedere”
Salve a tutti,
una piccola domanda senza che mi perdo nel vostro mondo: è possibile creare uno script che mi permetta di postare nella bacheca di tutti i miei amici in un colpo solo?
grazie
@aldo: tecnicamente si potrebbe fare, ma sarebbe contro le policy di Facebook Developers, quindi no… non si può :)
Per informazioni:
http://developers.facebook.com/docs/reference/api/post/
http://developers.facebook.com/policy/
“You must not provide users with the option to publish a Stream story to more than one friend’s wall at a time.”