Pubblicare foto su una pagina Facebook con PHP

Bentornati!

Nella scorsa puntata abbiamo visto come autenticarci su Facebook e ottenere quindi le credenziali necessarie per postare contenuti su una pagina.

In questo articolo faremo un passo avanti: realizzeremo un semplice sistema per caricare una foto sul server, la quale sarà poi postata su una pagina Facebook insieme ad un messaggio che andremo a inserire di volta in volta.

Riassumendo

Naturalmente, prima di procedere oltre, consiglio di andare a rileggere la prima parte di questo articolo. In queste poche righe, invece, faremo un veloce punto della situazione.

La volta scorsa abbiamo creato la nostra prima app su Facebook, passaggio fondamentale affinché il social network possa accettare le nostre richieste. Può sembrare strano, ma anche se state realizzando uno script PHP che gira sul vostro server, dovrete registrare un’app su Facebook!

Il passaggio successivo è stato quello di ottenere il token di accesso illimitato, che può essere concesso solo per le pagine. Questo token rimarrà valido fino a che non cambierete la password del vostro account: per il resto, non ha scadenza.

Cosa realizzeremo oggi

Ciò che andremo a realizzare oggi è un semplice prototipo di un sistema in grado di postare foto con un commento testuale sulla bacheca di una pagina Facebook.

Quando può risultare utile questa cosa? Beh, in realtà più spesso di quanto pensiate. Supponete di dovere realizzare una di quelle app Android o iOS che permettono di fare i selfie all’interno di un locale per poi postarle sulla pagina Facebook ufficiale. La prima cosa che verrebbe in mente di fare sarebbe quella di scaricare l’SDK per la propria piattaforma. Perché non inviare invece tramite un POST la foto ad una pagina PHP remota, la quale si preoccupi di effettuare la pubblicazione vera e propria?

Questa cosa ha molti vantaggi. Quello più importante è sicuramente che non dovrete mai inserire nell’app i vari App ID, App Secret, token di autenticazione… Perché saranno su una pagina web remota, inaccessibili a chiunque. E se un giorno cambierete la password del vostro account, dovrete cambiare il token di autenticazione solo sulla pagina web. Mica male, no?

Come postare una foto su Facebook

La prima parte del codice che vedremo è quella che effettivamente si preoccupa di postare la foto su Facebook.

La prima cosa da fare, anzi la cosa zero, è quella di importare il Facebook SDK e di creare delle variabili che contengano ciò di cui abbiamo bisogno:

require_once('facebook.php');
		
// sostituire qui dentro i valori di App ID e App Secret della vostra app
$appId = "APP_ID";
$appSecret = "APP_SECRET";
	
// sostituire qui dentro il token di lungo periodo ottenuto con il codice della scorsa puntata
$accessToken = "ACCESS_TOKEN";
// l'ID della pagina, lo potete trovare su "Informazioni" all'interno della pagina
$pageId = "ID_PAGINA";

Come potete vedere, abbiamo bisogno di App ID e App Secret della vostra app, l’access token illimitato che abbiamo ottenuto nella scorsa puntata e l’ID della pagina, che potete tranquillamente trovare nella sezione “Informazioni” della pagina, l’ultima voce in basso.

In realtà, è possibile ottenere questo ID anche cercando con poche righe di codice PHP tra tutte le pagine legate al vostro account e la stessa cosa si può fare anche con gli album. Queste cose più avanzate saranno oggetto del prossimo articolo.

La fase successiva consiste nell’inizializzare il Facebook SDK specificando tutti i valori necessari e attivando il supporto all’upload dei file:

// inizializzo Facebook SDK
$facebook = new Facebook(array(
            'appId' => $appId,
            'secret' => $appSecret,
            'cookie' => true,
		'fileUpload' => true	// necessario, altrimenti l'upload non funzionerà
	        ));
			
// imposto il token di accesso (nel caso delle pagine non scade mai)	
$facebook->setExtendedAccessToken($accessToken);

// attivo il supporto per l'upload
$facebook->setFileUploadSupport(true);

Il codice è molto semplice, come potete vedere. Per prima cosa, viene creata una istanza della classe Facebook, quindi viene assegnato il token di accesso e abilitato il supporto per l’upload dei file.

Ci siamo quasi! L’ultimo passo consiste nell’inizializzazione di un array di argomenti, che poi passeremo alla funzione api della classe Facebook.

// preparo il pacchetto di dati da inviare a Facebook
$arguments = array(
		'url' => "http://example.com/" . $nomeFile,
		'message' => $messaggio,
		'access_token' => $accessToken
		); 

