Post automatico di contenuti su Facebook

In questa serie di articoli studieremo come sia possibile postare automaticamente contenuti su Facebook utilizzando il linguaggio PHP. Riuscire in questo compito richiede lo svolgimento di alcuni passi principali che esamineremo insieme con l’aiuto di esempi pratici.

Il problema e la sua soluzione

Facebook è sicuramente il social network più diffuso e utilizzato al mondo. Potente strumento di svago, ma anche di marketing, questa piattaforma sta guadagnando sempre più attenzione da parte dalle aziende grazie al suo enorme potenziale dal punto di vista pubblicitario.

Vi faccio un esempio. Attualmente io seguo lo sviluppo della versione Android e del relativo CMS di un’app dedicata ai comuni e alle attività commerciali. Questa app permette, inoltre, di pubblicizzare gli eventi della città. Una delle funzionalità che mi sono state richieste è stata proprio quella di poter postare in automatico gli eventi inseriti con il CMS direttamente sulla pagina Facebook del comune. Un altro esempio? Attualmente sono al lavoro su un gestionale per piccoli negozi e uno dei moduli che sto sviluppando è quello di postare i nuovi articoli inseriti nel magazzino o gli articoli in promozione direttamente sulla pagina Facebook del negozio.

Vi garantisco che l’integrazione con i social network è una cosa molto gradita e richiesta al giorno d’oggi!

Da dove cominciare?

Come vedremo in seguito, postare contenuti su Facebook è più semplice di quanto si possa immaginare. La parte difficile è in realtà guadagnarsi il diritto di poter postare qualcosa. Ma come acquisire questo diritto?

Per postare contenuti su Facebook bisogna fare i seguenti due passi preliminari:

  • Iscriversi a Facebook Developers e registrare la propria app (sì, è vero: anche se in realtà state realizzando uno script PHP, dovrete registrare un’app!)
  • Ottenere un token di accesso

Questi due punti saranno oggetto dei prossimi paragrafi.

La registrazione di un’app su Facebook

Per prima cosa, dovete sapere che anche se state realizzando uno script PHP, Facebook lo considera come un’app e pertanto dovrete iscrivervi a Facebook Developer e registrare una nuova app, la quale dovrà essere approvata dagli sviluppatori del social network. Questo processo può essere lungo e non privo di ostacoli. Dovreste infatti fornire loghi, banner, istruzioni per il login, privacy policy… E sperare che il team di Facebook non la rifiuti.

Tuttavia, nel caso in cui lo sviluppatore dell’app sia anche il suo unico utilizzatore vi è una gradita eccezione: potrete fare a meno dell’approvazione. Se il vostro script che andrete a realizzare fa parte di un gestionale, o viene usato come interfaccia per un’app Android, oppure viene usato in procedure automatizzate (i famosi cron job), allora siete fortunati.

Darò per scontati i vari passi per registrarsi come sviluppatore, in quanto Facebook è molto chiaro al riguardo e si tratta in ogni caso di una semplice registrazione gratuita.

Vediamo, invece, come registrare una nuova app. Andate alla pagina https://developers.facebook.com/. In alto troverete la voce “My Apps”, aprite il menu e fate click su “Add a new app”. Nella finestra che si aprirà fate click su “Sito web”.

Aggiungi nuova

Inserite il nome della vostra app e fate click su “Create a New Facebook App ID”.

Inserisci nome app

Si aprirà una nuova finestra in cui dovrete inserire la categoria che meglio rappresenta la vostra app. Una volta fatto fate click su “Create App ID”.

Crea nuovo ID app

A questo punto si apre una nuova pagina che vi dà alcune indicazioni su come inizializzare il Facebook SDK per Javascript. Non si tratta del nostro caso e quindi navigate tranquillamente fino al fondo della pagina per inserire l’URL della pagina che dovrà generare i token di autenticazione. Una cosa molto importante da ricordare è che Facebook si rifiuterà di processare le vostre richieste se l’URL del sito non è quello giusto.

Inserisci URL sito

Avete finito! Fate click su “Skip to Developer Dashboard” per svolgere i passi successivi.

I  primi passi con le app di Facebook

