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

Bentornati!

Prosegue il nostro viaggio alla scoperta del social network più diffuso al mondo. In questa ultima puntata ci concentreremo su una cosa molto utile e interessante: andremo, infatti, a leggere il feed di una pagina Facebook e lo visualizzeremo usando il nostro codice HTML personalizzato.

Facebook ci mette infatti a disposizione tra le sue API anche la possibilità di leggere il feed, con accesso ai link, ai mi piace, alle foto e tutto quello che desideriamo.

Ottenere il feed da Facebook

La prima cosa da fare, naturalmente, è quella di invocare le API di Facebook per ottenere i dati che ci servono.

La prima parte del codice è del tutto identica alle puntate precedenti e consiste nell’inizializzazione di Facebook SDK for PHP, usando le chiavi della nostra app registrata su Facebook Developer.

A questo punto, invochiamo la funzione api della classe Facebook nel seguente modo:

$feed = $facebook->api("/$pageId/feed");

La risposta sarà un oggetto JSON molto complicato, di cui andremo a fare il parsing pezzo per pezzo al fine di ottenere i dati che ci occorrono.

Iniziamo il parsing dei dati

Se la richiesta dei dati è andata a buon fine, allora il nostro oggetto JSON conterrà un array denominato data, ciascun elemento del quale corrisponde a un post sulla bacheca della pagina. Per iterare lungo questo array, possiamo utilizzare l’istruzione foreach di PHP:

foreach($feed['data'] as $post)
{
    // eseguo il parsing del post
}

Come sicuramente saprete già, esistono diversi tipi di post. Ecco quelli che andremo a considerare:

  • Messaggio di testo
  • Link
  • Foto

L’oggetto $post è a sua volta un array e alla chiave type troviamo il tipo di post corrispondente, in base al quale eseguiremo un frammento di codice diverso:

	foreach($feed['data'] as $post)
	{
		if ($post['type'] == 'status' || $post['type'] == 'link' || $post['type'] == 'photo') 
		{
			echo "<li>";
			
			echo "<strong>Data post:</strong> " . date("j M Y", (strtotime($post['created_time']))) . "<br>";
			
			if ($post['type'] == "status")
			{
				echo "<strong>Stato:</strong> " . $post['message'] . "<br>";
			}
			elseif ($post['type'] == "link")
			{
				echo "<strong>Link:</strong> " . $post['name'] . "<br>";
				echo "<a href=\"" . $post['link'] . "\" target=\"_blank\">" . $post['link'] . "</a><br>";
			}
			elseif ($post['type'] == "photo")
			{
				if (empty($post['story']) === false) {
                    echo "<p>" . $post['story'] . "</p>";
                } elseif (empty($post['message']) === false) {
                    echo "<p>" . $post['message'] . "</p>";
                }
                echo "<p><a href=\"" . $post['link'] . "\" target=\"_blank\">Link alla foto</a></p>";
				echo "<p><strong>Descrizione:</strong>" . $post['description'] . "</p>";
				echo "<img src='" . $post['picture'] . "' />"; 
			}
			
			if (isset($post['likes']))
			{
				echo "<strong>Mi piace:</strong><ul>";
				
				foreach($post['likes']['data'] as $like)
				{
					echo "<li>" . $like['name'] . "</li>";
				}
				
				echo "</ul>";
			}
			
			if (isset($post['comments']))
			{
				echo "<strong>Commenti:</strong><ul>";
				
				foreach($post['comments']['data'] as $commento)
				{
					echo "<li>" . $commento['from']['name'] . " ha detto: <em>" . $commento['message'] . "</em></li>";
				}
				
				echo "</ul>";
			}
			
			echo "</li>";
		}
		
		$posts++;
	}

La prima cosa che mostreremo è la data in cui è stato creato il post, poi visualizzeremo il contenuto del post in base al suo tipo. La data è stata formattata in modo che siano mostrati il giorno, il mese in lettere e l’anno.

I post di tipo status hanno soltanto il messaggio.

I post di tipo link hanno un titolo e il link stesso.

I post di tipo photo hanno invece un messaggio o una storia, una descrizione, il link alla foto su Facebook e l’URL di una versione in anteprima della foto stessa.

Come vedete, è molto semplice estrapolare i dati utili dalla risposta JSON che Facebook ci inoltra alla nostra richiesta. Già con queste informazioni e un po’ di pazienza è possibile creare un feed personalizzato da integrare nel nostro sito web.

Ma non abbiamo ancora finito.

Mostrare i commenti e i Mi piace

Ebbene sì! Facebook è molto gentile e ci permette di accedere anche alle persone che hanno commentato il post o che hanno messo Mi piace. Fantastico vero? Ecco il codice:

			if (isset($post['likes']))
			{
				echo "<strong>Mi piace:</strong><ul>";
				
				foreach($post['likes']['data'] as $like)
				{
					echo "<li>" . $like['name'] . "</li>";
				}
				
				echo "</ul>";
			}

La prima cosa da fare è verificare che l’array likes esista: senza i mi piace, infatti, questa variabile non sarà un array vuoto ma sarà del tutto assente e darà luogo a un avviso da parte di PHP. Una volta svolto questo passaggio preliminare, possiamo iterare lungo l’array $post['likes']['data']: il campo name di ciascun oggetto dell’array contiene il nome della persona che ha messo il Mi piace.

Per i commenti il codice è molto simile:

			if (isset($post['comments']))
			{
				echo "<strong>Commenti:</strong><ul>";
				
				foreach($post['comments']['data'] as $commento)
				{
					echo "<li>" . $commento['from']['name'] . " ha detto: <em>" . $commento['message'] . "</em></li>";
				}
				
				echo "</ul>";
			}

Anche in questo caso dobbiamo verificare che l’array dei commenti esista, quindi possiamo iterare lungo i vari elementi dell’array stesso e possiamo ottenere il nome di chi ha lasciato un commento e il testo del commento stesso.

Altre cose che potete fare

Quello che abbiamo appena realizzato è un esempio molto semplice, ma in realtà si può fare di più.

Se non specificate ulteriori parametri, Facebook vi restituisce gli ultimi 25 post della pagina. Potete caricarne di più? Certamente, fino ad un massimo di 100, limite oltre il quale riceveremo un errore da parte delle API di Facebook.

Per specificare il numero di post da caricare, vi basta passare un array di argomenti alla funzione api, impostando la chiave limit al numero di post che vogliamo caricare:

$feed = $facebook-&gt;api("/$pageId/feed", array("limit" =&gt; 99));

Inoltre il feed può essere caricato in modo più selettivo.

  • Usando come endpoint "/$pageId/posts", saranno caricati solo i post pubblicati direttamente sulla pagina.
  • Usando come endpoint "/$pageId/tagged", saranno caricati solo i post in cui la pagina risulta taggata.
  • Usando come endpoint "/$pageId/promotable_posts", saranno caricati solo i post pubblicati direttamente sulla pagina che possono essere messi in evidenza con una sponsorizzazione a pagamento.

Conclusione

Come potete vedere, recuperare il feed di una pagina Facebook non è niente di complicato, anzi! Con questo codice potrete realizzare il vostro feed personalizzato, integrato dentro il vostro sito e senza ricorrere a plugin o codice di terze parti.
Il codice di questo 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:

1 commento

Trackback e pingback

Non ci sono trackback e pingback disponibili per questo articolo