Capítulo 14. Zend_Gdata

Índice

14.1. Introdução a Gdata
14.1.1. Autenticação Cliente no Google Data
14.1.2. Dependências
14.1.3. Criando um novo cliente Gdata.
14.1.4. Parâmetros comuns de consultas.
14.1.5. Recuperando um "feed"
14.1.6. Postando registros em servidores do Google
14.1.7. Deletando registros em servidors do Google
14.2. Authenticating with AuthSub
14.2.1. Creating an AuthSub authenticated Http Client
14.2.2. Revoking AuthSub authentication
14.3. Authenticating with ClientLogin
14.3.1. Creating a ClientLogin authenticated Http Client
14.3.2. Terminating a ClientLogin authenticated Http Client
14.4. Using Google Base
14.4.1. Querying Base data
14.4.2. Updating Base data
14.4.3. Querying Base metadata
14.5. Using Google Blogger
14.5.1. Understanding Blogger version compatibility
14.5.2. Querying a blog
14.5.3. Posting to your blog
14.6. Using Google Calendar
14.6.1. Querying Google Calendar
14.6.2. Posting to Google Calendar
14.7. Using Google CodeSearch
14.8. Using the Gdata Data Helper
14.9. Catching Gdata Exceptions

14.1. Introdução a Gdata

As "Google Data APIs" disponibilizam interfaces programáticas a alguns dos serviços online do Google. As aplicações cliente submetem consultas e dados via HTTP, e recuperam resultados. O componente Zend_Gdata é uma interface PHP 5 para acesso aos dados do Google via PHP.

Veja http://code.google.com/apis/gdata/ para mais informações sobre a "Google Data API".

Dentre os serviços acessíveis por Zend_Gdata estão inclusos os seguintes:

  • Google Base oferece uma ferramenta de busca online para produtos, empregos, eventos, anúncios pessoais e outros tipos de registros. As pessoas postam ítens, descrevendo-os com os atributos comumente nomeados.

  • Google Blogger é um provedor popular de "push-button publishing" e sindicação.

  • Google Calendar é uma ferramenta de colaboração e calendário online.

  • Google CodeSearch permite a você pesquisar por codigo fonte público em diferentes projetos.

[Nota] Serviços não suportados

Google Data API suporta também Google Spreadsheets, mas Zend_Gdata não provê uma classe auxiliar para Spreadsheets neste release.

Zend_Gdata não implementa interfaces para nenhum outro serviço do Google, como Search, Gmail, Translation, ou Maps. Somente os serviços que suportam a Google Data API são suportados.

14.1.1. Autenticação Cliente no Google Data

A maioria dos serviços do Google Data exigem que as aplicações cliente autentiquem-se em um servidor do Google para poderem acessar dados privados, salvar ou deletar informações. Existem duas implementações de autenticação para o Google Data: AuthSub e ClientLogin. Zend_Gdata disponibiliza classes de interface para ambos os métodos.

Os demais tipos de consultas aos serviços do Google Data não requerem autenticação.

14.1.2. Dependências

Zend_Gdata faz uso de Zend_Feed e Zend_Http_Client para enviar requisições ao google.com e recuperar resultados. A maioria das respostas às requisições são retornadas como objetos Zend_Feed object no formato de um feed Atom ou RSS.

Zend_Gdata assume que sua aplicação PHP está rodando em um host com conexão direta à internet. O cliente Zend_Gdata funciona contatando os servidores do Google Data.

14.1.3. Criando um novo cliente Gdata.

Crie um novo objeto da classe Zend_Gdata ou uma das subclasses disponíveis que ofereça métodos auxiliares com comportamento inerente ao serviço.

O único parâmetro opcional passado para o construtor de Zend_Gdata é uma instância de Zend_Http_Client. Se você omitir este parâmetro, Zend_Gdata cria um objeto Zend_Http_Client default. Especificar um objeto Zend_Http_Client permite a passagem de opções de configuração para o objeto cliente.

<?php
require_once 'Zend/Gdata.php';
require_once 'Zend/Http/Client.php';

$client = new Zend_Http_Client();
$client->setConfig( ...options... );

$gdata = new Zend_Gdata($client);
?>

Consulte também, nas seções sobre autenticação, sobre como criar um objeto Zend_Http_Client autenticado.

14.1.4. Parâmetros comuns de consultas.

Você pode customizar as consultas com Zend_Gdata especificando parâmetros. Certos parâmetros são aplicávies somente a determinados serviçoes do Google Data. Estes parâmetros estão documentados nas seções anteriores, para cada serviço. Alguns parâmetros são comuns aos vários serviços do Google Data. Estes parâmetros estão descritos abaixo:

  • O parâmetro alt especifica o tipo de "feed". O valores para o parâmetro podem ser: atom, rss, json, ou json-in-script. Se omitido, o valor padrão será atom.

    Defina o valor deste parâmetro com a função setAlt().

  • O parâmetro maxResults limita o número de registros em um "feed". O valor padrão é um inteiro. O número de registros retornados pelo "feed" não deverá exceder este valor.

    Defina o valor deste parâmetro com a função setMaxResults().

  • O parâmetro startIndex especifica o número de ordem do primeiro registro retornado no "feed". Registros anteriores a este índice serão ignorados.

    Defina o valor deste parâmetro com a função setStartIndex().

  • Os parâmetros updatedMin e updatedMax especificam limites para a data dos registros. Registros com datas anteriores a updatedMin, e posteriores a updatedMax serão ignorados.

    Você pode empregar timestamps numéricas, ou uma variedade de strings representativas de data/hora como valor para estes parâmetros.

    Defina o valor deste parâmetro com as funções setUpdatedMin() e setUpdatedMax().