Arrivati a questo punto sarete nella dashboard dell’applicazione. Cominciamo subito a familiarizzare con due parametri che sono l’App ID e l’App Secret. Il primo identifica univocamente la vostra app nell’universo di Facebook, il secondo ha la funzione di password. Entrambi saranno necessari e dovranno essere inclusi nello script PHP che andremo a creare.

Dashboard applicazione

La vostra app di default, appena creata, sarà in modalità offline. Questo vuol dire che se essa è progettata per postare dei contenuti su una pagina Facebook, solo lo sviluppatore dell’app potrà vederne gli effetti (a scopo di debug), mentre tutto il resto del mondo non vedrà assolutamente nulla. Comodo, no?

Alla fine dell’articolo vi spiegherò come rendere la vostra app “Live” e pienamente operativa.

Due parole sull’autenticazione e i permessi

Il processo di autenticazione di Facebook è basato sullo standard OAuth2. L’argomento è abbastanza complicato e renderebbe questo articolo troppo teorico e poco pratico (oltre al fatto che non basterebbe un articolo per trattarlo!), quindi in questa sezione faremo semplicemente due parole sui token di accesso.

Quando voi effettuate il login su Facebook, vi viene rilasciato un token di accesso. Esso è appunto un “gettone”, e sintetizza con un sofisticato algoritmo la vostra identità e i permessi che vi sono concessi. Ce ne sono di diversi tipi, ma noi ne esamineremo solo tre:

  • Token di accesso breve: viene rilasciato ad un utente che ha fatto il login, e dura al massimo due ore, dopodiché scade.
  • Token di accesso esteso: viene generato su richiesta a partire da un token di accesso breve e può durare al massimo fino a 60 giorni.
  • Token di accesso illimitato: viene generato a partire da un token di accesso esteso e può essere concesso solo per le pagine. Non scade mai e questo è proprio quello che vogliamo! Una volta generato, non dovremo mai più fare il login e la nostra app potrà funzionare tranquillamente.

Parliamo ora di permessi. Le app di Facebook possono fare diverse cose, e chiaramente ci deve essere una qualche forma di limitazione a quanto si può fare. Vi sarà sicuramente capitato che Facebook vi informi che un’app desidera pubblicare qualcosa sul vostro profilo. In quel momento voi state decidendo se concedere questo permesso oppure no.

Vedremo che anche il nostro codice di esempio non sfuggirà a questa regola e Facebook ci chiederà al primo tentativo di login se desideriamo davvero concedere i permessi di cui l’app necessita per funzionare.

I permessi che ci servono sono principalmente i seguenti due:

  • manage_pages: ci permette di gestire le pagine di cui il nostro utente è amministratore.
  • publish_actions: con questo permesso possiamo pubblicare contenuti sulla pagina di cui il nostro utente è amministratore.

Data la natura di questi permessi, Facebook richiede l’approvazione dell’app, però, come già detto, noi potremo non farla perché tanto il nostro codice PHP viene utilizzato sotto controllo e il token di accesso sarà generato a partire dal profilo dello sviluppatore.

Iniziamo a sporcarci le mani

Adesso che sapete cosa sono i token di accesso e i permessi, è venuto il momento di ottenerne il nostro token illimitato per la pagina Facebook. Come vedrete, questa sarà la parte più complessa del nostro esempio.

La prima cosa da fare è importare il file facebook.php, che contiene a sua volta alcune funzioni utili e include la classe principale che useremo nel nostro codice. Questo file si trova all’interno del Facebook SDK for PHP, che potete trovare qui. Dichiariamo in seguito due variabili $appId e $appSecret che contengono i dati della nostra applicazione. Fatto questo, creiamo un’istanza della classe Facebook, la quale ci permetterà di interagire con il social network.

require_once( 'facebook.php' );
$appId     = "MY_APP_ID";
$appSecret = "MY_APP_SECRET";

// inizializzo la sessione 
$facebook = new Facebook( array(
    'appId'  => $appId,
    'secret' => $appSecret,
    'cookie' => true
) );

La prima cosa da fare è verificare se sul PC un utente è già loggato su Facebook. La funzione getUser della classe Facebook serve proprio a ricavare l’utente corrente. Questa funzione però (è capitato anche a me) per diversi motivi potrebbe restituire 0, anche se in effetti c’è un utente loggato sul social network. Questo non ci è di ostacolo, basta solo fare il redirect al link di login di Facebook, il quale sarà così gentile da riportarci indietro senza chiedere nulla nel caso effettivamente il login sia già stato effettuato.

