Programmazione avanzata
di Facebook
Angelo Iacubino
Dipartimento Informatica - Università dell’Insubria - Como
www.disinformatica.com email: webmaster@disinformatica.com
www.facebook.com/disinformatica

Roberto Marmo
Facoltà di Ingegneria Università di Pavia, Facoltà di Scienze
MM.FF.NN. Università dellʼInsubria-Como
www.robertomarmo.net email: info@robertomarmo.net
www.facebook.com/robertomarmo
Application Programming
Interfaces
 ▪   metodologia standard di chiamate alle funzioni
 ▪   PHP come linguaggio ufficialmente supportato
 ▪   Client Library
Come effettuare le chiamate alle
funzioni di FB
Un primo esempio.....
Amici & Eventi
un esempio con utilizzo della chiamata events_get consente di
ottenere i seguenti risultati:

• recupera la lista di amici dell’utente corrente;
• memorizza lo user_id del secondo amico della lista;
• cerca tutti gli eventi associati al suddetto user_id;
• visualizza la lista dei partecipanti al terzo evento presente nella
lista degli eventi, suddivisa per “partecipanti”, “insicuri” o “in
forse”
Amici & Eventi (2)
$eventi = $Facebook->api_client->events_get($secondoamico,
                                                          null,
null,
null, null);
echo
 "<ul>";
$i =
 1;
