Capítulo 12. Zend_Gdata
Anterior |  | Próxima

## Capítulo 12. Zend_Gdata

## 12.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.

| 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.

### 12.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.

### 12.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.

### 12.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.

### 12.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...
    ?>

### 12.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.

### 12.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.

### 12.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.

Anterior |  | Próxima
11.4. Zend_Filter_Input | Principal | 12.2. Authenticating with AuthSub