La funzione getLoginUrl serve a ottenere l’URL di login, e accetta un array associativo come parametro. Come si può vedere dal codice, ho specificato i permessi di cui ho bisogno. La prima volta che seguirete questa procedura, Facebook vi chiederà di autorizzare l’app per quei permessi.

// ottengo l'utente corrente 
$user = $facebook->getUser();

// ottengo l'URL di login 
$loginUrl = $facebook->getLoginUrl( array(
    'scope' => 'manage_pages, publish_actions'
) );

if ( ! isset( $_REQUEST['code'] ) ) {
    header( "Location: " . $loginUrl );
} 

La pagina è stata progettata in modo che al secondo passaggio, dopo la visita alla pagina di login di Facebook, la variabile $_REQUEST[‘code’] è impostata e quindi è possibile passare alla fase successiva.

Ora che siamo a posto con il login, dobbiamo ottenere un token di accesso di breve durata. Se la classe Facebook restituisce un utente, è possibile usare la funzione getAccessToken per ottenere il token di accesso, altrimenti possiamo richiederlo inviando una richiesta all’URL che vedete nel codice. Come URL di redirect passiamo l’indirizzo della pagina corrente.

$shortLiveToken = "";

if ( $user ) {
    // ho già un utente loggato, memorizzo il suo token
    $shortLiveToken = $facebook->getAccessToken();
} else {
    // richiedo il token di breve periodo con i permessi desiderati
    $code        = $_REQUEST['code'];
    $redirectUrl = $_SERVER['REQUEST_URI'];
    $result      = file_get_contents( "https://graph.facebook.com/oauth/access_token?clien t_id=$appId&client_secret=$appSecret&code=$code&redirect_uri=$redirect Url&scope=manage_pages,publish_actions" );
    
    if ( substr( $result, 0, 13 ) != "access_token=" ) {
        exit();
    }
    
    $endPos = strpos( $result, "&expire" );
    
    if ( ! ( $endPos === false ) ) {
        $endPos -= 13;
    } else {
        $endPos = strlen( $result );
    }
    
    $shortLiveToken = substr( $result, 13, $endPos );
}

La parte interessante del codice che vi ho appena mostrato è quella in cui richiediamo il token di breve durata. Come potete vedere, c’è un URL apposito che prende diversi parametri: i dati dell’applicazione, l’URL a cui tornare al termine della procedura, i permessi che vogliamo legare al token. Facebook ci invierà una risposta solitamente nella seguente forma: accessk_token=<token>&expire=<scadenza>

L’ultima parte potrebbe essere assente, motivo per il quale mi sono preoccupato di calcolare l’indice corretto dell’ultimo carattere del token di accesso.

Bene, non siamo lontani dalla nostra meta! A questo punto dobbiamo convertire il token di breve periodo in un token di lungo periodo. Ecco il codice:

// chiedo un token di lunga durata a partire da quello di breve durata 
$params = array(
    'grant_type'        => 'fb_exchange_token',
    'client_id'         => $appId,
    'client_secret'     => $appSecret,
    'fb_exchange_token' => $shortLiveToken
);

$url = "https://graph.facebook.com/oauth/access_token";
$ch  = curl_init();
curl_setopt_array( $ch, array(
    CURLOPT_URL            => $url,
    CURLOPT_POSTFIELDS     => $params,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_VERBOSE        => true
) );

// invio la richiesta a Facebook 
$result = curl_exec( $ch );

if ( substr( $result, 0, 13 ) != "access_token=" ) {
    exit();
}

$endPos = strpos( $result, "&expire" );

if ( ! ( $endPos === false ) ) {
    $endPos -= 13;
} else {
    $endPos = strlen( $result );
}

$longLiveToken = substr( $result, 13, $endPos ); 

La procedura è simile alla precedente: anche in questo caso, infatti, inviamo a Facebook una richiesta, specificando che vogliamo cambiare il tipo del token di accesso, e viene restituita una risposta analoga alla precedente, quindi, dobbiamo calcolare l’indice dell’ultimo carattere del token per poi estrarre quest’ultimo dalla stringa.

