Visita <a href="http://www.liquida.it/" title="Notizie e opinioni dai blog italiani su Liquida">Liquida</a> e <a href="I widget di Liquida per il tuo blog">Widget</a>

mar25
Categoria: Facebook, PHP, Tutorial | Autore: Ghido

Creare applicazioni Facebook

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  Facebook Toolbox 2.0 (2,7 KiB) - scaricato 1.438 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:

  • Struttura di un'applicazione FacebookNella cartella principale, che chiameremo facebookapp ad esempio, andranno tutti i file.
  • All’interno di essa create una cartella lib.
  • Dentro lib copiate il file FBToolbox.class.php e tutta la cartella php estratta dalle Client Libraries.
  • Rinominate la cartella php in client.

Ora siamo pronti per creare il nostro primo Hello World.

2. Inizializzare l’applicazione

Create il file config.php e scrivete:

<?php
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:

<?php include_once('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:

$userid= $fb->getUserID();

Recuperare i dati dell’utente corrente:

$userInfo = $fb->getUserInfo();
$name = $userInfo[0]['first_name'];
$city = $userInfo[0]['current_location']['city'];

Recuperare la lista di amici dell’utente corrente:

$friendList = $fb->getFriendList(false);

Aggiungere l’applicazione al profilo dell’utente corrente:

$fb->addToProfile('contenuto del box wide', 'contenuto del box narrow');

Oltre a questa funzione, va inserito nella pagina anche il seguente codice, che visualizza l’apposito pulsante:

<div class="section_button">
    <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:

$fb->sendNotification('LISTA_DI_ID_SEPARATI_DA_VIRGOLA', 'Messaggio della notifica', 'app_to_user');

Inviare una email ad una lista di utenti:

$fb->sendEmail('LISTA_DI_ID_SEPARATI_DA_VIRGOLA', 'Oggetto della mail','Corpo del messaggio');

Pubblicare una notizia sul profilo dell’utente corrente:

// creo il template
$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:

if(isset($_POST['ids'])){
    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.

Ti è piaciuto l'articolo? Vota Ok oppure No. Grazie Mille!

Leggi anche:

44 Commenti

  1. Angel

    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.. :)

    • Ghido

      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!

  2. Mauro

    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.

    • Ghido

      Puoi specificare meglio l’errore che ti restituisce?

      • Mauro

        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?

        • Ghido

          Ma oltre alla chiamata PHP, hai inserito anche il tag
          <fb:add-section-button section="profile"/>
          subito dopo?

  3. Mauro

    Si certamente altrimenti non avrei potuto visualizzare il pulsante … sul forum ufficiale ci sono molti esempi con try, catch ma non funziona lo stesso …

  4. Mauro

    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?

    • Ghido

      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.

      • Mauro

        ma credo solo quelle costruite dai developers sono così limitate, quelle di facebook arrivano anche a 60 ho notato !!

        • Mauro

          rettifico!
          adesso arrivo anche a 16 dopo oltre i 100 utenti attivi

  5. Mauro

    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!

    • Ghido

      Ok, appena ho un attimo di tempo vedrò di lavorarci e rilasciare una nuova versione della classe :wink:

  6. Malox

    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

    • Ghido

      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 :wink:

  7. check it out if you want to develop facebook application :)

    http://www.stylephp.com/2009/06/28/lets-develop-a-facebook-application-part-one/

  8. Fabrizio

    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

  9. 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?

  10. 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

  11. Fiore

    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?

  12. Gianluca

    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

  13. 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!

  14. Andrea

    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!

    • Luca

      Stesso tuo problema… non sono ancora riuscito a capire perchè non va :(

  15. Mauro

    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!

  16. fausto

    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!

  17. Nicola

    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!

    • francesco

      @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

      • francesco

        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']);

        }

  18. $fb->renderInvite($url, ‘TuaApplicazione’);

    come faccio ad aumentare il numero degli inviti? è’ fissato a tre

  19. sempre su $fb->renderInvite($url, ‘TuaApplicazione’);

    se clicco su salta non mi va da nessuna parte..che devo cambiare?

    grazie e scusa

  20. Antonio

    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

  21. Facebook toolbox non e’ piu’ scaricabile, dove la trovo?

    • Se guardi bene, qua sopra c’è un bel pulsantone verde per il download :)

  22. Apposto, scaricavo l’originale, ma ho poi scaricato quella modificata

  23. Alduccio

    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?

    • eldax

      Ghido puoi aiutarmi?

      • La classe non è aggiornata: quel metodo non è più disponibile nel’api di facebook. Ora va usato il stream.publish

  24. eldax

    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 ;-)

      • Eldax

        Grazie Ghido, penso di finirla per domani, segnalerò l’applicazione dove mi hai detto. Ciao

      • eldax

        Ciao…mi chiedevo se c’era qualcosa per l’ascolto dei file .wav in autorun

  25. entony

    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

  26. 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

Lascia un commento

Inserisci le tue informazioni personali, o loggati con il tuo account Facebook.




Chiudi
Invia e-mail