-+  Associazione
-+  Documenti
-+  Eventi
-+  Community
-+  Blog
-+  Link

Febbraio 2014

Dom Lun Mar Mer Gio Ven Sab
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28  

Cerca






 

« 7 giorni al termine del Contest! | Home | YAPC::EU::2010 Newsletter #01 - Quando, dove, chi... e alcuni ringraziamenti! »

Scrivere applicazioni Facebook in Perl (parte 1)
02.01.10

Questa è la traduzione di questo mio articolo in inglese.

Quindi volete scrivere un'applicazione per questo social network controverso ma abbondantemente utilizzato. La buona notizia è che potete usare che linguaggio vi pare per fare ciò, poiché le applicazioni per Facebook risiedono su un server di vostra scelta e si tratta semplicemente di configurare FB affiché mappi l'applicazione alla URL sul vostro server.

I linguaggi più comunemente utilizzati per estendere Facebook sono FBML (un linguaggio di markup da inserirsi direttamente nella pagine che si creano) e PHP. Noi utilizziamo il nostro preferito, cioè Perl.

Questo breve articolo illustra come creare qualcosa di molto semplice. Spero che comunque questo post diventi semplicemente la prima parte di una serie di articoli dove possiamo sviluppare applicazioni più complesse.

Prima di tutto è necessario compiere qualche operazione su Facebook.

Se guardate in fondo ad una pagina qualsiasi del network, trovate un piccolo link "Developer" (NB: io utilizzo Facebook in inglese, quindi in italiano le diciture saranno chiaramente un po' diverse) assieme ad una serie di altri link. Cliccate su di esso e vi trovate in una pagina introduttiva per sviluppatori. Cliccate sul grande bottone rosso con scritto "Start building for your site": vi verrà chiesto di inserire l'URL del vostro sito web e di caricare un file HTML in esso (in modo da verificare che ne abbiate il controllo). È probabilmente una buona idea dedicare un dominio virtuale all'applicazione.

Cliccate ora sul link "Developer dashboard" nella zona gialla della pagina, accettare l'applicazione Developer: ora è tutto configurato per gestire la propria applicazione (nonché crearne altre, rimuoverle, ...). L'applicazione creata è gestibile all'indirizzo:

http://www.facebook.com/developers/

Se date un'occhiata a questa pagina, troverete le API keys ed altri dati relativi all'applicazione. Il codice di esempio è (toh!) in PHP, ma di seguito trovate un esempio che utilizza Perl.

Prima di tutto, clicca su Edit Settings all'interno della vostra applicazione e portatevi sul tab Canvas. I primi due campi di questo tab rappresentano le parti dell'URL che volete appaia su Facebook ( Canvas Page URL ) e la URL dell'applicazione sul vostro web server ( Canvas Callback URL ): Facebook mappa la prima URI alla seconda, quindi queste vanno configurate correttamente. Nello stesso tab, configurate anche il Render Method a FBML: gli esempi qui riportati necessitano di questa impostazione per funzionare correttamente.

Il vostro sito è ora "connesso" a Facebook e sia voi chee i vostri utenti potete ora accede all'applicazione tramite:

http://apps.facebook.com/your_canvas_page_name/

Questo è tutto per la parte indipendente dal linguaggio. Ci sono in realtà un sacco di altre opzioni di configurazione: potete darci un'occhiata oppure leggerne la documentazione. Le utilizzeremo probabilmente in articoli futuri.

La forma più semplice dell'applicazione Perl è:

use Modern::Perl;
use CGI::Simple;
my $q = CGI::Simple->new();

print $q->header();
print "Ciao Facebook";

Accedendo alla Canvas Page URL vedrete la scritta Ciao Facebook all'interno delle solite decorazioni del social network.

Proviamo ora a scrivere qualcosa solo un pelino più complesso, che vorrebbe mostrare i nomi degli amici dell'utente che utilizza l'applicazione. Abbiamo bisogno di un modulo CPAN, il comodo WWW::Facebook::API di David Romano. Questa libreria fornisce un wrapping Perl attorno all'API di Facebook.

use Modern::Perl;
use CGI::Simple;
use WWW::Facebook::API;
#use Data::Dump qw/dump/;

my $q = CGI::Simple->new();
my $fb = WWW::Facebook::API->new(
    desktop => 0,
    api_key => 'your_api_key',
    secret  => 'your_secret_key',
    query   => $q,
);

# UTF-8 non funziona così bene con Facebook, usiamo latin1
print $q->header(
    -charset    => 'ISO-8859-1',
);

# FBML per mostrare nome dell'applicazione, etc
print '<fb:header/><div>';

# Questo stampa il codice FBML per redirigiere alla pagina di aggiunta
# dell'applicazione nel caso essa già non sia tra quelle dell'utente
$fb->require_add() and exit;

# Ottiene parametri del canvas (utente corrente, ...)
my $params = $fb->canvas->validate_sig();
# print dump $params; # Have a look at these

# Imposta la session key a quella passata da Facebook
$fb->session_key( $params->{session_key} );

print '<h3>Prima Applicazione Facebook</h3><br />';

# Ottiene gli amici dell'utente loggato (ritorna un array di uid)
my $user_friends = $fb->friends->get();

# Ottiene i campi che ci interessano (il nome) degli amici dell'utente
my $friends_info = $fb->users->get_info(
    uids    => $user_friends,
    fields  => [qw/ name /],
) // [ ];

# Stampa in forma "gradevole"
print '<h4>Your friends (' . @$friends_info . ')</h4><br />';
print '<ul><li>';
print join '</li><li>', sort map { $_->{name} } @$friends_info;
print '</li></ul>';

print '</div>';

# Libera la session key (utile se siamo in ambiente persistente)
$fb->session_key(undef);

Il codice mostrato mostra all'utente collegato, una vota che egli/ella ha aggiunto (autorizzato) l'applicazione (non necessario se siete autori dell'applicazione, ma provate ad utilizzare un account FB diverso...), con la lista dei suoi amici ordinata alfabeticamente.

Beh,. per oggi basta. ;-)

Inviato da arthas il 02.01.10 12:23
Ti è piaciuto questo articolo? Iscriviti al feed!

Inviato da Stefano il 04.04.10 03:39

Ciao,

sapresti dirmi perchè non mi funziona il modulo

use WWW::Facebook::API;

Io ho un hosting linux su aruba.it

Grazie ;)

