Leggi l'articolo aggiornato: Una Classe PHP per Applicazioni Facebook IFrame con Graph API.

Eccoci finalmente giunti alla seconda guida che vi insegnerà come creare un’applicazione Facebook. Nella prima guida abbiamo imparato come impostare Facebook Developer per riconoscere la nostra nuova applicazione, oggi vedremo il codice vero e proprio.
Volevo iniziare direttamente con un esempio pratico di applicazione, ma mi sono accorto che prima è necessario che vi presenti gli strumenti che andremo ad utilizzare. Infatti, invece di studiarci le API di Facebook, è più semplice se ci serviamo di una classe che ne rende molto più comodo l’interfacciamento.
Si tratta di Facebook Toolbox, che incorpora in semplici metodi tutte le chiamate e le varie operazioni che possono tornarci utili. Vi sconsiglio, tuttavia, di scaricare la versione originale, in quanto nei prossimi tutorial useremo una mia personale versione modificata, che corregge alcuni problemi e aggiunge alcune funzionalità.
Aprite allora il vostro editor preferito… Pronti, via!
1. Preparare l’ambiente
Per prima cosa scaricate la classe PHP modificata:
Facebook Toolbox 2.0 (2,7 KiB) - scaricato 2.232 volte
Non dimenticate poi di scaricare le PHP Client Libraries ufficiali che ci permetteranno di accedere alle API.
Fatto ciò, scompattate entrambi gli archivi e strutturate la vostra applicazione in questo modo:
Nella cartella principale, che chiameremo facebookappad esempio, andranno tutti i file.- All’interno di essa create una cartella
lib. - Dentro
libcopiate il fileFBToolbox.class.phpe tutta la cartellaphpestratta dalle Client Libraries. - Rinominate la cartella
phpinclient.
Ora siamo pronti per creare il nostro primo Hello World.
2. Inizializzare l’applicazione
Create il file config.php e scrivete:
include_once('lib/FBToolbox.class.php');
$apiKey = 'LA_VOSTRA_CHIAVE_API';
$secret = 'IL_VOSTRO_CODICE_INVISIBILE';
$url = "http://apps.facebook.com/nome-applicazione";
$myurl = "http://www.miosito.it/facebookapp";
$fb = new FBToolbox($apiKey, $secret);
?>
Ricordate quei due valori alfanumerici che vi avevo detto di segnarvi nella guida precedente? Ora dovrete inserirli al posto di LA_VOSTRA_CHIAVE_API e di IL_VOSTRO_CODICE_INVISIBILE.
Già che ci siete, può essere utile impostare qui anche l’url della vostra applicazione (anche questo scelto nella guida precedente) e l’url della cartella sul vostro server dove avrete uploadato tutto. Potrebbero tornarci utili in futuro.
3. Iniziamo a programmare!
Fatto ciò, passiamo finalmente alla home page dell’applicazione: il file index.php. Iniziate includendo il file config.php:
A questo punto potete sbizzarrirvi come vi pare, a seconda di quale sia lo scopo della vostra applicazione: create una connessione al vostro database per salvare i dati che vi servono, interagite con gli utenti, create nuove pagine e form…
4. Le operazioni che possiamo eseguire
Grazie alla classe FBToolbar, abbiamo accesso a tutte le operazioni tipiche che ci possono servire. Vediamo come usarle.
Recuperare l’ID dell’utente corrente:
Recuperare i dati dell’utente corrente:
$name = $userInfo[0]['first_name'];
$city = $userInfo[0]['current_location']['city'];
Recuperare la lista di amici dell’utente corrente:
Aggiungere l’applicazione al profilo dell’utente corrente:
Oltre a questa funzione, va inserito nella pagina anche il seguente codice, che visualizza l’apposito pulsante:
<fb:add-section-button section="profile"/>
</div>
Quando l’utente cliccherà sul pulsante, gli verrà chiesta l’autorizzazione per inserire l’applicazione nel profilo.
Inviare una notifica ad una lista di utenti:
Inviare una email ad una lista di utenti:
Pubblicare una notizia sul profilo dell’utente corrente:
$one_line_story_templates[] = '{*actor*} ti saluta';
$templateBundleId = $fb->getTemplateBundleId($one_line_story_templates);
//pubblico la news
$fb->publishNewsFeed($templateBundleId);
Mostrare il form per selezionare gli utenti ed invitarli:
echo 'Grazie per aver invitato ' . sizeof($_POST['ids']) . ' dei tuoi amici su <a href="' . $url .'">TuaApplicazione</a>.';
}else{
$fb->renderInvite($url, 'TuaApplicazione');
}
?>
E questo è tutto ciò che può fare la classe, a parte qualche parametro che è possibile modificare. Vi invito comunque a guardarvi i commenti ai vari metodi e, se siete in grado, a personalizzarla ed esternderla ulteriormente.
Per oggi credo ci sia abbastanza carne al fuoco su cui potete lavorare. Concludo rimandandovi all’elenco dei tag FBML che potete utilizzare.
Settimana prossima vedremo nel dettaglio come creare il layout della nostra applicazione, usando il codice FBML.
51 Commenti










