Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Interagire con Google Calendar attraverso Zend GData

Come modificare e rimuovere gli eventi conservati in Google Calendar attraverso PHP sfruttando le API GData e lo Zend Framework
Come modificare e rimuovere gli eventi conservati in Google Calendar attraverso PHP sfruttando le API GData e lo Zend Framework
Link copiato negli appunti

Nello scorso articolo abbiamo parlato di come sia possibile utilizzare le API GData attraverso lo Zend Framework al fine di connettersi al servizio Google Calendar e recuperare informazioni sugli eventi registrati. Abbiamo visto come sia possibile effettuare autenticazioni anonime in modo da accedere in lettura solamente ai calendari pubblici e come invece autenticarsi al fine di poter prelevare informazioni sui calendari privati e potervi interagire. In questo articolo ci occuperemo in dettaglio delle operazioni di modifica e rimozione degli eventi all'interno di un calendario, fornendo dei semplici esempi atti a spiegare meglio l'utilizzo delle API.

Nel codice degli esempi ho omesso, per brevità, le istruzioni di inclusione e delle di autenticazione. Nel caso fosse necessaria una ripassata del codice necessario, o nel caso in cui non abbiate avuto modo di leggerlo altrove, potete leggere le prime pagine dell'articolo precedente che illustrano con qualche esempio il concetto.

Interagire attivamente con gli eventi