if
   ($eventi)
   {

     
    
       foreach
   ($eventi
      as
   $evento)
    {

     
    
       
     
    
        if
   ($i == 3)
   $terzoevento=$evento['eid'];

     
    
       
     
    
        echo
 "<li>{$evento['name']}
 - luogo {$evento['location']}</li>";

     
    
       
     
    
        $i++; }
    
      

     
    
       $i--; echo
"Questo
    tuo
 amico
ha
    ben "
. $i
 . " eventi!<br>";

     
    
       $ev1
 = $Facebook->api_client->events_get(null,
     $terzoevento,
 null,
 null,
 null);

     
    
       echo
 "Gli utenti
che partecipano al terzo evento con id " .
$terzoevento
 . " e nome {$ev1[0]['name']}
                                                                                                                          sono:<br><br>";

     
    
       $membri = $Facebook->api_client->events_getMembers($terzoevento);

     
    
       echo
 "<p>Attesi</p>";    echo
 "<ul>";

     
    
       if
   ($membri['attending'][0])
       {

     
    
       
     
    
        foreach ($membri['attending'] as $membro)
 {

     
    
       
     
    
        
     
     
      
     echo
 "<li><fb:name
uid="$membro" useyou="false"
         /></li>"; }

     
    
       }
    else
 {    echo
    "....non
    ce
   ne
    sono"; }

     
    
       echo
 "</ul>"; echo
      "<p>...
     in
   forse:</p>"; echo
    "<ul>";

     
    
       if
   ($membri['unsure'][0])
 {

     
    
       
     
    
        foreach ($membri['unsure'] as $membro)
        {

     
    
       
     
    
        
     
     
      echo
 "<li><fb:name uid="$membro" useyou="false"
 /></li>"; }

     
    
       }
    else
 { echo
....non
                                     "             ce
    ne
   sono"; }

     
    
       echo
 "</ul>"; echo
      "<p>Insicuri:</p>"; echo
      "<ul>";

     
    
       if
   ($membri['not_replied'][0])
 {

     
    
       
     
    
        foreach
    ($membri['not_replied']
                                                                          as
         $membro)
        {

     
    
       
     
    
              echo
 "<li><fb:name uid="$membro" useyou="false"
            /></li>"; }

     
    
       }
    else
 { echo
....non
                                     "             ce
    ne
   sono"; }

     
    
       echo
 "</ul>";
}
    else
 {

     
    
       echo
 "<li>non
     ci
   sono
 eventi
      per
   questo
        tuo
      amico</li>"; } echo
   "</ul>";
groups.getMembers
users.getInfo
friends.getAppUsers
SQL vs FQL
Alcuni esempi...
Alcuni esempi...(2): tabelle di FB
indexable
field
FQL
FQL
FQL
FQL
FQL
Oltre il PHP...
Oltre il
PHP...
Tempi di attesa e Server Tuning (1)
• ridurre il numero di chiamate al server usando FQL al posto di API;
• nel caso occorrano molte chiamate API allo stesso momento, usare metodi batch.run per
combinare al massimo 20 operazioni in una singola richiesta, come specificato nella wiki
ufficiale;
• usare canvas realizzati con FBML, visualizzati più velocemente delle pagine iframe;
• spostare pezzi di codice scritti in JavaScript o CSS in file esterni, da importare nella pagina
per velocizzarne il caricamento. la piattaforma memorizza i file alla prima occasione d’uso e li
conserva per richieste successive con un meccanismo chiamato cache;
• usare il tag fb:ref per pubblicare lo stesso codice FBML verso tantissimi profili senza dover
ripubblicare il codice per ogni utente. Come nel caso precedente, la piattaforma usa il
meccanismo di cache;
• friends.get restituisce lo user_id dell’utente attuale. In genere la funzione viene chiamata in
varie parti del codice; conviene invece chiamarla durante il processo iniziale di caricamento;
• dovendo caricare numerose immagini o righe di dati molto lunghe, conviene dividere le
informazioni in pagine successive più leggere;
• se si decide di usare AJAX per aggiornare il contenuto delle pagine senza doverle ricaricare
per intero, limitare l’azione di aggiornamento solo a porzioni piccole della pagina.
Tempi di attesa e Server Tuning (2)
Tempi di attesa e Server Tuning (3)
Tempi di attesa e Server Tuning (4)
La Conoscenza (1)
La Conoscenza (2)
La Conoscenza (3)
Grazie per l’attenzione
 Domande?

Angelo Iacubino

www.disinformatica.com
webmaster@disinformatica.com
www.facebook.com/disinformatica

Roberto Marmo

www.robertomarmo.net
info@robertomarmo.net
www.facebook.com/robertomarmo
(c) 2009 Facebook, Inc. or its licensors.  "Facebook" is a registered trademark of Facebook, Inc.. All rights reserved. 1.0

Facebook Developer Garage Venice 2 parte

  • 2.
    Programmazione avanzata di Facebook AngeloIacubino Dipartimento Informatica - Università dell’Insubria - Como www.disinformatica.com email: webmaster@disinformatica.com www.facebook.com/disinformatica Roberto Marmo Facoltà di Ingegneria Università di Pavia, Facoltà di Scienze MM.FF.NN. Università dellʼInsubria-Como www.robertomarmo.net email: info@robertomarmo.net www.facebook.com/robertomarmo
  • 3.
    Application Programming Interfaces ▪ metodologia standard di chiamate alle funzioni ▪ PHP come linguaggio ufficialmente supportato ▪ Client Library
  • 4.
    Come effettuare lechiamate alle funzioni di FB
  • 5.
  • 6.
    Amici & Eventi unesempio con utilizzo della chiamata events_get consente di ottenere i seguenti risultati: • recupera la lista di amici dell’utente corrente; • memorizza lo user_id del secondo amico della lista; • cerca tutti gli eventi associati al suddetto user_id; • visualizza la lista dei partecipanti al terzo evento presente nella lista degli eventi, suddivisa per “partecipanti”, “insicuri” o “in forse”
  • 7.
    Amici & Eventi(2) $eventi = $Facebook->api_client->events_get($secondoamico, null, null, null, null); echo "<ul>"; $i = 1; if ($eventi) { foreach ($eventi as $evento) { if ($i == 3) $terzoevento=$evento['eid']; echo "<li>{$evento['name']} - luogo {$evento['location']}</li>"; $i++; } $i--; echo "Questo tuo amico ha ben " . $i . " eventi!<br>"; $ev1 = $Facebook->api_client->events_get(null, $terzoevento, null, null, null); echo "Gli utenti che partecipano al terzo evento con id " . $terzoevento . " e nome {$ev1[0]['name']} sono:<br><br>"; $membri = $Facebook->api_client->events_getMembers($terzoevento); echo "<p>Attesi</p>"; echo "<ul>"; if ($membri['attending'][0]) { foreach ($membri['attending'] as $membro) { echo "<li><fb:name uid="$membro" useyou="false" /></li>"; } } else { echo "....non ce ne sono"; } echo "</ul>"; echo "<p>... in forse:</p>"; echo "<ul>"; if ($membri['unsure'][0]) { foreach ($membri['unsure'] as $membro) { echo "<li><fb:name uid="$membro" useyou="false" /></li>"; } } else { echo ....non " ce ne sono"; } echo "</ul>"; echo "<p>Insicuri:</p>"; echo "<ul>"; if ($membri['not_replied'][0]) { foreach ($membri['not_replied'] as $membro) { echo "<li><fb:name uid="$membro" useyou="false" /></li>"; } } else { echo ....non " ce ne sono"; } echo "</ul>"; } else { echo "<li>non ci sono eventi per questo tuo amico</li>"; } echo "</ul>";
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
    Tempi di attesae Server Tuning (1) • ridurre il numero di chiamate al server usando FQL al posto di API; • nel caso occorrano molte chiamate API allo stesso momento, usare metodi batch.run per combinare al massimo 20 operazioni in una singola richiesta, come specificato nella wiki ufficiale; • usare canvas realizzati con FBML, visualizzati più velocemente delle pagine iframe; • spostare pezzi di codice scritti in JavaScript o CSS in file esterni, da importare nella pagina per velocizzarne il caricamento. la piattaforma memorizza i file alla prima occasione d’uso e li conserva per richieste successive con un meccanismo chiamato cache; • usare il tag fb:ref per pubblicare lo stesso codice FBML verso tantissimi profili senza dover ripubblicare il codice per ogni utente. Come nel caso precedente, la piattaforma usa il meccanismo di cache; • friends.get restituisce lo user_id dell’utente attuale. In genere la funzione viene chiamata in varie parti del codice; conviene invece chiamarla durante il processo iniziale di caricamento; • dovendo caricare numerose immagini o righe di dati molto lunghe, conviene dividere le informazioni in pagine successive più leggere; • se si decide di usare AJAX per aggiornare il contenuto delle pagine senza doverle ricaricare per intero, limitare l’azione di aggiornamento solo a porzioni piccole della pagina.
  • 23.
    Tempi di attesae Server Tuning (2)
  • 24.
    Tempi di attesae Server Tuning (3)
  • 25.
    Tempi di attesae Server Tuning (4)
  • 26.
  • 27.
  • 28.
  • 29.
    Grazie per l’attenzione Domande? Angelo Iacubino www.disinformatica.com webmaster@disinformatica.com www.facebook.com/disinformatica Roberto Marmo www.robertomarmo.net info@robertomarmo.net www.facebook.com/robertomarmo
  • 30.
    (c) 2009 Facebook,Inc. or its licensors.  "Facebook" is a registered trademark of Facebook, Inc.. All rights reserved. 1.0