SlideShare a Scribd company logo
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

More Related Content

Viewers also liked

2015 Updated Docx
2015 Updated Docx2015 Updated Docx
2015 Updated DocxGwen Modert
 
Presentación1lo
Presentación1loPresentación1lo
Presentación1lolbayonaa
 
«использование коррегирующей гимнастики в режимных моментах, как фактор укреп...
«использование коррегирующей гимнастики в режимных моментах, как фактор укреп...«использование коррегирующей гимнастики в режимных моментах, как фактор укреп...
«использование коррегирующей гимнастики в режимных моментах, как фактор укреп...aviamed
 
проект неделя здоровья
проект неделя здоровьяпроект неделя здоровья
проект неделя здоровьяaviamed
 
Rbm training powerpoint presentation
Rbm training powerpoint presentationRbm training powerpoint presentation
Rbm training powerpoint presentation
Arwen Folkes
 
La magia de nuestros sentidos
La magia de nuestros  sentidosLa magia de nuestros  sentidos
La magia de nuestros sentidos
Luz Mayerly Gallo Diaz
 
La Sicurezza delle Informazioni nel Web 2.0
La Sicurezza delle Informazioni nel Web 2.0La Sicurezza delle Informazioni nel Web 2.0
La Sicurezza delle Informazioni nel Web 2.0
Angelo Iacubino
 
93613757 how-to-teach
93613757 how-to-teach93613757 how-to-teach
93613757 how-to-teachEdgar Sanchez
 
FINAL REVISIONS MS THESIS
FINAL REVISIONS MS THESISFINAL REVISIONS MS THESIS
FINAL REVISIONS MS THESISTom Hajek
 
Scaphoid fractures and non union
Scaphoid fractures and non unionScaphoid fractures and non union
Scaphoid fractures and non union
Raunak Milton
 
Sectional Anatomy of the Brain Stem
Sectional Anatomy of the Brain StemSectional Anatomy of the Brain Stem
Sectional Anatomy of the Brain Stem
Rayhan Shahrear
 
Ch fichas
Ch fichasCh fichas
бунин цифры
бунин цифрыбунин цифры
бунин цифры
aviamed
 
Maslenica
MaslenicaMaslenica
Maslenicaaviamed
 
Invierno
Invierno Invierno

Viewers also liked (17)

2015 Updated Docx
2015 Updated Docx2015 Updated Docx
2015 Updated Docx
 
Presentación1lo
Presentación1loPresentación1lo
Presentación1lo
 
Precentacion power poin
Precentacion power poinPrecentacion power poin
Precentacion power poin
 
«использование коррегирующей гимнастики в режимных моментах, как фактор укреп...
«использование коррегирующей гимнастики в режимных моментах, как фактор укреп...«использование коррегирующей гимнастики в режимных моментах, как фактор укреп...
«использование коррегирующей гимнастики в режимных моментах, как фактор укреп...
 
проект неделя здоровья
проект неделя здоровьяпроект неделя здоровья
проект неделя здоровья
 
Rbm training powerpoint presentation
Rbm training powerpoint presentationRbm training powerpoint presentation
Rbm training powerpoint presentation
 
Pink Floyd
Pink FloydPink Floyd
Pink Floyd
 
La magia de nuestros sentidos
La magia de nuestros  sentidosLa magia de nuestros  sentidos
La magia de nuestros sentidos
 
La Sicurezza delle Informazioni nel Web 2.0
La Sicurezza delle Informazioni nel Web 2.0La Sicurezza delle Informazioni nel Web 2.0
La Sicurezza delle Informazioni nel Web 2.0
 
93613757 how-to-teach
93613757 how-to-teach93613757 how-to-teach
93613757 how-to-teach
 
FINAL REVISIONS MS THESIS
FINAL REVISIONS MS THESISFINAL REVISIONS MS THESIS
FINAL REVISIONS MS THESIS
 
Scaphoid fractures and non union
Scaphoid fractures and non unionScaphoid fractures and non union
Scaphoid fractures and non union
 
Sectional Anatomy of the Brain Stem
Sectional Anatomy of the Brain StemSectional Anatomy of the Brain Stem
Sectional Anatomy of the Brain Stem
 
Ch fichas
Ch fichasCh fichas
Ch fichas
 
бунин цифры
бунин цифрыбунин цифры
бунин цифры
 
Maslenica
MaslenicaMaslenica
Maslenica
 
Invierno
Invierno Invierno
Invierno
 

Facebook Developer Garage Venice 2 parte

  • 1.
  • 2. 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
  • 3. Application Programming Interfaces ▪ metodologia standard di chiamate alle funzioni ▪ PHP come linguaggio ufficialmente supportato ▪ Client Library
  • 4. Come effettuare le chiamate alle funzioni di FB
  • 6. 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”
  • 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>";
  • 15. FQL
  • 16. FQL
  • 17. FQL
  • 18. FQL
  • 19. FQL
  • 22. 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.
  • 23. Tempi di attesa e Server Tuning (2)
  • 24. Tempi di attesa e Server Tuning (3)
  • 25. Tempi di attesa e Server Tuning (4)
  • 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