Tabla de contenidos
- 37.1. Introducción
- 37.1.1. Estructura de Zend_Gdata
- 37.1.2. Interactuando con los servicios de Google
- 37.1.3. Obtener instancias de clases Zend_Gdata
- 37.1.4. Autenticación del cliente de Google Data
- 37.1.5. Dependencias
- 37.1.6. Crear un nuevo cliente Gdata
- 37.1.7. Parámetros de consulta comunes
- 37.1.8. Obtener un feed
- 37.1.9. Trabajar con feeds de múltiples páginas
- 37.1.10. Trabajar con datos en feeds y entradas
- 37.1.11. Actualizar entradas
- 37.1.12. Publicar entradas en los servidores de Google
- 37.1.13. Eliminar entradas en los servidores de Google
- 37.2. Usar Google Analytics
- 37.3. Autenticación con AuthSub
- 37.4. Usar la API de datos de Book Search
- 37.5. Autenticación con ClientLogin
- 37.6. Usar Google Calendar
- 37.7. Usar la API de datos de Google Documents List
- 37.8. Usar Google Spreadsheets
- 37.9. Usar Google Apps Provisioning
- 37.9.1. Establecer el dominio actual
- 37.9.2. Interactuar con usuarios
- 37.9.3. Interactuar con apodos
- 37.9.4. Interactuar con grupos
- 37.9.5. Interactuar con miembros de grupo
- 37.9.6. Interactuar con propietarios de grupo
- 37.9.7. Interactuar con listas de correo
- 37.9.8. Interactuar con destinatarios de listas de correo
- 37.9.9. Gestión de errores
- 37.10. Usar Picasa Web Albums
- 37.11. Capturar excepciones de Gdata
Las APIs de Google Data proporcionan una interfaz programática para algunos de los
servicios en línea de Google. El protocolo Google data se basa en el Atom Publishing
Protocol y permite a las aplicaciones cliente recuperar datos que coincidan con consultas,
publicar datos, actualizar datos y eliminar datos usando HTTP estándar y el
formato de sindicación Atom. El componente Zend_Gdata es una
interfaz de PHP 5 para acceder a Google Data desde PHP.
El componente Zend_Gdata también admite el acceso a otros servicios
que implementan el Atom Publishing Protocol.
Consulte http://code.google.com/apis/gdata/ para más información sobre las APIs de Google Data.
Los servicios accesibles mediante Zend_Gdata incluyen los
siguientes:
Google Calendar es una popular aplicación de calendario en línea.
Google Spreadsheets proporciona una herramienta colaborativa de hojas de cálculo en línea que puede usarse como un simple almacén de datos para sus aplicaciones.
Google Documents List proporciona una lista en línea de todas las hojas de cálculo, documentos de procesamiento de texto y presentaciones almacenadas en una cuenta de Google.
Google Provisioning proporciona la capacidad de crear, recuperar, actualizar y eliminar cuentas de usuario, apodos, grupos y listas de correo en un dominio alojado por Google Apps.
Picasa Web Albums proporciona una aplicación de intercambio de fotos en línea.
Google Analytics es una aplicación de estadísticas de visitantes.
Google Blogger es un popular proveedor de Internet de "publicación con un solo clic" y sindicación.
Google CodeSearch le permite buscar código fuente público de muchos proyectos.
Google Notebook le permite ver contenido público de Notebook.
![]() |
Servicios no admitidos |
|---|---|
|
Zend_Gata se compone de varios tipos de clases:
Clases de servicio - heredan de
Zend_Gdata_App. Estas también incluyen otras clases comoZend_Gdata,Zend_Gdata_Spreadsheets, etc. Estas clases permiten interactuar con los servicios APP o GData y proporcionan la capacidad de recuperar feeds, recuperar entradas, publicar entradas, actualizar entradas y eliminar entradas.Clases de consulta - heredan de
Zend_Gdata_Query. Estas también incluyen otras clases para servicios específicos, comoZend_Gdata_Spreadsheets_ListQueryyZend_Gdata_Spreadsheets_CellQuery. Las clases de consulta proporcionan métodos usados para construir una consulta de datos a recuperar de los servicios GData. Los métodos incluyen getters y setters comosetUpdatedMin(),setStartIndex(), ygetPublishedMin(). Las clases de consulta también tienen un método para generar una URL que representa la consulta construida --getQueryUrl(). Alternativamente, el componente de cadena de consulta de la URL puede recuperarse usando el métodogetQueryString().Clases de feed - heredan de
Zend_Gdata_App_Feed. Estas también incluyen otras clases comoZend_Gdata_Feed,Zend_Gdata_Spreadsheets_SpreadsheetFeed, yZend_Gdata_Spreadsheets_ListFeed. Estas clases representan feeds de entradas recuperadas de los servicios. Se usan principalmente para recuperar datos devueltos por los servicios.Clases de entrada - heredan de
Zend_Gdata_App_Entry. Estas también incluyen otras clases comoZend_Gdata_Entry, yZend_Gdata_Spreadsheets_ListEntry. Estas clases representan entradas recuperadas de servicios o usadas para construir datos que se enviarán a los servicios. Además de poder establecer las propiedades de una entrada (como el valor de una celda de hoja de cálculo), puede usar un objeto de entrada para enviar solicitudes de actualización o eliminación a un servicio. Por ejemplo, puede llamar a $entry->save() para guardar los cambios realizados en una entrada de vuelta al servicio del cual se originó la entrada, o $entry->delete() para eliminar una entrada del servidor.Otras clases de modelo de datos - heredan de
Zend_Gdata_App_Extension. Estas incluyen clases comoZend_Gdata_App_Extension_Title(representando el elemento XML atom:title),Zend_Gdata_Extension_When(representando el elemento XML gd:when usado por el "Kind" de evento GData), yZend_Gdata_Extension_Cell(representando el elemento XML gs:cell usado por Google Spreadsheets). Estas clases se usan puramente para almacenar los datos recuperados de los servicios y para construir los datos que se enviarán a los servicios. Estas incluyen getters y setters comosetText()para establecer el nodo de texto hijo de un elemento,getText()para recuperar el nodo de texto de un elemento,getStartTime()para recuperar el atributo de hora de inicio de un elemento When, y otros métodos similares. Las clases de modelo de datos también incluyen métodos comogetDOM()para recuperar una representación DOM del elemento y todos sus hijos ytransferFromDOM()para construir una representación de modelo de datos de un árbol DOM.
Los servicios de Google data se basan en el Atom Publishing Protocol
(APP) y el formato de sindicación Atom. Para interactuar con los servicios APP o
de Google usando el componente Zend_Gdata, necesita usar
las clases de servicio como Zend_Gdata_App,
Zend_Gdata, Zend_Gdata_Spreadsheets, etc.
Estas clases de servicio proporcionan métodos para recuperar datos de los servicios como feeds, insertar
nuevas entradas en feeds, actualizar entradas y eliminar entradas.
Nota: Un ejemplo completo de trabajo con Zend_Gdata está disponible en
el directorio demos/Zend/Gdata. Este ejemplo puede ejecutarse
desde la línea de comandos, pero los métodos contenidos en él son fácilmente
portables a una aplicación web.
Los estándares de nomenclatura de Zend Framework requieren que todas las clases se
nombren según la estructura de directorios en la que están ubicadas.
Por ejemplo, las extensiones relacionadas con Spreadsheets se almacenan en:
Zend/Gdata/Spreadsheets/Extension/... y, como resultado
de esto, se nombran
Zend_Gdata_Spreadsheets_Extension_....
¡Esto provoca mucha escritura si intenta construir una nueva
instancia de un elemento de celda de hoja de cálculo!
Hemos implementado un método de fábrica mágico en todas las clases de servicio
(como Zend_Gdata_App, Zend_Gdata,
Zend_Gdata_Spreadsheets) que debería facilitar mucho la construcción de nuevas
instancias de clases de modelo de datos, consulta y otras. Esta fábrica mágica está
implementada usando el método mágico __call() para interceptar todos los
intentos de llamar a $service->newXXX(arg1, arg2, ...). Según
el valor de XXX, se realiza una búsqueda en todos los 'paquetes' registrados
para la clase deseada. Aquí hay algunos ejemplos:
$ss = new Zend_Gdata_Spreadsheets();
// creates a Zend_Gdata_App_Spreadsheets_CellEntry
$entry = $ss->newCellEntry();
// creates a Zend_Gdata_App_Spreadsheets_Extension_Cell
$cell = $ss->newCell();
$cell->setText('My cell value');
$cell->setRow('1');
$cell->setColumn('3');
$entry->cell = $cell;
// ... $entry can then be used to send an update to a Google Spreadsheet
Cada clase de servicio en el árbol de herencia es responsable de registrar los 'paquetes' (directorios) apropiados que deben buscarse al llamar al método de fábrica mágico.
La mayoría de los servicios de Google Data requieren que las aplicaciones cliente
se autentiquen contra el servidor de Google antes de acceder a
datos privados, o guardar o eliminar datos.
Hay dos implementaciones de autenticación para Google Data:
AuthSub y
ClientLogin.
Zend_Gdata ofrece interfaces de clase para ambos métodos.
La mayoría de los demás tipos de consultas contra servicios de Google Data no requieren autenticación.
Zend_Gdata hace uso de
Zend_Http_Client para enviar
solicitudes a google.com y obtener resultados. La respuesta a la mayoría de las
solicitudes de Google Data se devuelve como una subclase de las
clases Zend_Gdata_App_Feed o
Zend_Gdata_App_Entry.
Zend_Gdata asume que su aplicación PHP se
ejecuta en un host que tiene una conexión directa a Internet.
El cliente Zend_Gdata funciona contactando con los servidores de Google Data.
Cree un nuevo objeto de la clase Zend_Gdata_App,
Zend_Gdata, o una de las subclases disponibles que ofrecen métodos auxiliares
para el comportamiento específico del servicio.
El único parámetro opcional del constructor de Zend_Gdata_App
es una instancia de
Zend_Http_Client.
Si no pasa este parámetro, Zend_Gdata crea un objeto
Zend_Http_Client por defecto, que no tendrá credenciales
asociadas para acceder a feeds privados. Especificar el
objeto Zend_Http_Client también le permite
pasar opciones de configuración a ese objeto cliente.
$client = new Zend_Http_Client(); $client->setConfig( ...options... ); $gdata = new Zend_Gdata($client);
A partir de Zend Framework 1.7, se ha añadido soporte para
el versionado de protocolo. Esto permite que el cliente y el servidor admitan
nuevas funciones manteniendo la compatibilidad hacia atrás. Aunque la mayoría de los
servicios gestionarán esto por usted, si crea una instancia de Zend_Gdata
directamente (a diferencia de una de sus subclases), es posible que
necesite especificar la versión de protocolo deseada para acceder a cierta
funcionalidad del servidor.
$client = new Zend_Http_Client(); $client->setConfig( ...options... ); $gdata = new Zend_Gdata($client); $gdata->setMajorProtocolVersion(2); $gdata->setMinorProtocolVersion(null);
Vea también las secciones sobre autenticación para métodos que
crean un objeto Zend_Http_Client autenticado.
Puede especificar parámetros para personalizar consultas con Zend_Gdata.
Los parámetros de consulta se especifican usando subclases de
Zend_Gdata_Query. La clase Zend_Gdata_Query
incluye métodos para establecer todos los parámetros de consulta usados en los servicios GData.
Los servicios individuales, como Spreadsheets, también proporcionan clases de consulta para definir
parámetros personalizados para el servicio y feeds concretos.
Spreadsheets incluye una clase CellQuery para consultar el feed Cell
y una clase ListQuery para consultar el feed List, ya que diferentes
parámetros de consulta son aplicables a cada uno de esos tipos de feed.
Los parámetros de GData a nivel general se describen a continuación.
-
El parámetro q especifica una consulta de texto completo. El valor del parámetro es una cadena.
Establezca este parámetro con la función
setQuery(). -
El parámetro alt especifica el tipo de feed. El valor del parámetro puede ser atom, rss, json, o json-in-script. Si no especifica este parámetro, el tipo de feed predeterminado es atom. NOTA: Solo la salida del formato de feed atom puede procesarse usando
Zend_Gdata. ElZend_Http_Clientpodría usarse para recuperar feeds en otros formatos, usando URLs de consulta generadas por la claseZend_Gdata_Queryy sus subclases.Establezca este parámetro con la función
setAlt(). -
El parámetro maxResults limita el número de entradas en el feed. El valor del parámetro es un entero. El número de entradas devueltas en el feed no superará este valor.
Establezca este parámetro con la función
setMaxResults(). -
El parámetro startIndex especifica el número ordinal de la primera entrada devuelta en el feed. Las entradas anteriores a este número se omiten.
Establezca este parámetro con la función
setStartIndex(). -
Los parámetros updatedMin y updatedMax especifican límites en la fecha de la entrada. Si especifica un valor para updatedMin, no se incluirán en el feed las entradas actualizadas antes de la fecha que especifique. Del mismo modo, no se incluirán las entradas actualizadas después de la fecha especificada por updatedMax.
Puede usar marcas de tiempo numéricas, o una variedad de representaciones de cadena de fecha/hora como valor para estos parámetros.
Establezca este parámetro con las funciones
setUpdatedMin()ysetUpdatedMax().
Hay una función get*() por cada
función set*().
$query = new Zend_Gdata_Query(); $query->setMaxResults(10); echo $query->getMaxResults(); // returns 10
La clase Zend_Gdata también implementa métodos "mágicos" de
getter y setter, por lo que puede usar el nombre del parámetro
como un miembro virtual de la clase.
$query = new Zend_Gdata_Query(); $query->maxResults = 10; echo $query->maxResults; // returns 10
Puede borrar todos los parámetros con la función resetParameters().
Esto es útil si reutiliza un objeto Zend_Gdata
para varias consultas.
$query = new Zend_Gdata_Query(); $query->maxResults = 10; // ...get feed... $query->resetParameters(); // clears all parameters // ...get a different feed...
Use la función getFeed() para recuperar
un feed desde una URI especificada.
Esta función devuelve una instancia de la clase especificada
como segundo argumento de getFeed, que por defecto es
Zend_Gdata_Feed.
$gdata = new Zend_Gdata();
$query = new Zend_Gdata_Query(
'http://www.blogger.com/feeds/blogID/posts/default');
$query->setMaxResults(10);
$feed = $gdata->getFeed($query);
Vea las secciones posteriores para funciones especiales en cada clase auxiliar para los servicios de Google Data. Estas funciones le ayudan a obtener feeds desde la URI apropiada para el servicio respectivo.
Al recuperar un feed que contiene un gran número de entradas,
el feed puede dividirse en varias "páginas" más pequeñas de feeds. Cuando
esto ocurre, cada página contendrá un enlace a la siguiente página en la
serie. Se puede acceder a este enlace llamando a
getLink('next'). El siguiente ejemplo muestra cómo
recuperar la siguiente página de un feed:
function getNextPage($feed) {
$nextURL = $feed->getLink('next');
if ($nextURL !== null) {
return $gdata->getFeed($nextURL);
} else {
return null;
}
}
Si prefiere no trabajar con páginas en su aplicación,
pase la primera página del feed a
Zend_Gdata_App::retrieveAllEntriesForFeed(), que
consolidará todas las entradas de cada página en un único feed.
Este ejemplo muestra cómo usar esta función:
$gdata = new Zend_Gdata();
$query = new Zend_Gdata_Query(
'http://www.blogger.com/feeds/blogID/posts/default');
$feed = $gdata->retrieveAllEntriesForFeed($gdata->getFeed($query));
Tenga en cuenta al llamar a esta función que puede tardar mucho
tiempo en completarse en feeds grandes. Es posible que necesite aumentar el límite
de tiempo de ejecución de PHP llamando a set_time_limit().
Después de recuperar un feed, puede leer los datos del feed o las entradas contenidas en el feed usando los accesores definidos en cada una de las clases de modelo de datos o los accesores mágicos. Aquí hay un ejemplo:
$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
$gdata = new Zend_Gdata($client);
$query = new Zend_Gdata_Query(
'http://www.blogger.com/feeds/blogID/posts/default');
$query->setMaxResults(10);
$feed = $gdata->getFeed($query);
foreach ($feed as $entry) {
// using the magic accessor
echo 'Title: ' . $entry->title->text;
// using the defined accessors
echo 'Content: ' . $entry->getContent()->getText();
}
Después de recuperar una entrada, puede actualizar esa entrada y guardar los cambios de vuelta en el servidor. Aquí hay un ejemplo:
$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
$gdata = new Zend_Gdata($client);
$query = new Zend_Gdata_Query(
'http://www.blogger.com/feeds/blogID/posts/default');
$query->setMaxResults(10);
$feed = $gdata->getFeed($query);
foreach ($feed as $entry) {
// update the title to append 'NEW'
echo 'Old Title: ' . $entry->title->text;
$entry->title->text = $entry->title->text . ' NEW';
// update the entry on the server
$newEntry = $entry->save();
echo 'New Title: ' . $newEntry->title->text;
}
El objeto Zend_Gdata tiene una función
insertEntry() con la que puede subir datos para guardar
nuevas entradas en los servicios de Google Data.
Puede usar las clases de modelo de datos de cada servicio para construir
la entrada apropiada que se publicará en los servicios de Google. La
función insertEntry() aceptará un hijo de
Zend_Gdata_App_Entry como datos para publicar en el servicio.
El método devuelve un hijo de Zend_Gdata_App_Entry
que representa el estado de la entrada tal como fue devuelto por
el servidor.
Alternativamente, podría construir la estructura XML de una entrada
como una cadena y pasar la cadena a la función
insertEntry().
$gdata = new Zend_Gdata($authenticatedHttpClient);
$entry = $gdata->newEntry();
$entry->title = $gdata->newTitle('Playing football at the park');
$content =
$gdata->newContent('We will visit the park and play football');
$content->setType('text');
$entry->content = $content;
$entryResult = $gdata->insertEntry($entry,
'http://www.blogger.com/feeds/blogID/posts/default');
echo 'The <id> of the resulting entry is: ' . $entryResult->id->text;
Para publicar entradas, debe estar usando un
Zend_Http_Client autenticado que haya creado usando las
clases Zend_Gdata_AuthSub o
Zend_Gdata_ClientLogin.
Opción 1: El objeto Zend_Gdata tiene una función
delete() con la que puede eliminar entradas de los servicios de Google Data.
Pase el valor de la URL de edición de
una entrada de feed al método delete().
Opción 2: Alternativamente, puede llamar a $entry->delete() en una entrada recuperada de un servicio de Google.
$gdata = new Zend_Gdata($authenticatedHttpClient);
// a Google Data feed
$feedUri = ...;
$feed = $gdata->getFeed($feedUri);
foreach ($feed as $feedEntry) {
// Option 1 - delete the entry directly
$feedEntry->delete();
// Option 2 - delete the entry by passing the edit URL to
// $gdata->delete()
// $gdata->delete($feedEntry->getEditLink()->href);
}
Para eliminar entradas, debe estar usando un
Zend_Http_Client autenticado que haya creado usando las
clases Zend_Gdata_AuthSub o
Zend_Gdata_ClientLogin.
![[Note]](images/note.png)