Il primo parametro che specifichiamo è url, che deve puntare ad un indirizzo pienamente raggiungibile da Facebook, motivo per cui questo codice non funzionerà su localhost. Il secondo parametro è il messaggio che accompagnerà la foto, mentre il terzo parametro è sempre il nostro token di accesso illimitato ottenuto la scorsa puntata.

L’ultima cosa da fare è invocare la funzione api della classe Facebook, specificando che volete pubblicare la foto sulla bacheca e non su un album specifico, utilizzando il metodo POST e passando l’array degli argomenti che abbiamo appena creato.

$data = $facebook->api("/$pageId/photos", 'POST', $arguments);

Il risultato di questa funzione è un array JSON, che contiene l’ID del post appena creato. Questo valore può essere molto utile nel caso vogliate ad esempio tracciare quali foto abbia pubblicato una persona.

array(2) { ["id"]=> string(16) "1068174216553975" ["post_id"]=> string(32) "970804696212948_1068174416553975" }

 

Il codice finale

Finalmente siamo arrivati alla fine! Il codice completo è molto semplice: rispetto a quanto già visto, aggiunge solo un classico form HTML per l’upload di file. Quando invierete il form, verrà impostata anche una variabile chiamata carica che permetterà l’esecuzione del codice per la pubblicazione della foto su Facebook.

Ecco il codice completo dell’articolo di oggi:

<html>
<body>
<?php

if (isset($_POST['carica']))
{
	$nomeFile = basename($_FILES['immagine']['name']);
	if (move_uploaded_file($_FILES['immagine']['tmp_name'], $nomeFile))
	{
		require_once('facebook.php');
		
		// sostituire qui dentro i valori di App ID e App Secret della vostra app
		$appId = "APP_ID";
		$appSecret = "APP_SECRET";
	
		// sostituire qui dentro il token di lungo periodo ottenuto con il codice della scorsa puntata
		$accessToken = "ACCESS_TOKEN";
	
		// l'ID della pagina, lo potete trovare su "Informazioni" all'interno della pagina
		$pageId = "ID_PAGINA";
		
		// il messaggio da allegare alla foto
		$messaggio = $_POST['messaggio'];
		
		// inizializzo Facebook SDK
		$facebook = new Facebook(array(
            'appId' => $appId,
            'secret' => $appSecret,
            'cookie' => true,
			'fileUpload' => true	// necessario, altrimenti l'upload non funzionerà
	        ));
			
		// imposto il token di accesso (nel caso delle pagine non scade mai)	
		$facebook->setExtendedAccessToken($accessToken);

		// attivo il supporto per l'upload
		$facebook->setFileUploadSupport(true);
		
		// preparo il pacchetto di dati da inviare a Facebook
		$arguments = array(
				   'url' => "http://example.com/" . $nomeFile,
				   'message' => $messaggio,
				   'access_token' => $accessToken
				); 
		$data = $facebook->api("/$pageId/photos", 'POST', $arguments);			
		
		var_dump($data);
	
		// mostro la foto sulla pagina web
		echo "<img src='$nomeFile' style='max-width: 500px;' /><br>";
		
	}
	else
	{
		echo "Errore durante il caricamento dell'immagine";
		exit();
	}

	echo "Caricamento dell'immagine completato correttamente";
}
?>

<form method="post" action="yiw2.php" enctype="multipart/form-data">
	Immagine da caricare: <br>
	<input type="file" name="immagine" /><br>
	<input type="text" name="messaggio" /><br>
	<input type="submit" value="Carica immagine" /> 
	<input type="hidden" name="carica" value="1" />
</form>

</body>
</html>

Conclusione

In questa seconda parte abbiamo messo a frutto tutta la fatica che abbiamo fatto la scorsa puntata, per ottenere da Facebook il prezioso token di autenticazione illimitato per le pagine. Abbiamo realizzato un semplice sistema che permette di caricare una foto sul server e, in seguito, di pubblicarla su una pagina Facebook.

Nella prossima puntata approfondiremo alcuni aspetti più avanzati delle API di Facebook, come già accennato. Vedremo per esempio come possiamo recuperare tutte le pagine di cui l’utente è amministratore, o quali album siano presenti nella pagina, e perfezioneremo quindi il codice di oggi.

Il codice sorgente dell’articolo lo potete scaricare a questo indirizzo.

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:

9 commenti

  1. Domenico Pennacchio
  2. Roberto
  3. Federico

Trackback e pingback

Non ci sono trackback e pingback disponibili per questo articolo

Lascia un Commento