Ho seguito la procedura alla lettere per creare l’applicazione con fb ma mi da questo errore
Warning: main() [function.main]: open_basedir restriction in effect. File(/client/facebook.php) is not within the allowed path(s): (/var/www/vhosts/skyfast.it/httpdocs:/tmp) in /var/www/vhosts/skyfast.it/httpdocs/unsorriso/lib/FBToolbox.class.php on line 26
Warning: main(/client/facebook.php) [function.main]: failed to open stream: Operation not permitted in /var/www/vhosts/skyfast.it/httpdocs/unsorriso/lib/FBToolbox.class.php on line 26
Warning: main() [function.include]: Failed opening ‘/client/facebook.php’ for inclusion (include_path=’.:.:’) in /var/www/vhosts/skyfast.it/httpdocs/unsorriso/lib/FBToolbox.class.php on line 26
Fatal error: Class ‘Facebook’ not found in /var/www/vhosts/skyfast.it/httpdocs/unsorriso/lib/FBToolbox.class.php on line 73
potete aiutarmi grazie..
Dunque, dall’errore è evidente che non riesce ad includere il file client/facebook.php.
Le possibilità sono queste:
- non hai impostato l’albero dei file come l’ho descritto io
- la cartella in questione non ha i permessi per eseguire gli script (vedi questo thread)
- hai modificato la classe, aggiungendo uno slash / prima del nome della cartella. Infatti negli errori che mi hai incollato c’è scritto File(/client/facebook.php), mentre dovrebbe essere senza lo slash iniziale.
Fammi sapere!
Ciao io non riesco a configurare il bottone del “Aggiungi al profilo” se inserisco la riga di codice: $ fb – > addToProfile ( ‘contenuto del box wide ‘ , ‘contenuto del box narrow ‘ ) ; mi ritorna l’errore comune di facebook toscliendola ritorna tutto normale. Cosa può essere che non fa riconoscere il codice?
Premetto che la classe funziona benissimo poiché utilizzo altre funzioni che normalmente lavorano bene.
Puoi specificare meglio l’errore che ti restituisce?
Con l’errore è tutto ok ma il pulsante “Aggiungi al profilo” non si visualizza pur avendo seguito alcuni consigli sul forum ufficiale di facebook includendo dei codici con eccezioni. Si potrebbe avere una bozza più specifica sull’argomento?
Ma oltre alla chiamata PHP, hai inserito anche il tag
<fb:add-section-button section="profile"/>subito dopo?
Si certamente altrimenti non avrei potuto visualizzare il pulsante … sul forum ufficiale ci sono molti esempi con try, catch ma non funziona lo stesso …
Ho letto che non è semplice far apparire il pulsante perchè bisogna farlo prima che inviti amici, altri accorgimenti, ect …
Ho notato anche che nella pagina invite.php il numero massimo di amici selezionabili è 3 al giorno con la chiamata a ['ids'] ho provato con count e poi con count_recorsive ma non cambia … c’è un metodo per aumentare questo numero?
Ecco, una cosa che ancora non ho capito è proprio questa storia del numero di amici. Alcune mie applicazioni mi fanno invitare 4 amici, altre 20…
Secondo me dipende dal numero di utenti che usano l’applicazione: più è diffusa ed utilizzata e più aumenta il numero di amici che si possono invitare.
Questa è la mia teoria.
ma credo solo quelle costruite dai developers sono così limitate, quelle di facebook arrivano anche a 60 ho notato !!
rettifico!
adesso arrivo anche a 16 dopo oltre i 100 utenti attivi
Ciao!
Sto cercando di estrarre le foto con la funzione photos.getAlbum ma non ci riesco pur utilizzando la tua classe, potresti darmi qualche dritta per favore?
Sto tentando di costruire un’applicazione sul profilo perchè qualcuno ha più di un account con il proprio nome e vorrebbe avere i profili unificati attraverso un applicazione. Credo si possa fare vero?
Se utilizzo i tag fb: per le immagini funziona regolarmente, se uso la funzione tirando fuori le immagini direttamente dopo la chiamata a getalbums, e delle prove con print_r($albums), non si visualizzano neanche le mie di foto.
Ho provato a creare una funzione nella tua classe ma non va lo stesso, potresti pensarci tu ad integrarla nella classe? Potrebbe essere un’idea utile.
A presto!
Ok, appena ho un attimo di tempo vedrò di lavorarci e rilasciare una nuova versione della classe
Ragazzi ho seguito tutte le istruzioni alla lettera ma quando cerco di visualizzare la mia applicazione ottengo:
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ‘}’ in /membri/linuxk7/apps/lib/FBToolbox.class.php on line 35
tenete presente che le cartelle membri/linuxk7 fanno parte del mio account altervista su cui risiede la mia applicazione. In riferimento alla guida la cartella facebook è stata sostituita da apps. Per maggior sicurezza elenco il contenuto di ogni singola cartella
apps:
config.php
inde.php
lib (cartella)
lib:
FBToolbox.class.php
client(cartella)
client: (cartella php delle api facebook)
Grazie a tutti
Penso che il problema sia dovuto al fatto che la classe FBToolbox è stata scritta in PHP5, mentre sul tuo server gira probabilmente PHP4.
Aggiornalo e funzionerà senza problemi
check it out if you want to develop facebook application
http://www.stylephp.com/2009/06/28/lets-develop-a-facebook-application-part-one/
Ciao, ho seguito per benino tutto.
Ho caricato on line sul mio server ma succede qualcosa di strano.
Nel file index.php c’è:
Ciao <fb:name uid='getUserID() ?>’ useyou=’false’ possessive=’false’ />!
Se chiamo l’applicazione con l’indirizzo:
http://www.mio server.it/fbapplication
la pagina non da errori ma vedo solamente CIAO!
Se faccio visualizza HTML vedo:
Ciao !
Perchè non mi stampa il mio UID a video?
Se invece chiamo la pagina:
http://apps.facebook.com/miappalicazione
ho l’errore 405:
Ricevuto codice errore HTTP 405 durante il caricamento di http://www.mio server.it/fbapplication
Ho configurato l’applicazione “Cancas settings” come FBML, se lascio come IFRAME ho la stessa visualizzazione di come quando chiamo la pagina dal mio server. Perchè??
Grazie e ciao
Fabrizio
non riesco a copiare il codice… perchè alla spedizione viene ripulito, manca:
***
Se faccio visualizza HTML vedo:
Ciao fb:name uid=’MIOUID’ useyou=’false’ possessive=’false’ !
come se non renderasse i “pezzi” FB:
Suggerimenti?
Ciao Anche io ho seguito alla lettera tutta la procedura e devo dire che funziona perfettamente, le uniche 2 cose che non riesco a capire è come aggiungere il pulsante “aggiungi a profilo” ed estrarre gli amici per l’invito
per il primo punto seguendo la tua procedura non mi appare nulla ho provato in vari modi ma niente e anche invia ad amici mi funziona, nello script ho visto che ci sono da settare dei parametri ma non ho capito cosa bisogna scriverci dentro tipo:
$fb->addToProfile(‘contenuto del box wide’, ‘contenuto del box narrow’); qui cosa va inserito tra le virgolette?
stessa cosa qui:
//$fb->sendEmail(‘LISTA_DI_ID_SEPARATI_DA_VIRGOLA’, ‘Oggetto della mail’,'Corpo del messaggio’);
grazie cmq per l’ottimo tutorial e per le eventuali risposte
Recuperare la lista di amici dell’utente corrente:
$friendList = $fb->getFriendList(false);
Ho cercato di gestire questa cosa, ma non ci sono riuscito. Come si fa a mostrare la lista di amici?
Non riesco a capire come mai ogni volta che vado nella applicazione mi viene fuori una maschera che chiede la password.
Perchè questo?
Se uso la libreria normale di facebook questo non succede.
mi potete aiutare?
Grazie
Eccomi ha chiedere aiuto a uno più esperto di me, dunque ho seguito alla lettera la tua guida e ho ottenuto dei buoni risultati, perlomeno l’applicazione si visualizza correttamente!
Ciò che non riesco a capire, e che in tutte le maniere non riesco a ottenere è la famosa finestra per invitare gli amici!
L’applicazione è strutturata in flash, quindi viene visualizata all’interno di un iframe (Presumo) a sua volta come da guida tua ho creato due file (config.php) dove ho inserito come detto da te questo:
ed infine ho creato un file index.php inserendo () richiamo il tutto settando tutto bene, e funziona la visualizazione!
Ora vorrei gentilmente sapere come poter (allacciare) ad un link ad un testo la classe appunto per invitare gli amici!
Grazie in anticipo!
ehi ciao! grazie per la tua guida… ho imparato tantissimo … MA !!! non riesco a capire perchè quando clicco su vai all’applicazione mi lascia questo messaggio:
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ‘}’ in /membri/djandrew85/facebookapp/pupazzettoverita/lib/FBToolbox.class.php on line 35
dov è l’errore ? le parentesi sono tutte chiuse……
please rispp!
Stesso tuo problema… non sono ancora riuscito a capire perchè non va
senza inserimento nella classe:
$_albumfql = “SELECT aid, cover_pid, owner, name, created, modified, description, location, link, size, visible FROM album WHERE owner=$uid1 AND aid IN (aid)”;
$_album = $facebook->api_client->fql_query($_albumfql);
if($_album != NULL)
$aid1 = $_album[0]['aid'];
$_photosfql = “SELECT pid, aid, owner, src, src_big, src_small, link, caption, created FROM photo WHERE pid IN (SELECT pid FROM photo_tag WHERE subject=$uid1) AND aid=$aid1 AND pid IN (pid)”;
$_photos = $facebook->api_client->fql_query($_photosfql);
/*$pid = array();
if($_photos != NULL)
{
$pid = $_photos[0]['pid'];
} */
?>
<?php
for($i = 0; $i < count($_photos); $i++)
{
$pid = $_photos[$i]['pid'];
echo '
‘;
if($i % 4)
{
echo ‘ ’;
}
}
?>
ma non succede nulla!
mi daresti un suggerimento per favore? come posso fare?
Grazie!
Ciao Ghido Volevo chiederti di contattarmi alla mia mail .
Volevo chiederti un preventivo per una applicazione facebook semplicissima…
Volevo implementare delle strategie di incentive marketing su Facebook… se mi mandi una mail su hitch.seduction@gmail.com ti spiego meglio è molto semplice
Grazie della tua attenzione
Vedo che sei molto disponibile Complimenti!
Ciao.
Ho seguito la tua bellissima e utilissima guida e ho creato un’applicazione su Facebook. Funziona tutto, tranne una cosa che ora ti spiego.
Al momento della pubblicazione di una notizia sul profilo dell’utente (fatta copiando il codice che hai scritto al paragrafo “Pubblicare una notizia sul profilo dell’utente corrente”), la pubblicazione funziona solo per le prime 100 volte totali, indipendentemente da come sono suddivise fra gli utenti. Al 101° tentativo, viene generato il seguente errore:
Fatal error: Uncaught exception ‘FacebookRestClientException’ with message ‘L’applicazione dispone attualmente di 100 pacchetti modello attivi. Il limite di 100 per applicazione è stato quindi raggiunto o superato. Disattiva i pacchetti modello che non utilizzi più.’ in D:\Inetpub\blablabla\lib\client\facebookapi_php5_restlib.php:3112.
Come posso risolvere? Grazie mille!
@Nicola
api_client->feed_getRegisteredTemplateBundles();
foreach ($lista as $k=>$v){
$fb->api_client->feed_deactivateTemplateBundleByID($v['template_bundle_id']);
}
?>
cosí cancelli tutti i template.
se sei arrivato subito a 100 é perché per ogni post su fb hai registrato un template
una volta registrato devi utilizzare il suo bundle_id
ciao
riscrivo il codice non l’ha preso
$lista=$fb->api_client->feed_getRegisteredTemplateBundles();
foreach ($lista as $k=>$v){
$fb->api_client->feed_deactivateTemplateBundleByID($v['template_bundle_id']);
}
$fb->renderInvite($url, ‘TuaApplicazione’);
come faccio ad aumentare il numero degli inviti? è’ fissato a tre
sempre su $fb->renderInvite($url, ‘TuaApplicazione’);
se clicco su salta non mi va da nessuna parte..che devo cambiare?
grazie e scusa
Ciao,
complimenti per l’ottima guida e classe.
Sto impazzendo per capire come fare 1 cosa:
Come si puo’ pubblicare sulla nostra home page l’applicazione? Mi spiego meglio, giocando es. a Mafia Wars, o Happy Acquarium, capita le volte, quando acquistiamo un nuovo oggetto o pesce ci chiede in automatico di postare sulla Nostra home page l’immagine dell’oggetto/pesce acquistato in compagnia di un testo e di un link, e questo facilita di molto la divulgazione dell’applicazione.
Vorrei capire sia come farla in automatico, sia come generare un pulsante.
Grazie,
Antonio
Facebook toolbox non e’ piu’ scaricabile, dove la trovo?
Se guardi bene, qua sopra c’è un bel pulsantone verde per il download
Apposto, scaricavo l’originale, ma ho poi scaricato quella modificata
Ciao…ho provato il codice che hai postato ed ho ottenuto i risultati sperati per tutti tranne uno.
Praticamente…vorrei scrivere una notizia sul profilo dell’utente corrente ed ho provato con il seguente codice:
// creo il template
$one_line_story_templates[] = ‘{*actor*} ti saluta’;
$templateBundleId = $fb->getTemplateBundleId($one_line_story_templates);
//pubblico la news
$fb->publishNewsFeed($templateBundleId);
Ho provato a scrivere qualcosa sul mio profilo ma non ha funzionato, non esce nulla.
Devo aggiungere qualcosa? Come posso risolvere questo problema?
Ghido puoi aiutarmi?
La classe non è aggiornata: quel metodo non è più disponibile nel’api di facebook. Ora va usato il stream.publish
Ciao Ghido, grazie a te sto completando la mia prima applicazione facebook.
Volevo chiederti un piccolo consiglio.
Volevo inserire degli effetti sonori alla mia applicazione ma vedo che il tag html di EMBED
non funziona su facebook. Quale alternativa posso usare per introdurre degli effetti sonori nel mio codice php?
Puoi usare il tag fb:mp3, oppure fb:swf, o ancora fb:flv.
Quando hai finito la tua app, segnalamela in questa pagina
Grazie Ghido, penso di finirla per domani, segnalerò l’applicazione dove mi hai detto. Ciao
Ciao…mi chiedevo se c’era qualcosa per l’ascolto dei file .wav in autorun
Salve riguardo a:
$fb->sendNotification(‘LISTA_DI_ID_SEPARATI_DA_VIRGOLA’, ‘Messaggio della notifica’, ‘app_to_user’);
dove c’e scritto ‘app_to_user’ cosa bisogna inserire?
Inoltre vorrei chiedere c’e un limite al messaggio?
Si possono usare i tag fbml nel messaggio?
Ciao e rigraziamenti anticipati
ho seguito l’articolo, complimenti… vorrei porti una domanda… ho fatto un applicazione che aggiunge un profile box… ma al suo interno mi accetta solo variabili php e nn funzioni… se io volessi ad esempio fare una query quando l’utente entra nel suo profilo come potrei fare? grazie in anticipo
Salve, è passato praticamente un anno dalla stesura di questa guida e immagino che non riceverò mai risposta… però io ci provo lo stesso.
Il mio problema sembra essere comune a tanti anche quì, in pratica il tag “fb” sembra non venire considerato di conseguenza non viene estratto il nick e tutto il resto.
Da quello che so è una cosa normale se si esegue l’applicazione al di fuori di facebook essendo un tag proprietario di fb. Il problema è che questo succede anche nell’applicazione eseguita su fb. (http://apps.facebook.com/wilez_prova/)
Funziona tutto bene, cioè senza errori, ma in pratica il tag fb non viene preso in considerazione.
Qualcuno ha risolto?
Grazie.
ciao stò finendo un lavoro per un cliente, mi puoi aggiungere sul tuo msn e darmi una mano a creare un applicazione facebook, sono esperto in altri ambiti ma non uso facebook, è molto urgente ed importante mi fai questo piacere?
Ciao il file dei PHP non funzione più. Come posso fare per continuare a creare un layout?…Sono inesperta sul campo, ma il file che dici di scaricare FB da: spiacenti! ecc. e ti rimanda alla home di FB oppure in un sito che però non trova la pagina…potete aiutarmi please? Aspetto una risposta!!!
Ciao, è vero sul sito ufficiale non funziona più, però se scarichi quello modificato da me, funziona ancora
Tieni conto, però, che questo articolo è vecchio… alcuni metodi della classe non funzioneranno più.
Ciao,
prima di tutto complimenti per le utilissime guide…
Sto anche io cercando di fare una semplice applicazioncina, diciamo che fino a far caricare l’index funziona tutto, poi però io dovrei far caricare altri file php tramite un submit, quello che mi chiedevo è: l’istruzione include_once(“config.php”) deve essere messa in tutti i file che andranno caricati!?
Ciao Ghido,
Ho trovato un link corrotto alla risorsa: PHP Client Libraries
Questo post è ormai vecchio e anche la classe è obsoleta. Vi invito a scaricare quella nuova, aggiornata alle Graph API!