Para cada função set existe uma respectiva função get.

<?php
$gdata = new Zend_Gdata();
$gdata->setMaxResults(10);
echo $gdata->getMaxResults();   // returns 10
?>

A classe Zend_Gdata implementa também métodos "magicos" para setar ou ler valores, desta forma, podemos usar o nome do parâmetro como membro virtual de uma classe. Podemos usar isset() e unset() nestes membros virtuais.

<?php
$gdata = new Zend_Gdata();
$gdata->maxResults = 10;
echo $gdata->maxResults;        // returns 10
echo isset($gdata->maxResults); // returns true
unset($gdata->maxResults);      // clears parameter
?>

Podemos limpar todos os parâmetros com a função resetParameters(). Isto é particularmente útil quando queremos reutilizar um objeto Zend_Gdata para múltiplas consultas.

<?php
$gdata = new Zend_Gdata();
$gdata->maxResults = 10;
// ...get feed...

$gdata->resetParameters();      // clears all parameters
// ...get a different feed...
?>

14.1.5. Recuperando um "feed"

Use a função getFeed() para recuperar um "feed" de um determinado URI. Esta função retorna um objeto da classe Zend_Feed.

<?php
$gdata = new Zend_Gdata();
$gdata->setQuery('digital camera');
$gdata->setMaxResults(10);
$uri = 'http://www.google.com/base/feeds/snippets'
    . $gdata->getQueryString();
$feed = $gdata->getFeed($uri);
?>

Consulte a documentação de Zend_Feed para mais informações sobre sua utilização.

Consulte as seções anteriores sobre as funções especiais de cada classe auxiliar para serviços do Google Data. Estas funções auxiliam na obtenção de "feeds" selecionando a URI mais apropriada de cada respectivo serviço.

14.1.6. Postando registros em servidores do Google

O objeto Zend_Gdata possui uma função post() usada para enviar dados a serem gravados em novos registros do serviço Google Data.

É de responsabilidade do programador a construção de uma string contendo a estrutura XML correta para um registro do respectivo serviço Google Data que o mesmo estiver utilizando. Podemos usar bibliotecas de classe PHP tais como DOM XML ou SimpleXML.

<?php
$gdata = new Zend_Gdata($authenticatedHttpClient);

$xmlString = <<<XML
<entry xmlns='http://www.w3.org/2005/Atom'
    xmlns:gd='http://schemas.google.com/g/2005'>
  <category scheme='http://schemas.google.com/g/2005#kind'
    term='http://schemas.google.com/g/2005#event'></category>
  <title type='text'>Tennis with Beth</title>
  <content type='text'>Meet for a quick lesson.</content>
  <author>
    <name>Jo March</name>
    <email>jo@gmail.com</email>
  </author>
  <gd:transparency
    value='http://schemas.google.com/g/2005#event.opaque'>
  </gd:transparency>
  <gd:eventStatus
    value='http://schemas.google.com/g/2005#event.confirmed'>
  </gd:eventStatus>
  <gd:where valueString='Rolling Lawn Courts'></gd:where>
  <gd:when startTime='2006-04-17T15:00:00.000Z'
    endTime='2006-04-17T17:00:00.000Z'></gd:when>
</entry>
XML;

$xml = new SimpleXMLElement($xmlString);

$myCalendar = 'http://www.google.com/calendar/feeds/default/private/full';
$gdata->post($xml->asXML(), $myCalendar);
?>

Para postar registros, devemos usar um objeto Zend_Http_Client autenticado que criamos com as classes Zend_Gdata_AuthSub ou Zend_Gdata_ClientLogin.

14.1.7. Deletando registros em servidors do Google

O objeto Zend_Gdata possui uma função delete() usada para remover registros em serviços do Google Data. Passe o valor <id> do registro de um "feed" para o método delete().

<?php
$gdata = new Zend_Gdata($authenticatedHttpClient);
// a Google Data feed
$feedUri = ...;
$feed = $gdata->getFeed($feedUri);
foreach ($feed as $feedEntry) {
    // extract the <id> element
    $id = $feedEntry->id();
    $gdata->delete($id);
}
?>

Você pode usar também o método delete() sem um objeto "feed", se você passar um URI que identifique corretamente um registro.

<?php
$gdata = new Zend_Gdata($authenticatedHttpClient);
$uri = 'http://www.google.com/calendar/feeds/default/private/entryID';
$gdata->delete($uri);
?>

No exemplo acima, substitua "entryID" com o valor ID do registro que você quer deletar.

Para deletar registros, você deve usar um objeto Zend_Http_Client autenticado que você criou usando as classes Zend_Gdata_AuthSub ou Zend_Gdata_ClientLogin.