Supporto volontario e collaborativo per Joomla!® in italiano

Pubblicare i post di Google Plus sul proprio sito Joomla!

Google PlusI flussi web, o feed sono ormai uno standard per la distribuzione di contenuti Web.

Joomla include nativamente un modulo per la visualizzazione dei feed, ma Google non fornisce i feed dei post inseriti su G+, probabilmente perche' questi formati sarebbero limitativi. Google fornisce infatti delle API con le quali si puo' ottenere molto di piu' di un semplice elenco di post.

In questo articolo, tuttavia, si vuole ottenere un elenco di post da pubblicare sul proprio sito, in maniera simile al modulo feed.

Nota: Nella documentazione delle proprie API, Google si riferisce ai Post chiamandoli Attivita'. Qui invece continueremo a chiamarli Post, poiche' e' il nome utilizzato dall'interfaccia utente di G+.

Prerequisiti

Chiave API di Google

Per lavorare con le API di G+ il primo elemento necessario e' una chiave API che e' possibile ottenere gratuitamente.
Dopo l'avvenuta registrazione e il login, selezionare la voce Services, quindi individuare e attivare "Google+ API" dall'elenco delle API disponibili. Successivamente selezionare la voce "Api Access" per generare una chiave.

id dell'utente

Il secondo requisito e' l'identificativo utente G+ del quale si vuole leggere i post, che puo' essere ricavato facilmente dalla barra dell'indirizzo del proprio browser una volta raggiunta la pagina del profilo Google Plus dell'utente. Nel caso di Joomla.it e' 102475482547546165309.

Le Api di G+ consentono l'interrogazione dei dati relativi a

  • Persone
  • Post
  • Commenti

Ci occuperemo qui di ottenere i Post.

I metodi disponibili per i post a loro volta sono:

  • list: Ottiene un elenco dei post di un determinato utente
  • get: Ottiene il contenuto di un singolo post
  • search: Esegue una ricerca tra i post

Per i nostri scopi utilizzeremo quindi il metodo "list".

L'utilizzo di questo metodo consiste in una richiesta di tipo HTTP GET al seguente URL:

https://www.googleapis.com/plus/v1/people/{userId}/activities/public?{parametri}

dove {userid} e' l'identificativo dell'utente del quale e' richiesto l'elenco dei post, mentre tra i parametri facoltativi potrebbe risultare utile maxResults, che indica il numero massimo di post che si vuole ottenere. Ammette valori compresi tra 1 e 100, e quando non specificato, il valore predefinito e' 20. La chiave API, pur essendo formalmente facoltativa e' all'atto pratico necessaria a causa dei limiti di traffico imposti a chi non la utilizza.

Eseguire manualmente una query di prova

Per capire il protocollo di comunicazione, mettiamo insieme gli elementi raccolti, e costruiamo l'URL che e' possibile fin d'ora visualizzare con un browser:

https://www.googleapis.com/plus/v1/people/102475482547546165309/activities/public?maxResults=10&key={...la tua chiave API...}

sostituire naturalmente "{...la tua chiave API...}" con la propria chiave, e l'id con quello desiderato.

Digitando quindi questo indirizzo nel browser, si ottiene una risposta in formato json. Questa risposta include alcuni dati globali e l'elenco dei post (items).

Per semplicita', vengono qui riportate solo le proprieta' piu' significative.

 
{ 
 "title": "Plus Public Activity Feed for Joomla.it", 
 "updated": "2012-06-12T13:20:33.000Z", 
 "items": [ 
 
 { 
  "title": "Superata la metà degli iscritti al JoomlaDay!, ora siamo a 753. Il 26% dalla provincia di Torino,...", 
  "published": "2012-06-12T13:20:33.000Z", 
  "url": "https://plus.google.com/102475482547546165309/posts/9v8yVFjJFTK", 
  "object": { 
   "content": "Superata la metà degli iscritti al JoomlaDay!, ora siamo a 753.\u003cbr /\u003eIl 26% dalla provincia di Torino, poi segue Milano e Roma.\u003cbr /\u003eQuasi la metà degli iscritti (45%) viene in rappresentanza di una azienda, quindi l'aspetto professionale dell'evento risulta molto importante.", 
   "replies": { 
    "totalItems": 5, 
   }, 
  }, 
 }, 
 
 { 
  "title": "Video lezione sulla nuova interfaccia grafica di Joomla 3.0", 
  "published": "2012-06-09T21:03:38.000Z", 
  "url": "https://plus.google.com/102475482547546165309/posts/E3WzbbyB5wB", 
  "object": { 
   "content": "Video lezione sulla nuova interfaccia grafica di Joomla 3.0", 
   "replies": { 
    "totalItems": 3, 
   }, 
  }, 
 },
 
 ] 
}
 

Si noti che le prime 2 proprieta', title e updated, si riferiscono all'intero gruppo di post, mentre i singoli post vengono elencati col nome di "items" e hanno gli attributi titolo, data di pubblicazione, indirizzo url, contenuto, risposte.

A questo punto dovrebbe essere semplice scrivere un'estensione per Joomla che esegua la richiesta e visualizzi i risultati.

Trascuriamo aspetti secondari quali ad esempio la gestione della cache, che dovra' essere invece presa in considerazione qualora si intenda trasformare questo esempio in una estensione da utilizzare realmente in produzione sul proprio sito.