Un'API non è completa se non fornisce delle funzionalità che permettano di interagire con le fonti di dato in modo da poterle modificare; ancora meglio se le operazioni sono limitate in base a permessi attribuiti ad utenti specifici. Una volta ottenuta un'istanza della servizio Google Calendar attraverso un processo di autenticazione che ci fornisca i privilegi per accedere in modifica ai calendari privati, è possibile operare con questa finalità in modo molto semplice. Le proprietà di un elemento di un feed (nel nostro caso l'Entry che rappresenta un evento, ma il concetto vale anche per altri tipi di Entry) possono essere accedute anche in modalità scrittura e le modifiche possono essere applicate attraverso il metodo save.

I valori delle proprietà, come nel caso del processo di creazione, devono essere generati attraverso i metodi specifici forniti dal servizio, che creeranno i tipi di dato corretti partendo da tipi di dato più semplici; in questo modo il processo di assegnamento dei nuovi valori sarà molto simile a quello di creazione di una nuova Entry e non dovremo preoccuparci di utilizzare direttamente eventuali oggetti utilizzati per rappresentare proprietà complesse.

Vediamo un semplice esempio di modifica di un'Entry rappresentante un evento.:

<?php

// ... import omessi per brevità

$user = 'username';
$pass = 'password';
$client = Zend_Gdata_ClientLogin::getHttpClient(
                        $user, $pass,
                        Zend_Gdata_Calendar::AUTH_SERVICE_NAME);
$calendar_service = new Zend_Gdata_Calendar($client);

$query = $calendar_service->newEventQuery();
$query->setUser('default');
$query->setVisibility('private');
$query->setProjection('full');
$query->setOrderby('starttime');
$query->setFutureEvents('true');

try
{
    $eventFeed = $calendar_service->getCalendarEventFeed($query);

// ora posso applicare le modifiche ad una entry specifica
 
        $event = $eventFeed[0];
        $event->title = $service->newTitle("Titolo dell'evento modificato");      
        $event->save();
        
} catch (Zend_Gdata_App_Exception $e)
{
    echo "Error: " . $e->getResponse();
}

?>

In questo caso abbiamo effettuato una semplice query (riciclata dall'articolo precedente) in modo da ottenere un set di eventi specifici, ed abbiamo modificato il primo di questi eventi variandone il titolo. Ovviamente tutte le proprietà possono essere modificate, anche quelle più complesse come when al fine di variare gli intervalli di tempo nel quali avverrà l'evento selezionato. Il metodo save() dell'entry che si sta modificando effettua effettivamente il salvataggio del nuovo stato sul server di Google Calendar, generando un'eccezione (Zend_Gdata_App_Exception) nel caso ci fossero degli errori.

Si può accedere agli eventi utilizzando viste differenti; nel caso della visualizzazione full event i commenti non sono effettivamente inclusi nel Feed restituito ma sono presenti solamente degli URL che li identificano univocamente. Questi URL devono essere interrogati manualmente al fine di recuperare il contenuto del commento. Una volta recuperati sarà possibile operare in modo simile a come si fa con gli eventi dato che gli oggetti utilizzati per rappresentare entrambi gli elementi sono delle Entry.

Vediamo un esempio su come recuperare la lista di commenti associati ai nostri feed:

<?php

// ... import ed autenticazione omessi per brevità

$query = $calendar_service->newEventQuery();
$query->setUser('default');
$query->setVisibility('private');
$query->setProjection('full');
$query->setOrderby('starttime');
$query->setFutureEvents('true');

try
{
    $eventFeed = $calendar_service->getCalendarEventFeed($query);
        
        echo "<ul>";
        foreach($eventFeed as $event)
        {
                $commentUrl = $event->comments->feedLink->url;
                $commentFeed = $calendar_service->getFeed($commentUrl);
                
                echo $event->title;

                echo "<ul>";
                foreach($commentFeed as $comment)
                {
                        echo "<li>".$comment->content." by ".$comment->author->name."</li>";
                }
                echo "</ul>";
        }
        echo "</ul>";
        
} catch (Zend_Gdata_App_Exception $e)
{
    echo "Error: " . $e->getResponse();
}

?>

Nel caso fosse necessario rimuovere un evento è possibile farlo utilizzando due differenti approcci, entrambi molto semplici: nel caso fosse disponibile un oggetto rappresentante la Entry dell'evento estratta dal Feed, è possibile utilizzare il metodo delete() dell'oggetto stesso; in caso invece fosse disponibile solo l'URL di modifica dell'evento, è possibile utilizzare il metodo delete() dell'oggetto che rappresenta il servizio passandovi come unico parametro proprio questo URL. Un evento eliminato può essere distinto da un evento non ancora eliminato attraverso la proprietà eventStatus che deve terminare con la stringa #event.canceled.

Vediamo un semplice esempio di eliminazione utilizzando entrambi i metodi segnalati:

<?php

// ... import omessi per brevità

$user = 'username';
$pass = 'password';
$client = Zend_Gdata_ClientLogin::getHttpClient(
                        $user, $pass,
                        Zend_Gdata_Calendar::AUTH_SERVICE_NAME);
$calendar_service = new Zend_Gdata_Calendar($client);

$query = $calendar_service->newEventQuery();
$query->setUser('default');
$query->setVisibility('private');
$query->setProjection('full');
$query->setOrderby('starttime');
$query->setFutureEvents('true');

try
{
    $eventFeed = $calendar_service->getCalendarEventFeed($query);
        
        foreach($eventFeed as $event)
        {
                $event->delete();

        // In alternativa era possibile utilizzare il metodo delete dell'oggeto
                // Zend_Gdata_Calendar
                //
                // $calendar_service->delete($event->getEditLink()->href);
                //
                // ottenendo lo stesso risultato
 }
        
} catch (Zend_Gdata_App_Exception $e)
{
    echo "Error: " . $e->getResponse();
}

?>

In questo modo eliminiamo tutti gli eventi ottenuti attraverso una query al database.

Applicare le API GData al mondo reale

Nell'era del Web 2.0, in cui Google risulta una delle società che forniscono i servizi più interessanti legati a questa filosofia, poter sfruttare i dati forniti da questa struttura è sicuramente un grosso vantaggio per chiunque sia interessato a fornire servizi che integrino in qualche modo questi strumenti. Per esempio è molto interessante poter creare widget (da utilizzare su OSX, Vista o altri ambienti) che estraggano informazioni sui nostri calendari personali e le visualizzino ovunque ci troviamo, senza la necessità di dover accedere al browser.

Oppure integrare in sistemi CRM o applicazioni per la gestione aziendale la possibilità di salvare in remoto i calendari con i nostri eventi o i documenti da noi creati in modo che risultino accessibili ovunque attraverso le applicazioni di Google. L'unico problema legato a questi servizi è che in alcuni casi, se non in tutti, i dati vengono analizzati e catalogati internamente; questo viene fatto si per fornire un servizio migliore, ma potrebbe creare qualche problema in situazioni in cui la privacy ha ancora un minimo di importanza.

Ti consigliamo anche