Inviato da Michele Beltrame il 07.04.10 17:40

Ciao!

Purtroppo "non mi funziona" è un po' generico e non posso aiutarti più che con qualche indicazione generica.

Penso che sia plausibile che WWW::Facebook::API non sia installato sul server dove sei in hosting. Dovresti informarti con il tuo provider (Aruba) per una possibile soluzione.

A presto,
Michele.

Inviato da Stefano il 19.04.10 16:33

Ciao,

Si, il mio provider non mi permette di installarli.
In compenso mi ha detto di caricarli nella directory cgi-bin e di fare così;

...
use lib '/web/htdocs/www.miosito.com/home/cgi-bin/Facebook/';
use API;

E qui due considerazioni:
1- Dal modulo API.pm ho omesso le spiegazioni sennò dava errore, quindi dall"#__END__" in poi ho tolto tutto.. ma vabbè dovrebbe essere ininfluente.

2-Lo richiamo e non da errore. Fintanto che non faccio:
my $fb = API->new(
desktop => 0,
api_key => 'la mia api key',
secret => 'il mio secret',
);

Sai dirmi qualcosa?
Ciaooo,
grazie! ;)

Inviato da Michele Beltrame il 20.04.10 00:18

Ciao!

Forse è meglio qualcosa tipo:

----------
use lib '/web/htdocs/www.miosito.com/home/cgi-bin/';
use Facebook::API;

my $fb = API->new(
desktop => 0,
api_key => 'la mia api key',
secret => 'il mio secret',
);
----------

Se ti da ancora ancora errore, potresti indicare il problema preciso?

Graziee,
Michele.

Inviato da Stefano il 20.04.10 01:51

Ciao,

si da errore:

[Tue Apr 20 00:43:34 2010] [error] [client 69.63.1**.2**] Subroutine redirect redefined at /web/htdocs/www.miosito.com/home/cgi-bin/WWW/Facebook/API.pm line 236.
[Tue Apr 20 00:43:34 2010] [error] [client 69.63.1**.2**] Can't locate object method "app_path" via package "API" at /web/htdocs/www.miosito.com/home/cgi-bin/WWW/Facebook/API.pm line 88.

Comunque fa conto che ho corretto una cosa che forse prima non avrei dovuto fare: cioè ho caricato il modulo nella sottocartella WWW che avevo deciso (non so perchè) di omettere.
Quindi ora correttamente API.pm sta in
miosito.com/cgi-bin/WWW/Facebook/API.pm

Prima era in cgi-bin/Facebook/API.pm

Grazie,
Ciaoooooooooooo ;)

Inviato da Michele Beltrame il 22.04.10 11:56

Ottima la correzione, in effetti qualche errore l'avevo fatto anch'io.

Prova con questo:

----------
use lib '/web/htdocs/www.miosito.com/home/cgi-bin/';
use WWW::Facebook::API;

my $fb = WWW::Facebook::API->new(
desktop => 0,
api_key => 'la mia api key',
secret => 'il mio secret',
);
----------

A presto,
Michele.

Inviato da Stefano il 23.04.10 03:14

Ciao,

no l'errore permane!.. per risolvere quello sulla sub redirect l'ho rinominata all'interno di API.pm (l'ho chiamata r_edirect in tutta il file API.pm).
Tuttavia permane l'errore "Can't locate object method "app_path"..."

Grazie,
Ciaooo!!!










Devo ricordare i dati personali?






D:
Sull'autore...
D:
La ML di Perl.it
Iscriviti! mongers@lists.perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
D:
Annunci Google