Codice sorgente del modulo

Ecco l'elenco dei file che andreamo a creare:

modules/mod_gplus/mod_gplus.xml
modules/mod_gplus/mod_gplus.php
modules/mod_gplus/helper.php
modules/mod_gplus/tmpl/default.php

Oltre naturalmente a

modules/mod_gplus/index.html
modules/mod_gplus/tmpl/index.html

necessari per mantenere un buon livello di sicurezza, ma irrilevanti per il nostro fine, e pertanto non trattati in questa sede.

Definizione dei parametri del backend: mod_gplus.xml


Le istruzioni significative sono quelle relative ai parametri che serviranno per la query a G+, ovvero: userId, key e maxResults.

La proprieta' “required” per il campo userId rende obbligatorio l'inserimento dell'identificativo utente G+, e impedisce di salvare la configurazione del modulo se questo parametro e' assente.

Inoltre, il campo userid va sempre trattato come stringa e mai come numero. I piu' attenti lo avranno gia' notato: sarebbe un numero di gran lunga maggiore degli interi a 32 bit gestibili da php.

 
<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="2.5" client="site" method="upgrade">
  <name>Google Plus</name>
  <description>Visualizzatore posts da Google Plus</description>
 
  <files>
    <filename module="mod_gplus">mod_gplus.php</filename>
    <filename>helper.php</filename>
    <filename>index.html</filename>
    <folder>tmpl</folder>
  </files>
 
  <config>
    <fields name="params">
 
      <fieldset name="basic">
        <field name="userId" type="text" label="ID del profilo G+" description="Esempio: 102475482547546165309" required="true" />
        <field name="key" type="text" label="Chiave API" description="Ottieni la tua chiave API a questo indirizzo: https://code.google.com/apis/console" />
        <field name="maxResults" type="text" label="Numero di post" description="Il numero di post da visualizzare. Intervallo accettabile: da 1 a 100 inclusi." default="10" />
      </fieldset>
 
      <fieldset name="advanced">
        <field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" />
        <field name="moduleclass_sfx" type="text" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL" description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" />
        <field name="cache" type="list" default="1" label="COM_MODULES_FIELD_CACHING_LABEL" description="COM_MODULES_FIELD_CACHING_DESC">
          <option value="1">JGLOBAL_USE_GLOBAL</option>
          <option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option>
        </field>
        <field name="cache_time" type="text" default="900" label="COM_MODULES_FIELD_CACHE_TIME_LABEL" description="COM_MODULES_FIELD_CACHE_TIME_DESC" />
      </fieldset>
 
    </fields>
  </config>
</extension>
 

Entry point del modulo: mod_gplus.php

Questo file e' il punto di ingresso del modulo. Utilizza l'helper per caricare l'elenco dei post da G+, quindi provvede alla sua visualizzazione.

 
<?php defined('_JEXEC') or die;
require_once dirname(__FILE__) . "/helper.php";
 
$moduleclass_sfx = htmlspecialchars($params->get("moduleclass_sfx"));
 
// Interroga G+ e valorizza la variabile $posts per una successiva visualizzazione
$posts = GoogleActivities::GetList($params);
 
// Richiama il layout selezionato per questo modulo
require JModuleHelper::getLayoutPath("mod_gplus", $params->get('layout', 'default'));
 

Query sul server di G+: helper.php

Qui prepariamo l'URL con i parametri visti in precedenza ($url), quindi lanciamo la query sul server di G+ (file_get_contents) e infine convertiamo i dati (json_decode) da una stringa a un oggetto piu' facilmente manipolabile.

 
<?php defined('_JEXEC') or die;
 
class GoogleActivities
{
  static function GetList(&$params)
  {
    $url = "https://www.googleapis.com/plus/v1/people/" . $params->get("userId")
    . "/activities/public?maxResults=" . $params->get("maxResults", 10)
    . "&key=" . $params->get("key");
 
    $data = file_get_contents($url);
    return json_decode($data);
  }
}
 

Visualizzazione: tmpl/default.php


Di ogni post, abbiamo scelto di visualizzare solamente il titolo (con link alla relativa pagina di G+) e il numero dei +1 e dei commenti ricevuti, ma l'elenco completo degli attributi dei post e' molto piu' vasto.

 
<?php defined('_JEXEC') or die; ?>
 
<div class="gplus<?php echo $params->get("moduleclass_sfx"); ?>"> 
  <ul> 
    <?php foreach ($posts->items as &$item) { ?> 
      <li> 
        <a href="<?php echo $item->url; ?>" target="_blank">
        <?php echo $item->title; ?></a>
        +1: <span class="plusoners"><?php echo $item->object->plusoners->totalItems; ?></span>
        Commenti: <span class="replies"><?php echo $item->object->replies->totalItems; ?></span>
      </li> 
      <?php } ?> 
  </ul> 
</div>
 

Ora non rimane che comprimere il tutto in formato zip e procedere con l'installazione.



Abbiamo utilizzato questa procedura per integrare su Joomla.it il flusso di post che giornalmente scriviamo sulla pagina dedicata a Joomla.it su G+.
Questa l'immagine di come appare il modulo in homepage di Joomla.it:

Homepage sito

Una integrazione simile è stata fatta nel tema del forum di Joomla.it dove il flusso dei post appare in alto a destra su tutte le pagine:

Homepageforum

CommentaCommenta questo articolo sul forum