Arrivati a questo punto, abbiamo un’ultima cosa da fare: dobbiamo trasformare il token di lungo periodo in un token illimitato per la nostra pagina Facebook. Recuperiamo quindi l’elenco delle pagine su cui abbiamo poteri amministrativi con il seguente codice:

// ora ottengo le pagine su cui l'utente ha poteri amministrativi
$url    = "https://graph.facebook.com/me/accounts?access_token=$longLiveToken";
$result = file_get_contents( $url );

// decodifico la risposta JSON
$objPagine = json_decode( $result, true );

// leggo il primo oggetto
$data = $objPagine['data'];

$accessToken = "";

// cerco la mia pagina
for ( $i = 0; $i < count( $data ); $i ++ ) {
    $page = $data[ $i ];

    if ( $page['name'] == "MIA PAGINA" ) {
        $accessToken = $page['access_token'];
        $pageId      = $page['id'];
        break;
    }
}

if ( $accessToken == "" ) {
    exit();
}

echo $accessToken;

?>

Il codice è molto semplice, e potete apprezzare finalmente che la grande fatica fatta per autenticarci ci permette ora di lavorare più comodamente. Come potete vedere, ho richiesto a Facebook di inviarmi l’elenco delle pagine di cui sono amministratore, e l’URL di richiesta accetta un solo parametro, ovvero il token di lingua durata. Tradotto in termini più semplici, Facebook si fida della nostra identità in quanto quella stringa apparentemente senza significato è stata ricavata dalle nostre credenziali di accesso e da altri dati pseudocasuali.

La risposta di Facebook alla nostra richiesta è un array JSON formato da un insieme di voci, ciascuna delle quali in realtà contiene informazioni su ogni pagina che noi possiamo amministrare. Tra le informazioni riportate per ogni pagina, ce n’è una che è il nostro obiettivo finale: il token di accesso della pagina. A questo punto mettiamo da parte questo token perché lo useremo nella seconda parte del nostro esempio.

Conclusione

Siamo giunti alla conclusione, per ora. In questo articolo vi ho illustrato come funziona l’autenticazione di Facebook e abbiamo realizzato uno script in grado di ottenere il token di accesso, senza il quale l’app non potrebbe postare nulla. Nel prossimo articolo realizzeremo un prototipo di un’applicazione web, basata su database MySQL e PHP, che avrà la capacità di postare contenuti su Facebook.

Il codice dell’articolo lo potete trovare qui: http://downloads.montagnamarco.it/yiw1.zip. Prima di usare il codice, dovrete creare la nostra app su Facebook e poi dovrete inserire nel codice i vostri App ID, App Secret e il nome della pagina su cui vorrete pubblicare (e di cui dovrete essere amministratori).

A presto!

Leggi tutti gli articoli di questa mini guida su come postare contenuti su Facebook tramite PHP.

1. Post automatico di contenuti su Facebook

2. Pubblicare foto su una pagina Facebook con PHP

3. Postare video e interagire con gli album di una pagina Facebook con PHP

4. Mostrare il feed di una pagina Facebook all’interno del nostro sito web

Tag:

L'autore

La mia storia con l’informatica inizia in realtà molto presto, da bambino, quando osservavo mio padre smanettare con il suo primo PC. Da allora ho seguito questa strada, e nel 2014 mi sono laureato a Brescia in ingegneria informatica. Ho aperto quindi la mia ditta individuale e mi occupo di web design, grafica e sviluppo software e app. Nella vita ho tutto quello che desidero: una fidanzata meravigliosa, una famiglia fantastica e fortunatamente molto lavoro. Attualmente sono iscritto anche all’università di Bologna, per dare seguito ad un’altra mia grande passione: l’astronomia.

Sito web dell'autore | Altri articoli scritti da

Articoli correlati

Potresti essere interessato anche ai seguenti articoli:

12 commenti

  1. Marco
  2. tiziana
  3. Claudio
  4. Domenico Pennacchio
  5. giuseppe
  6. Richard Ortiz
  7. r.gio

Trackback e pingback

Non ci sono trackback e pingback disponibili per questo articolo

Lascia un Commento