La API de la versión clásica de Google Sites permite que tus aplicaciones accedan, publiquen y modifiquen contenido en un sitio de Google Sites. Además, tu aplicación puede solicitar una lista de actividad reciente, recuperar el historial de revisiones y subir o descargar archivos adjuntos y archivos.
Público
En este documento, se supone que comprendes las ideas generales detrás del protocolo de las APIs de Google Data.
Este documento está dirigido a los programadores que desean escribir aplicaciones cliente que puedan interactuar con Google Sites. Proporciona una serie de ejemplos de interacciones básicas con la API de datos usando XML/HTTP sin procesar, con explicaciones. Después de leer este documento, puedes obtener más información para interactuar con la API a través de nuestras bibliotecas cliente. Para ello, lee los ejemplos específicos del lenguaje que se encuentran en las otras guías de la barra de navegación lateral izquierda.
Para obtener una referencia del material de esta guía, consulta la guía de referencia.
Autoriza solicitudes
Cuando tu aplicación solicita datos del usuario no públicos, debe incluir un token de autorización. El token también identifica tu aplicación ante Google.
Acerca de los protocolos de autorización
Tu aplicación debe usar OAuth 2.0 para autorizar solicitudes. No se admiten otros protocolos de autorización. Si tu aplicación usa Acceder con Google, tú controlarás algunos aspectos de la autorización.
Solicitudes de autorización con OAuth 2.0
Un usuario autenticado debe autorizar las solicitudes a la API de Google Sites Data para datos del usuario no públicos.
Los detalles del proceso de autorización, o "flujo", para OAuth 2.0 varían de alguna manera según el tipo de aplicación que estás escribiendo. El siguiente proceso general se aplica a todos los tipos de aplicación:
- Cuando crees tu aplicación, deberás registrarla con Google API Console. Luego, Google proporcionará la información que necesites más tarde, como el ID y un secreto del cliente.
- Activa la API de Google Sites Data en la Consola de APIs de Google. Si no aparece en la consola de API, omite este paso.
- Cuando la aplicación necesite acceder a datos del usuario, solicita a Google un alcance de acceso en particular.
- Google mostrará una pantalla de consentimiento al usuario, en la que le pedirá que permita a la aplicación solicitar algunos de sus datos.
- Si el usuario la aprueba, Google le otorgará a la aplicación un token de acceso de corta duración.
- La aplicación solicitará los datos del usuario y adjuntará el token de acceso a la solicitud.
- Si Google determina que la solicitud y el token son válidos, mostrará los datos solicitados.
Algunos flujos requieren pasos adicionales, como el uso de tokens de actualización, para adquirir nuevos tokens de acceso. Si deseas obtener información detallada sobre los flujos para varios tipos de aplicaciones, consulta la documentación de OAuth 2.0 de Google.
A continuación, se muestra la información del alcance de OAuth 2.0 para la API de Google Sites Data:
https://sites.google.com/feeds/
Para solicitar acceso con OAuth 2.0, tu aplicación necesita los datos del alcance, además de la información que Google proporciona cuando registras la aplicación (como el ID y el secreto del cliente).
Cómo especificar una versión
Cada solicitud que envíes a la API de Google Sites Data debe especificar la versión 1.4. Para especificar un número de versión, usa el encabezado HTTP GData-Version:
GData-Version: 1.4
Como alternativa, si no puedes establecer encabezados HTTP, puedes especificar v=1.4 como un parámetro de consulta en la URL. Sin embargo, se prefiere el encabezado HTTP siempre que sea posible.
Nota: Las bibliotecas cliente proporcionan automáticamente los encabezados de versión adecuados, por lo que no debes usar el parámetro de consulta v=1.4 cuando uses una biblioteca cliente.
Feed del sitio
El feed del sitio se puede usar para enumerar los sitios de Google Sites que posee un usuario o para los que tiene permisos de visualización, y también para modificar el título de un sitio existente. En el caso de los dominios de G Suite, también se puede usar para crear o copiar un sitio completo.
Sitios de la ficha
Para enumerar los sitios a los que tiene acceso un usuario, envía una solicitud GET autenticada a la siguiente URL:
https://sites.google.com/feeds/site/domainName| Parámetro del feed | Descripción |
|---|---|
domainName | "site" o el dominio de tu dominio alojado en G Suite (p. ej., example.com) |
La respuesta contendrá un feed con una lista de sitios:
GET /feeds/site/domainName HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> HTTP/1.1 200 OK <feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:gAcl="http://schemas.google.com/acl/2007" xmlns:sites="http://schemas.google.com/sites/2008" xmlns:gs="http://schemas.google.com/spreadsheets/2006" xmlns:dc="http://purl.org/dc/terms" xmlns:batch="http://schemas.google.com/gdata/batch" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0"> <id>https://sites.google.com/feeds/site/site</id> <updated>2009-12-02T17:47:34.406Z</updated> <title>Site</title> <link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="https://sites.google.com/feeds/site/site"/> <link rel="http://schemas.google.com/g/2005#post" type="application/atom+xml" href="https://sites.google.com/feeds/feeds/site/domainName"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/site/domainName"/> <link rel="next" type="application/atom+xml" href="https://sites.google.com/feeds/site/domainName/?start-index=2"/> <generator version="1" uri="http://sites.google.com/">Google Sites</generator> <openSearch:startIndex>1</openSearch:startIndex> <entry gd:etag="W/"CkUAQH4_eil7I2A9WxNaFk4.""> <id>https://sites.google.com/feeds/site/site/myTestSite</id> <updated>2009-12-01T01:17:21.042Z</updated> <app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-01T01:17:21.042Z</app:edited> <title>myTestSite</title> <summary/> <link rel="alternate" type="text/html" href="http://sites.google.com/site/myTestSite/"/> <link rel="http://schemas.google.com/acl/2007#accessControlList" type="application/atom+xml" href="https://sites.google.com/feeds/acl/site/domainName/myTestSite"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/site/domainName/myTestSite"/> <link rel="edit" type="application/atom+xml" href="https://sites.google.com/feeds/site/domainName/myTestSite"/> <sites:siteName>myTestSite</sites:siteName> <sites:theme>default</sites:theme> </entry> <entry gd:etag="W/"DkQGQHczfA9WxNaFk4.""> <id>https://sites.google.com/feeds/site/domainName/myOtherTestSite</id> <updated>2009-12-01T02:25:21.987Z</updated> <app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-01T02:25:21.987Z</app:edited> <title>myOtherTestSite</title> <summary>A new site to hold memories</summary> <category scheme="http://schemas.google.com/sites/2008#tag" term="Memories Site"/> <link rel="alternate" type="text/html" href="http://sites.google.com/site/myOtherTestSite"/> <link rel="http://schemas.google.com/acl/2007#accessControlList" type="application/atom+xml" href="https://sites.google.com/feeds/acl/site/domainName/myOtherTestSite"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/site/domainName/myOtherTestSite"/> <link rel="edit" type="application/atom+xml" href="https://sites.google.com/feeds/site/domainName/myOtherTestSite"/> <sites:siteName>myOtherTestSite</sites:siteName> <sites:theme>iceberg</sites:theme> </entry> ... </feed>
Los sitios se enumeran en orden alfabético.
Cómo crear sitios nuevos
Nota: Esta función solo está disponible para los dominios de G Suite.
Se pueden aprovisionar sitios nuevos realizando una solicitud HTTP POST al feed de sitios, por ejemplo:
POST /feeds/site/example.com HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> <entry xmlns="http://www.w3.org/2005/Atom" xmlns:sites="http://schemas.google.com/sites/2008"> <title>Source Site</title> <summary>A new site to hold memories</summary> <sites:theme>slate</sites:theme> </entry>
La solicitud anterior crearía un nuevo sitio de Google con el tema "pizarra" en el dominio de G Suite example.com.
La URL del sitio sería http://sites.google.com/a/example.com/source-site/.
Si el sitio se crea correctamente, el servidor responderá con 201 Created.
La entrada de respuesta contendrá elementos agregados por el servidor, como un vínculo al sitio, un vínculo al feed de la LCA del sitio, el nombre, el título y el resumen del sitio.
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:gAcl="http://schemas.google.com/acl/2007"
xmlns:sites="http://schemas.google.com/sites/2008" xmlns:gs="http://schemas.google.com/spreadsheets/2006"
xmlns:dc="http://purl.org/dc/terms" xmlns:batch="http://schemas.google.com/gdata/batch"
xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0"
gd:etag="W/"DEECR38l7I2A9WxNaF0Q."">
<id>https://sites.google.com/feeds/site/example.com/source-site</id>
<updated>2009-12-02T23:31:06.184Z</updated>
<app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-02T23:31:06.184Z</app:edited>
<title>New Test Site</title>
<summary>A new site to hold memories</summary>
<link rel="alternate" type="text/html" href="http://sites.google.com/a/example.com/source-site/"/>
<link rel="http://schemas.google.com/acl/2007#accessControlList" type="application/atom+xml"
href="https://sites.google.com/feeds/acl/site/example.com/source-site"/>
<link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/site/example.com/source-site"/>
<link rel="edit" type="application/atom+xml" href="https://sites.google.com/feeds/site/example.com/source-site"/>
<sites:siteName>source-site</sites:siteName>
<sites:theme>slate</sites:theme>
</entry>
Cómo copiar un sitio
Nota: Esta función solo está disponible para los dominios de G Suite.
Un sitio existente se puede duplicar de la misma manera que se crea un sitio nuevo. Sin embargo, en la entrada Atom de la solicitud POST, incluye un <link> con rel='source' que apunte al feed del sitio que se copiará. Todos los sitios que se hayan copiado tendrán este vínculo. A continuación, se muestra un ejemplo para duplicar un sitio:
POST /feeds/site/example.com HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> <entry xmlns="http://www.w3.org/2005/Atom"> <link rel="http://schemas.google.com/sites/2008#source" type="application/atom+xml" href="https://sites.google.com/feeds/site/example.com/source-site"/> <title>Copy of New Test Site</title> <summary>A newer site to hold memories</summary> </entry>
La solicitud anterior copiaría el sitio en http://sites.google.com/a/example.com/source-site/.
Puntos importantes:
- Solo se pueden copiar los sitios y las plantillas de sitios que pertenecen al usuario autenticado.
- También se puede copiar una plantilla de sitio. Un sitio es una plantilla si el parámetro de configuración "Publicar este sitio como plantilla" está marcado en la página de configuración de Google Sites.
- Puedes copiar un sitio de otro dominio, siempre y cuando aparezcas como propietario en el sitio de origen.
Cómo actualizar los metadatos de un sitio
Para actualizar el título o el resumen de un sitio, envía una solicitud PUT HTTP al vínculo edit de la entrada del sitio.
Por ejemplo, el siguiente ejemplo actualizará el título del sitio anterior a New Test Site2 y su descripción a Newer description.
PUT /feeds/site/example.com/source-site HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> <entry xmlns="http://www.w3.org/2005/Atom" xmlns:gAcl="http://schemas.google.com/acl/2007" xmlns:sites="http://schemas.google.com/sites/2008" xmlns:gs="http://schemas.google.com/spreadsheets/2006" xmlns:dc="http://purl.org/dc/terms" xmlns:batch="http://schemas.google.com/gdata/batch" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" gd:etag="W/"DEECR38l7I2A9WxNaF0Q.""> <id>https://sites.google.com/feeds/site/example.com/source-site</id> <updated>2009-12-02T23:31:06.184Z</updated> <app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-02T23:31:06.184Z</app:edited> <title>New Test Site2</title> <summary>Newer description</summary> <category scheme="http://schemas.google.com/sites/2008#tag" term="Category"/> <link rel="alternate" type="text/html" href="http://sites.google.com/a/example.com/source-site/"/> <link rel="http://schemas.google.com/acl/2007#accessControlList" type="application/atom+xml" href="https://sites.google.com/feeds/acl/site/example.com/source-site"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/site/example.com/source-site"/> <link rel="edit" type="application/atom+xml" href="https://sites.google.com/feeds/site/example.com/source-site"/> <sites:siteName>source-site</sites:siteName> </entry>
Cómo agregar categorías
Nota: Esta función solo está disponible para los dominios de G Suite.
Los sitios de G Suite para tu dominio incluyen metadatos de categoría que son útiles para categorizar los sitios dentro de tu dominio. Para agregar o actualizar metadatos de categorías, envía una solicitud PUT HTTP al vínculo edit de la entrada de tu sitio que incluya una etiqueta category. Consulta la línea en negrita en el siguiente ejemplo:
PUT /feeds/site/example.com/source-site HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> <entry xmlns="http://www.w3.org/2005/Atom" xmlns:gAcl="http://schemas.google.com/acl/2007" xmlns:sites="http://schemas.google.com/sites/2008" xmlns:gs="http://schemas.google.com/spreadsheets/2006" xmlns:dc="http://purl.org/dc/terms" xmlns:batch="http://schemas.google.com/gdata/batch" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" gd:etag="W/"DEECR38l7I2A9WxNaF0Q.""> <id>https://sites.google.com/feeds/site/example.com/source-site</id> <updated>2009-12-02T23:31:06.184Z</updated> <app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-02T23:31:06.184Z</app:edited> <title>My Team website</title> <summary>This site contains contact information and a summary of major efforts our team owns</summary> <category scheme="http://schemas.google.com/sites/2008#tag" term="Team Site"/> <link rel="alternate" type="text/html" href="http://sites.google.com/a/example.com/my-team-site/"/> <link rel="http://schemas.google.com/acl/2007#accessControlList" type="application/atom+xml" href="https://sites.google.com/feeds/acl/site/example.com/my-team-site"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/site/example.com/my-team-site"/> <link rel="edit" type="application/atom+xml" href="https://sites.google.com/feeds/site/example.com/my-team-site"/> <sites:siteName>my-team-site</sites:siteName> </entry>
En este ejemplo, se edita un sitio existente y se agrega la categoría "Sitio del equipo".
También puedes agregar varias categorías si agregas etiquetas <category> adicionales. Consulta las líneas en negrita en el siguiente ejemplo:
PUT /feeds/site/example.com/my-team-site HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> <entry xmlns="http://www.w3.org/2005/Atom" xmlns:gAcl="http://schemas.google.com/acl/2007" xmlns:sites="http://schemas.google.com/sites/2008" xmlns:gs="http://schemas.google.com/spreadsheets/2006" xmlns:dc="http://purl.org/dc/terms" xmlns:batch="http://schemas.google.com/gdata/batch" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" gd:etag="W/"DEECR38l7I2A9WxNaF0Q.""> <id>https://sites.google.com/feeds/site/example.com/my-team-site</id> <updated>2009-12-02T23:31:06.184Z</updated> <app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-02T23:31:06.184Z</app:edited> <title>My Team website</title> <summary>This site contains contact information and a summary of major efforts our team owns</summary> <category scheme="http://schemas.google.com/sites/2008#tag" term="Team Site/"> <category scheme="http://schemas.google.com/sites/2008#tag" term="Legal Department/"> <link rel="alternate" type="text/html" href="http://sites.google.com/a/example.com/my-team-site/"/> <link rel="http://schemas.google.com/acl/2007#accessControlList" type="application/atom+xml" href="https://sites.google.com/feeds/acl/site/example.com/my-team-site"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/site/example.com/my-team-site"/> <link rel="edit" type="application/atom+xml" href="https://sites.google.com/feeds/site/example.com/my-team-site"/> <sites:siteName>my-team-site</sites:siteName> </entry>
En este ejemplo, se agregan dos categorías: "Sitio del equipo" y "Departamento legal".
Asignaciones de direcciones web
Las asignaciones de direcciones web permiten que los usuarios de Sites asignen sus propios dominios a un sitio de Google. Por ejemplo, http://www.mydomainsite.com se puede usar en lugar de http://sites.google.com/a/domain.com/mysite. Según dónde esté alojado tu sitio, puedes modificar manualmente las asignaciones de direcciones web de un sitio. Consulta nuestro artículo del Centro de ayuda para obtener más información.
Cómo recuperar las asignaciones de direcciones web de un sitio
Para devolver las asignaciones de direcciones web de un sitio, recupera la entrada o el feed del sitio con el parámetro with-mappings=true:
GET /feeds/site/domainName?with-mappings=true HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> HTTP/1.1 200 OK <feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:gAcl="http://schemas.google.com/acl/2007" xmlns:sites="http://schemas.google.com/sites/2008" xmlns:gs="http://schemas.google.com/spreadsheets/2006" xmlns:dc="http://purl.org/dc/terms" xmlns:batch="http://schemas.google.com/gdata/batch" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0"> ... <entry gd:etag="W/"DkQGQHczfA9WxNaFk4.""> <id>https://sites.google.com/feeds/site/domainName/myOtherTestSite</id> <updated>2009-12-01T02:25:21.987Z</updated> <app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-01T02:25:21.987Z</app:edited> <title>myOtherTestSite</title> <summary>A new site to hold memories</summary> <link rel="alternate" type="text/html" href="http://sites.google.com/site/myOtherTestSite"/> <link rel="http://schemas.google.com/acl/2007#accessControlList" type="application/atom+xml" href="https://sites.google.com/feeds/acl/site/domainName/myOtherTestSite"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/site/domainName/myOtherTestSite"/> <link rel="edit" type="application/atom+xml" href="https://sites.google.com/feeds/site/domainName/myOtherTestSite"/> <link rel='webAddressMapping' href='http://www.mysitemapping.com'> <link rel='webAddressMapping' href='http://www.mysitemapping2.com'> <link rel='webAddressMapping' href='http://www.myothermapping.org'> </entry> ... </feed>
Las asignaciones existentes se mostrarán como links con rel='webAddressMapping'. Por ejemplo, en el ejemplo anterior, hay tres webAddressMapping que apuntan al sitio http://sites.google.com/site/myOtherTestSite.
Cómo modificar las asignaciones de direcciones web
Nota: Todas las operaciones GET/POST/PUT deben especificar el parámetro with-mappings=true cuando se trabaja con asignaciones de direcciones web. Si el parámetro no está presente, no se devolverá webAddressMappings en las entradas del sitio (GET) ni se tendrá en cuenta cuando se actualicen o quiten (PUT) las asignaciones de una entrada.
Para agregar, actualizar o borrar una asignación, simplemente especifica, cambia o quita ese vínculo cuando crees sitios nuevos o actualices los metadatos de un sitio. El parámetro with-mappings=true debe incluirse en el URI del feed de sitios.
Nota: Para actualizar las asignaciones de direcciones, debes ser administrador del sitio o administrador del dominio en el caso de un sitio alojado en G Suite.
Por ejemplo, la siguiente solicitud actualiza la asignación de http://www.mysitemapping.com a http://www.my-new-sitemapping.com y quita http://www.mysitemapping2.com dejando el vínculo fuera de la entrada:
PUT /feeds/site/domainName?with-mappings=true HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> <entry gd:etag="W/"DkQGQHczfA9WxNaFk4.""> <id>https://sites.google.com/feeds/site/domainName/myOtherTestSite</id> <updated>2009-12-01T02:25:21.987Z</updated> <app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-01T02:25:21.987Z</app:edited> <title>myOtherTestSite</title> <summary>A new site to hold memories</summary> <link rel="alternate" type="text/html" href="http://sites.google.com/site/myOtherTestSite"/> <link rel="http://schemas.google.com/acl/2007#accessControlList" type="application/atom+xml" href="https://sites.google.com/feeds/acl/site/domainName/myOtherTestSite"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/site/domainName/myOtherTestSite"/> <link rel="edit" type="application/atom+xml" href="https://sites.google.com/feeds/site/domainName/myOtherTestSite"/> <link rel='webAddressMapping' href='www.my-new-sitemapping.com'> <!-- missing mapping2 will be deleted --> <link rel='webAddressMapping' href='http://www.myothermapping.org'> </entry>
Ten en cuenta que las asignaciones de direcciones web también se pueden especificar en el momento de crear o copiar un sitio.
Feed de actividad
Puedes recuperar la actividad reciente (cambios) de un sitio recuperando el feed de actividad. Cada entrada del feed de actividad contiene información sobre un cambio que se realizó en el sitio.
Para consultar el feed de actividad, envía una solicitud HTTP GET a la URL del feed de actividad:
https://sites.google.com/feeds/activity/domainName/siteName
| Parámetro del feed | Descripción |
|---|---|
domainName | "site" o el dominio de tu dominio alojado en G Suite (p. ej., example.com) |
siteName | Nombre del espacio web de tu sitio, que se encuentra en la URL del sitio (p.ej., myCoolSite). |
Ejemplo de solicitud y respuesta:
GET /feeds/activity/site/siteName HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> HTTP/1.1 200 OK <?xml version="1.0" encoding="UTF-8"?> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/"> <id>https://sites.google.com/feeds/activity/site/siteName</id> <updated>2009-09-10T05:24:23.120Z</updated> <title>Activity</title> <link rel="alternate" type="text/html" href="http://sites.google.com/site/siteName/system/app/pages/recentChanges"/> <link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="https://sites.google.com/feeds/activity/site/siteName"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/activity/site/siteName"/> <generator version="1" uri="http://sites.google.com">Google Sites</generator> <openSearch:startIndex>1</openSearch:startIndex> <entry xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/"CU4GQ3szfSl7ImA9WxNRFUg.""> <id>https://sites.google.com/feeds/activity/site/siteName/940375996952876062</id> <updated>2009-09-10T03:38:42.585Z</updated> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/sites/2008#deletion" label="deletion"/> <title>home</title> <summary type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml">User deleted <a href="http://sites.google.com/site/siteName/home">home</a> </div> </summary> <link rel="http://schemas.google.com/sites/2008#revision" type="application/atom+xml" href="https://sites.google.com/feeds/revision/site/siteName/5409745539831916487"/> <link rel="http://schemas.google.com/sites/2008#current" type="application/atom+xml" href="https://sites.google.com/feeds/content/site/siteName/5409745539831916487"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/activity/site/siteName/940375996952876062"/> <author> <name>User</name> <email>user@gmail.com</email> </author> </entry> <entry xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/"CU8DQn45fyl7ImA9WxNRFUg.""> <id>https://sites.google.com/feeds/activity/site/siteName/7165439066235480082</id> <updated>2009-09-10T03:37:53.027Z</updated> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/sites/2008#edit" label="edit"/> <title>home</title> <summary type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml">User2 edited <a href="http://sites.google.com/site/siteName/home">home</a> </div> </summary> <link rel="http://schemas.google.com/sites/2008#revision" type="application/atom+xml" href="https://sites.google.com/feeds/revision/site/siteName/5409745539831916487"/> <link rel="http://schemas.google.com/sites/2008#current" type="application/atom+xml" href="https://sites.google.com/feeds/content/site/siteName/5409745539831916487"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/activity/site/siteName/7165439066235480082"/> <author> <name>User</name> <email>user@gmail.com</email> </author> </entry> <entry xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/"CU8AR3s4cSl7ImA9WxNRFUg.""> <id>https://sites.google.com/feeds/activity/site/siteName/127448462987345884</id> <updated>2009-09-10T03:37:26.539Z</updated> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/sites/2008#creation" label="creation"/> <title>home</title> <summary type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml">User3 created <a href="http://sites.google.com/site/siteName/home">home</a> </div> </summary> <link rel="http://schemas.google.com/sites/2008#revision" type="application/atom+xml" href="https://sites.google.com/feeds/revision/site/siteName/5409745539831916487"/> <link rel="http://schemas.google.com/sites/2008#current" type="application/atom+xml" href="https://sites.google.com/feeds/content/site/siteName/5409745539831916487"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/activity/site/siteName/127448462987345884"/> <author> <name>User3</name> <email>user3@gmail.com</email> </author> </entry> </feed>
Nota: Para acceder a este feed, debes ser colaborador o propietario del sitio.
Tu cliente debe enviar el encabezado Authorization correcto y hacer referencia al token obtenido en Autorización de solicitudes.
Feed de revisión
Para recuperar el historial de revisiones de cualquier entrada de contenido, envía una solicitud HTTP GET al vínculo de revisión de la entrada:
https://sites.google.com/feeds/revision/domainName/siteName/CONTENT_ENTRY_ID
| Parámetro del feed | Descripción |
|---|---|
domainName | "site" o el dominio de tu dominio alojado en G Suite (p. ej., example.com) |
siteName | Nombre del espacio web de tu sitio, que se encuentra en la URL del sitio (p.ej., myCoolSite). |
Para encontrar el vínculo de revisiones de una página, un comentario, un adjunto o un elemento de lista determinados, primero recupera la entrada del feed de contenido con su CONTENT_ENTRY_ID. La entrada recuperada contendrá un <atom:link> al feed de revisión.
Por ejemplo:
<link rel="http://schemas.google.com/sites/2008#revision" type="application/atom+xml"
href="https://sites.google.com/feeds/revision/domainName/siteName/CONTENT_ENTRY_ID"/>
Ejemplo de solicitud y respuesta:
GET /feeds/revision/domainName/siteName/CONTENT_ENTRY_ID HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> HTTP/1.1 200 OK <?xml version="1.0" encoding="UTF-8"?> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:sites="http://schemas.google.com/sites/2008" xmlns:gs="http://schemas.google.com/spreadsheets/2006" xmlns:dc="http://purl.org/dc/terms" xmlns:batch="http://schemas.google.com/gdata/batch" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0"> <id>https://sites.google.com/feeds/revision/domainName/siteName/CONTENT_ENTRY_ID</id> <updated>2009-09-10T04:33:35.337Z</updated> <title>Revisions</title> <link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="https://sites.google.com/feeds/revision/domainName/siteName/CONTENT_ENTRY_ID"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/revision/domainName/siteName/CONTENT_ENTRY_ID"/> <generator version="1" uri="http://sites.google.com">Google Sites</generator> <openSearch:startIndex>1</openSearch:startIndex> <entry gd:etag="W/"CU4GQmA9WxNRFUg.""> <id>https://sites.google.com/feeds/revision/domainName/siteName/CONTENT_ENTRY_ID/2</id> <updated>2009-09-10T03:38:42.045Z</updated> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/sites/2008#webpage" label="webpage"/> <title>Home</title> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml">Latest content here</div> </content> <link rel="alternate" type="text/html" href="http://sites.google.com/domainName/siteName/CONTENT_ENTRY_ID/system/app/pages/admin/compare?wuid=wuid%3Agx%3A4f67c7&rev1=2"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/revision/domainName/siteName/CONTENT_ENTRY_ID/2"/> <author> <name>User</name> <email>user@gmail.com</email> </author> <sites:pageName>home</sites:pageName> <sites:revision>2</sites:revision> </entry> <entry gd:etag="W/"CU8DQ388eSl7ImA9WxNRFUg.""> <id>https://sites.google.com/feeds/revision/domainName/siteName/CONTENT_ENTRY_ID/1</id> <updated>2009-09-10T03:37:52.171Z</updated> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/sites/2008#webpage" label="webpage"/> <title>Home</title> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml">Older content here</div> </content> <link rel="alternate" type="text/html" href="http://sites.google.com/domainName/siteName/CONTENT_ENTRY_ID/system/app/pages/admin/compare?wuid=wuid%3Agx%3A4bc7&rev1=1"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/revision/domainName/siteName/CONTENT_ENTRY_ID/1"/> <author> <name>User</name> <email>user@gmail.com</email> </author> <sites:pageName>home</sites:pageName> <sites:revision>1</sites:revision> </entry> </feed>
Nota: Para acceder a este feed, debes ser colaborador o propietario del sitio.
Tu cliente debe enviar el encabezado Authorization correcto y hacer referencia al token obtenido en Autorización de solicitudes.
Feed de contenido
Recuperación de contenido
El feed de contenido enumera el contenido actual de un sitio. Envía una solicitud GET autenticada a la siguiente URL:
https://sites.google.com/feeds/content/domainName/siteName
| Parámetro del feed | Descripción |
|---|---|
domainName | "site" o el dominio de tu dominio alojado en G Suite (p. ej., example.com) |
siteName | Nombre del espacio web de tu sitio, que se encuentra en la URL del sitio (p.ej., myCoolSite). |
El resultado es un feed que enumera la primera página de las entradas de contenido del sitio. Cada entrada del feed representará un tipo diferente de entrada de contenido, como webpage, filecabinet, attachment, comment, etcétera. El elemento <category scheme="http://schemas.google.com/g/2005#kind"> determina el tipo de entrada. Consulta la guía de referencia para obtener una lista de los valores de kind admitidos.
Nota: Es posible que este feed requiera o no autenticación, según los permisos de uso compartido del sitio.
Si el sitio no es público, tu cliente debe enviar el encabezado Authorization correcto (como se muestra en el ejemplo anterior) y hacer referencia al token obtenido en Autorización de solicitudes.
GET /feeds/content/domainName/siteName HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> HTTP/1.1 200 OK <?xml version="1.0" encoding="UTF-8"?> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:sites="http://schemas.google.com/sites/2008" xmlns:gs="http://schemas.google.com/spreadsheets/2006" xmlns:dc="http://purl.org/dc/terms" xmlns:batch="http://schemas.google.com/gdata/batch" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0"> <id>https://sites.google.com/feeds/content/domainName/siteName</id> <updated>2009-08-31T01:39:20.286Z</updated> <title>Content</title> <link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="https://sites.google.com/feeds/content/domainName/siteName"/> <link rel="http://schemas.google.com/g/2005#post" type="application/atom+xml" href="https://sites.google.com/feeds/content/domainName/siteName"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/content/domainName/siteName"/> <link rel="http://schemas.google.com/g/2005#batch" type="application/atom+xml" href="https://sites.google.com/feeds/content/domainName/siteName/batch""/> <link rel="next" type="application/atom+xml" href="https://sites.google.com/feeds/content/domainName/siteName/?start-index=2"/> <generator version="1" uri="http://sites.google.com">Google Sites</generator> <openSearch:startIndex>1</openSearch:startIndex> <entry gd:etag="W/"Ck8GQXk7fil7ImA9WxNSFk0.""> <id>https://sites.google.com/feeds/content/domainName/siteName/7322156894</id> <updated>2009-08-30T02:53:40.706Z</updated> <app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-30T02:53:40.706Z</app:edited> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/sites/2008#webpage" label="webpage"/> <title>Subpage</title> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml">Page html content here</div> </content> <link rel="http://schemas.google.com/sites/2008#parent" type="application/atom+xml" href="https://sites.google.com/feeds/content/domainName/siteName/6492205817"/> <link rel="alternate" type="text" href="http://sites.google.com/site/siteName/subpage"/> <link rel="http://schemas.google.com/sites/2008#revision" type="application/atom+xml" href="https://sites.google.com/feeds/revision/domainName/siteName/7322156894"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/content/domainName/siteName/7322156894"/> <link rel="edit" type="application/atom+xml" href="https://sites.google.com/feeds/content/domainName/siteName/7322156894"/> <author> <name>User</name> <email>user@gmail.com</email> </author> <sites:pageName>subpage</sites:pageName> <sites:revision>5</sites:revision> </entry> <entry gd:etag="W/"CkMBQH08fCl7ImA9WxNSFk0.""> <id>https://sites.google.com/feeds/content/domainName/siteName/5930635231</id> <updated>2009-08-30T02:47:31.374Z</updated> <app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-30T02:47:31.374Z</app:edited> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/sites/2008#listitem" label="listpage"/> <title/> <link rel="http://schemas.google.com/sites/2008#parent" type="application/atom+xml" href="https://sites.google.com/feeds/content/domainName/siteName/5930635231"/> <link rel="http://schemas.google.com/sites/2008#revision" type="application/atom+xml" href="https://sites.google.com/feeds/revision/domainName/siteName/5930635231"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/content/domainName/siteName/5930635231"/> <link rel="edit" type="application/atom+xml" href="https://sites.google.com/feeds/content/domainName/siteName/5930635231"/> <author> <name>User</name> <email>user@gmail.com</email> </author> <sites:revision>1</sites:revision> <gs:field index="A" name="Issue/Feature">Implement cool feature X</gs:field> <gs:field index="B" name="Priority">P2</gs:field> <gs:field index="C" name="Owner"/> <gs:field index="D" name="Resolved"/> </entry> <entry gd:etag="W/"AkYHQ3ozcCl7ImA9WxJaE08.""> <id>https://sites.google.com/feeds/content/domainName/siteName/1265948545471894517</id> <updated>2009-08-03T19:35:32.488Z</updated> <app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-03T19:35:32.488Z</app:edited> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/sites/2008#filecabinet" label="filecabinet"/> <title>files</title> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml">Page html content here</div> </content> <link rel="alternate" type="text" href="https://sites.google.com/domainName/siteName/files"/> <link rel="http://schemas.google.com/sites/2008#revision" type="application/atom+xml" href="https://sites.google.com/feeds/revision/domainName/siteName/12671894517"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/content/domainName/siteName/12671894517"/> <link rel="edit" type="application/atom+xml" href="https://sites.google.com/feeds/content/domainName/siteName/12671894517"/> <author> <name>User</name> <email>user@gmail.com</email> </author> <gd:feedLink href="httpn://sites.google.com/feeds/content/domainName/siteName?parent=12671894517"/> <sites:pageName>files</sites:pageName> <sites:revision>1</sites:revision> </entry> ... </feed>
Nota: Estos son solo los primeros resultados. Para desplazarte por todo el feed de contenido, sigue el vínculo "next" del feed:
<link rel="next" type="application/atom+xml" href="https://sites.google.com/feeds/content/domainName/siteName/?start-index=2"/>
Para obtener una explicación de los elementos comunes de Atom, consulta la referencia del Protocolo de datos de Google.
A continuación, se describen los elementos que tienen un significado específico para la API de Sites clásica. Algunas entradas de tipo tendrán propiedades adicionales (que no se enumeran a continuación), mientras que otras no. Por ejemplo, una entrada listitem puede tener elementos <gs:field>, mientras que una entrada webpage no.
| Elemento | Descripción |
|---|---|
<content ...> | El texto interno es el cuerpo HTML de la página. En algunas entradas (p.ej., archivos adjuntos), este elemento contendrá un atributo src que apunta al archivo. |
<link rel="alternate" ...> | Vínculo a la página o el elemento en Google Sites. |
<link rel="http://schemas.google.com/sites/2008#revision" ...> | El atributo href apunta al feed de revisión de la entrada. |
<link rel="http://schemas.google.com/sites/2008#parent" ...> | El atributo href apunta a la entrada principal de la entrada. |
<link rel="http://schemas.google.com/sites/2008#template" ...> | El atributo href apunta a la página de plantilla de la entrada. |
<category scheme="http://schemas.google.com/g/2005#kind" ...> | label es el tipo de entrada. |
<category term="http://schemas.google.com/g/2005#template" ...> | label=template, que indica que la entrada es una plantilla. |
<gd:feedLink> | El atributo href apunta a los elementos secundarios de la entrada principal. |
<sites:pageName> | Nombre del espacio web de la página, que corresponde al nombre de la URL de la página. |
<sites:revision> | Es el número de revisión actual. |
Ejemplos de consultas de feeds de contenido
Puedes buscar en el feed de contenido con algunos de los parámetros de consulta estándar de la API de Google Data y los específicos de la API de Sites clásica. Para obtener información más detallada y una lista completa de los parámetros admitidos, consulta la Guía de referencia.
Cómo recuperar tipos de entrada específicos
Para recuperar solo un tipo de entrada en particular, usa el parámetro kind. Este ejemplo muestra solo las entradas de webpage:
GET /feeds/content/domainName/siteName?kind=webpage
Para devolver más de un tipo de entrada, separa cada kind con una coma (“,”). En este ejemplo, se devuelven entradas de filecabinet y listpage:
GET /feeds/content/domainName/siteName?kind=filecabinet,listpage
Como alternativa, puedes usar el formato estándar para una consulta de Google Data /-/category en lugar del parámetro kind:
GET /feeds/content/domainName/siteName/-/filecabinet|listpage
Cómo recuperar plantillas de páginas
En este ejemplo, solo se muestran las páginas template:
GET /feeds/content/domainName/siteName/-/template
Para devolver todos los tipos de entrada y, además, incluir las páginas template, usa lo siguiente:
GET /feeds/content/domainName/siteName/-/template|-template
Cómo recuperar una página por su ruta
Si conoces la ruta relativa de una página dentro del sitio de Google, puedes usar el parámetro path para recuperar esa página en particular.
En este ejemplo, se devolvería la página ubicada en http://sites.google.com/site/siteName/path/to/the/page:
GET /feeds/content/domainName/siteName?path=/path/to/the/page
Cómo recuperar todas las entradas de una página principal
Si conoces el ID de entrada de una página, puedes usar el parámetro parent para recuperar todas sus entradas secundarias (si las hay):
GET /feeds/content/domainName/siteName?parent=CONTENT_ENTRY_ID
Cómo incluir borradores o entradas borradas
Para incluir entradas borradas o en borrador, usa los parámetros include-drafts o include-deleted, respectivamente.
En este ejemplo, se incluyen entradas de borrador en el feed de contenido:
GET /feeds/content/domainName/siteName?include-drafts=true
Búsqueda en el texto completo
Para buscar en todo el contenido de un sitio, usa el parámetro q para realizar una búsqueda en el texto completo:
GET /feeds/content/domainName/siteName?q=Text%20I%20am%20looking%20for
Creación de contenido
Para crear contenido nuevo (páginas web, páginas de listas, páginas de archivador, páginas de anuncios, etc.), envía una solicitud HTTP POST al feed de contenido:
https://sites.google.com/feeds/content/domainName/siteName
Para obtener una lista de los tipos de entrada admitidos, consulta el parámetro kind en la Guía de referencia.
Cómo crear elementos o páginas nuevos
En este ejemplo, se crea un nuevo webpage en el nivel superior del sitio, se incluye algo de XHTML para el cuerpo de la página y se establece el título del encabezado en "Título de la página web nueva":
POST /feeds/content/domainName/siteName HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> Content-Length: 328 Content-Type: application/atom+xml <entry xmlns="http://www.w3.org/2005/Atom"> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/sites/2008#webpage" label="webpage"/> <title>New Webpage Title</title> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml">HTML body goes here</div> </content> </entry>
Si la operación se realiza correctamente, el servidor responde con un 201 Created y una copia de la entrada.
Cómo crear elementos o páginas en rutas de URL personalizadas
De forma predeterminada, el ejemplo anterior se crearía con la URL http://sites.google.com/domainName/siteName/new-webpage-title y tendría el encabezado de página "Título de la nueva página web". Es decir, el <atom:title> se normaliza en new-webpage-title para la URL.
Para personalizar la ruta de acceso de la URL de una página, puedes establecer el elemento <sites:pageName>.
En este ejemplo, se crea un nuevo filecabinet con el encabezado de página "Almacenamiento de archivos", pero se crea la página en la URL http://sites.google.com/domainName/siteName/files especificando el elemento <sites:pageName>.
POST /feeds/content/domainName/siteName HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> Content-Length: 393 Content-Type: application/atom+xml <entry xmlns="http://www.w3.org/2005/Atom" xmlns:sites="http://schemas.google.com/sites/2008"> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/sites/2008#filecabinet" label="filecabinet"/> <title>File Storage</title> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml">A list of files is below.</div> </content> <sites:pageName>files</sites:pageName> </entry>
El servidor usa las siguientes reglas de precedencia para asignar un nombre a la ruta de URL de una página:
<sites:pageName>, si está presente Debe satisfacera-z, A-Z, 0-9, -, _.<atom:title>, no debe ser nulo si no está presente pageName. La normalización consiste en recortar y contraer los espacios en blanco en "-" y quitar los caracteres que no coinciden cona-z, A-Z, 0-9, -, _.
Por ejemplo, el servidor aceptaría "Custom_Page2".
Cómo crear subpáginas
Para crear subpáginas (secundarias) en una página principal, incluye un <link rel="http://schemas.google.com/sites/2008#parent"> en tu nueva entrada Atom. Establece el atributo href del vínculo en el vínculo propio de la entrada principal.
En este ejemplo, se crea un nuevo announcement con el encabezado "anuncio", en una página de anuncios principal con el ID de entrada PARENT_ENTRY_ID. También se incluye el contenido XHTML para el cuerpo de la página:
POST /feeds/content/domainName/siteName HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> Content-Length: 470 Content-Type: application/atom+xml <entry xmlns="http://www.w3.org/2005/Atom"> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/sites/2008#announcement" label="announcement"/> <link rel="http://schemas.google.com/sites/2008#parent" type="application/atom+xml" href="https://sites.google.com/feeds/content/domainName/siteName/PARENT_ENTRY_ID"/> <title>announcement</title> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml">This weekend. My place.</div> </content> </entry>
Plantillas de páginas
Crea plantillas de páginas
El proceso para crear una plantilla de página es el mismo que el de crear elementos o páginas nuevos y crear subpáginas.La diferencia es la adición de category con el término y la etiqueta establecidos en "http://schemas.google.com/g/2005#template" y "template", respectivamente.
En este ejemplo, se crea una plantilla de webpage nueva.
POST /feeds/content/domainName/siteName HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> Content-Length: 464 Content-Type: application/atom+xml <entry xmlns="http://www.w3.org/2005/Atom" xmlns:sites="http://schemas.google.com/sites/2008"> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/sites/2008#webpage" label="webpage"/> <category scheme="http://schemas.google.com/g/2005#labels" term="http://schemas.google.com/g/2005#template" label="template"/> <title>Webpage Template</title> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml">This weekend. My place.</div> </content> </entry>
Cómo crear páginas a partir de una plantilla
Al igual que cuando creas plantillas de páginas, puedes crear una instancia de una página nueva a partir de una plantilla si incluyes un <link> con rel='http://schemas.google.com/sites/2008#template' que apunte al vínculo propio de una plantilla de página.
En este ejemplo, se crea una página filecabinet nueva a partir de una plantilla de página existente que define un archivador.
POST /feeds/content/domainName/siteName HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> Content-Length: 464 Content-Type: application/atom+xml <entry xmlns="http://www.w3.org/2005/Atom" xmlns:sites="http://schemas.google.com/sites/2008"> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/sites/2008#filecabinet" label="filecabinet"/> <title>File Cabinet Page From Template</title> <link rel='http://schemas.google.com/sites/2008#template' type='application/atom+xml' href='https://sites.google.com/feeds/content/domainName/siteName/ENTRY_ID'/> </entry>
Nota: A pesar de que una plantilla define un <category>, sigue siendo necesario incluir uno en tu entrada. Ten en cuenta también que, si incluyes un elemento <content>, el servidor lo rechazará.
Cómo subir archivos
Al igual que en Google Sites, la API te permite subir archivos adjuntos a las páginas de archivador y a las páginas principales.
Para subir un adjunto a un elemento superior, envía una solicitud HTTP POST a la URL del feed de contenido:
https://sites.google.com/feeds/content/domainName/siteName
El cuerpo de POST debe ser una solicitud multipart de MIME para combinar el contenido del archivo con un <atom:entry> que contenga los metadatos del adjunto. El <atom:entry> debe hacer referencia al vínculo propio de la entrada principal para especificar dónde se creará el adjunto.
Consulta Cómo crear subpáginas para obtener más información.
Subiendo archivos adjuntos
A continuación, se muestra un ejemplo de cómo subir un archivo PDF a un archivador con el ID PARENT_ENTRY_ID. El adjunto se creará con el título "Archivo PDF" y una descripción (opcional) "Paquete de RR.HH.".
POST /feeds/content/domainName/siteName HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> Content-Length: 7221984 Content-Type: multipart/related; boundary=END_OF_PART --END_OF_PART Content-Type: application/atom+xml <entry xmlns="http://www.w3.org/2005/Atom"> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/sites/2008#attachment" label="attachment"/> <link rel="http://schemas.google.com/sites/2008#parent" type="application/atom+xml" href="https://sites.google.com/feeds/content/domainName/siteName/PARENT_ENTRY_ID"/> <title>PDF File</title> <summary>HR packet</summary> </entry> --END_OF_PART Content-Type: application/pdf ... pdf contents here ... --END_OF_PART--
Si la carga se realiza correctamente, el servidor responderá con un 201 Created y una copia de la entrada del adjunto recién creado.
Cómo subir un archivo adjunto a una carpeta
Para subir un adjunto a una carpeta existente en un filecabinet, incluye una categoría con el atributo "term" establecido en el nombre de la carpeta:
<category scheme="http://schemas.google.com/sites/2008#folder" term="FolderName">Archivos adjuntos web
Los adjuntos web son tipos especiales de adjuntos. Básicamente, son vínculos a otros archivos en la Web que puedes agregar a tus fichas de archivador. Esta función es análoga al método de carga "Agregar archivo por URL" en la IU de Google Sites.
Nota: Los archivos adjuntos web solo se pueden crear en un archivador. No se pueden subir a otros tipos de páginas.
En este ejemplo, se crea un webattachment en el archivador al que se hace referencia con el ID FILECABINET_ENTRY_ID.
Su título y su descripción (opcional) se establecen en "GoogleLogo" y "nice colors", respectivamente.
POST /feeds/content/domainName/siteName HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> Content-Type: application/atom+xml Content-Length: 531 <entry xmlns="http://www.w3.org/2005/Atom"> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/sites/2008#webattachment" label="webattachment"/> <link rel="http://schemas.google.com/sites/2008#parent" type="application/atom+xml" href="https://sites.google.com/feeds/content/domainName/siteName/FILECABINET_ENTRY_ID"/> <title>GoogleLogo</title> <summary>nice colors</summary> <content type="image/gif" src="http://www.google.com/images/logo.gif"></content> </entry>
POST crea un vínculo en el archivador del usuario que apunta a la imagen en "http://www.google.com/images/logo.gif".
Actualización de contenido
Los metadatos (título, pageName, etc.) y el contenido de cualquier página se pueden editar con una sola solicitud PUT al vínculo edit.
El cuerpo de la solicitud debe contener una entrada Atom que describa la página actualizada. La excepción a esta regla es una entrada de adjunto, en la que la entrada solo se puede usar para actualizar los metadatos del adjunto.
Para cambiar el contenido del archivo adjunto, simplemente incluye los datos sin procesar como el cuerpo de una solicitud PUT al vínculo edit-media del archivo adjunto. También puedes actualizar los metadatos y el contenido del archivo adjunto a la vez con una solicitud multipart/MIME.
Para confirmar que tu actualización no reemplaza los cambios de otro cliente, incluye el valor de ETag de la entrada original. Para ello, proporciona el valor de ETag en un encabezado If-Match de HTTP o incluye el atributo gd:etag de la entrada original en la entrada actualizada. Para determinar el valor de ETag de la entrada original, examina el atributo gd:etag del elemento <entry>.
En el caso de las entradas de medios, es posible que la ETag de los medios esté disponible en el atributo gd:etag del vínculo edit-media.
Si quieres actualizar la entrada independientemente de si otra persona la actualizó desde que la recuperaste, usa If-Match: * y no incluyas la ETag. Para obtener más información sobre las ETag, consulta la guía de referencia de las APIs de datos de Google.
Actualizar los metadatos o el contenido HTML de un elemento
Para actualizar los metadatos o el contenido HTML de una entrada, envía una solicitud PUT HTTP al vínculo edit de la entrada.
A continuación, se muestra un ejemplo de cómo actualizar una entrada de listpage (representada por su ID ENTRY_ID) con los siguientes cambios:
- El título se modificó a "Contenido actualizado".
- Contenido HTML actualizado
- El primer encabezado de columna de la lista se actualiza a "Propietario".
- La ruta de URL de la página se modifica con el elemento
<sites:pageName>.
PUT /feeds/content/domainName/siteName/ENTRY_ID Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> Content-Length: 816 Content-Type: application/atom+xml <entry xmlns="http://www.w3.org/2005/Atom" xmlns:sites="http://schemas.google.com/sites/2008" xmlns:gs="http://schemas.google.com/spreadsheets/2006" xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/"CEEBRn0ymA9WxJWEUw.""> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/sites/2008#listpage" label="listpage"/> <title>Updated Title</title> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml">Updated Content</div> </content> <gs:worksheet name="listpage"/> <gs:header row="1"/> <gs:data startRow="2"> <gs:column index="A" name="Owner"/> <gs:column index="B" name="Description"/> <gs:column index="C" name="Completed"/> </gs:data> <sites:pageName>newPagePath</sites:pageName> </entry>
Nota: La entrada (como la devuelve el servidor) contendrá más elementos que el ejemplo anterior.
Cómo reemplazar el contenido de un adjunto
A continuación, se muestra un ejemplo de cómo reemplazar el contenido de un adjunto, pero sin modificar sus metadatos. Dado que la solicitud contiene contenido nuevo, se usa el vínculo edit-media de la entrada del adjunto.
PUT /feeds/media/content/domainName/siteName/ATTACHMENT_ENTRY_ID Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> Content-Length: 70581 Content-Type: application/msword ... doc contents here ...
Actualización de metadatos y contenido de adjuntos
A continuación, se muestra un ejemplo de cómo actualizar los metadatos y el contenido de un adjunto al mismo tiempo. El nombre del archivo adjunto se actualizará a "Título nuevo" y su contenido se reemplazará por el contenido de un archivo .zip. Dado que la solicitud contiene contenido de archivo nuevo, se usa el vínculo edit-media de la entrada del adjunto.
Ten en cuenta que incluir la ETag para los metadatos también proporciona un If-Match implícito para el contenido multimedia, ya que cualquier actualización del contenido multimedia hace que cambie la ETag de los metadatos.
PUT /feeds/media/content/domainName/siteName/ATTACHMENT_ENTRY_ID Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> Content-Type: multipart/related; boundary="END_OF_PART" --END_OF_PART Content-Type: application/atom+xml <?xml version='1.0' encoding='UTF-8'?> <entry xmlns="http://www.w3.org/2005/Atom" xmlns:gd="http://schemas.google.com/g/2005" gd:etag="BxAaTxRZAyp7ImBq"> <link rel="http://schemas.google.com/sites/2008#parent" type="application/atom+xml" href="https://sites.google.com/feeds/content/domainName/siteName/ATTACHMENT_ENTRY_ID"/> <title>New Title</title> </entry> --END_OF_PART Content-Type: application/zip ... zip contents here ... --END_OF_PART
Cómo borrar contenido
Para quitar un elemento de un sitio de Google, primero recupera la entrada y, luego, envía una solicitud DELETE a la URL edit de la entrada. Esta es la misma URL que se usa cuando se actualizan los metadatos o el contenido HTML de un elemento.
DELETE /feeds/content/domainName/siteName/ENTRY_ID Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> If-Match: <ETag or * here>
Si la entrada se borró correctamente, el servidor responde con un 200 OK HTTP.
Si quieres asegurarte de no borrar una entrada que otro cliente modificó desde que la recuperaste, incluye un encabezado If-Match de HTTP que contenga el valor de ETag de la entrada original. Puedes determinar el valor de ETag de la entrada original examinando el atributo gd:etag del elemento <entry>.
Si quieres borrar la entrada independientemente de si otra persona la actualizó desde que la recuperaste, usa If-Match: * y no incluyas la ETag. (En este caso, no es necesario que recuperes la entrada antes de borrarla).
Para obtener más información sobre las etiquetas ETag, consulta la guía de referencia de las APIs de datos de Google.
Descarga de archivos adjuntos
Una vez que tengas una entrada de adjunto, podrás descargar el archivo enviando una solicitud HTTP GET autenticada al vínculo src de <content> de la entrada. Ejemplo de un vínculo de contenido de un PDF:
<content type="application/pdf" src="http://502377765-a-google-com-s-sites.googlegroups.com/feeds/media/content/domainName/siteName/678942036"/>
Feed de LCA
Descripción general de los permisos de uso compartido (LCA)
Cada entrada de LCA en el feed de LCA representa un rol de acceso de una entidad en particular, ya sea un usuario, un grupo de usuarios, un dominio o el acceso predeterminado (que es un sitio público). Las entradas solo se mostrarán para las entidades con acceso explícito. Se mostrará una entrada para cada dirección de correo electrónico en el panel "Personas con acceso" de la pantalla de uso compartido de la IU de Google Sites. Por lo tanto, no se mostrarán los administradores del dominio, aunque tengan acceso implícito a un sitio.
Funciones
El elemento role representa un nivel de acceso que puede tener una entidad. El elemento gAcl:role puede tener cuatro valores:
- lector: Es un visualizador (equivalente al acceso de solo lectura).
- writer: Es un colaborador (equivalente al acceso de lectura y escritura).
- owner: Por lo general, es el administrador del sitio (equivalente al acceso de lectura y escritura).
Permisos
El elemento de alcance representa la entidad que tiene este nivel de acceso. Existen cinco tipos posibles del elemento gAcl:scope:
- user: Es un valor de dirección de correo electrónico, p. ej., "usuario@gmail.com".
- group: Es una dirección de correo electrónico de un grupo de Google, p. ej., "group@domain.com".
- domain: Es un nombre de dominio de G Suite, p. ej., "domain.com".
- invite: Es un usuario que recibió una invitación al sitio, pero aún no se agregó a la LCA del sitio. (No está disponible si se especifica gdata 1.3 o una versión anterior).
- default: Solo hay un alcance posible de tipo "default", que no tiene valor (p. ej.,
<gAcl:scope type="default">). Este alcance en particular controla el acceso que cualquier usuario tiene de forma predeterminada en un sitio público.
Nota: Los dominios no pueden tener un valor gAcl:role establecido en acceso de "propietario"; solo pueden ser lectores o escritores.
Acerca del alcance de "invitación".
La API devuelve el alcance de la invitación cuando agregas a la ACL uno o más usuarios que aún no tienen una Cuenta de Google. La API devuelve una URL con un token incorporado que debes proporcionar a los usuarios invitados para permitirles aceptar la invitación.
Este método de invitación te permite invitar a usuarios que no son de Google sin saber de antemano qué dirección de correo electrónico quieren usar. Siempre que los usuarios hagan clic en la URL de invitación con el token incorporado, podrán registrarse para obtener acceso con la dirección de correo electrónico que deseen. Además, varios usuarios pueden usar esta URL para aceptar la invitación, por lo que puede ser útil si invitas a un usuario o a un grupo de usuarios.
Nota: El alcance "invite" solo está disponible en la versión 1.4 y posteriores de gdata. Esto no funcionará si especificas explícitamente la versión 1.3 o una anterior.
Cómo recuperar el feed de la LCA
El feed de LCA se puede usar para controlar los permisos de uso compartido de un sitio y se puede acceder a él a través del siguiente URI:
https://sites.google.com/feeds/acl/site/domainName/siteName
| Parámetro del feed | Descripción |
|---|---|
domainName | "site" o el dominio de tu dominio alojado en G Suite (p. ej., example.com) |
siteName | Nombre del espacio web de tu sitio, que se encuentra en la URL del sitio (p.ej., myCoolSite). |
Cabe destacar que cada entrada del feed de sitios contiene un vínculo a este feed:
<link rel="http://schemas.google.com/acl/2007#accessControlList" type="application/atom+xml"
href="https://sites.google.com/feeds/acl/site/domainName/siteName"/>
Para recuperar los permisos de uso compartido de un sitio, envía una solicitud HTTP GET a la URI del feed de LCA:
GET /feeds/acl/site/domainName/siteName HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here>
El servidor responderá con un 200 OK y un feed de entradas de la LCA:
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/"
xmlns:gAcl="http://schemas.google.com/acl/2007" xmlns:sites="http://schemas.google.com/sites/2008"
xmlns:gs="http://schemas.google.com/spreadsheets/2006" xmlns:dc="http://purl.org/dc/terms"
xmlns:batch="http://schemas.google.com/gdata/batch" xmlns:gd="http://schemas.google.com/g/2005"
xmlns:thr="http://purl.org/syndication/thread/1.0">
<id>https://sites.google.com/feeds/acl/site/domainName/siteName</id>
<updated>2009-12-03T22:01:05.963Z</updated>
<category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/acl/2007#accessRule"/>
<title>Acl</title>
<link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"
href="https://sites.google.com/feeds/acl/site/domainName/siteName"/>
<link rel="http://schemas.google.com/g/2005#post" type="application/atom+xml"
href="https://sites.google.com/feeds/acl/site/domainName/siteName"/>
<link rel="self" type="application/atom+xml"
href="https://sites.google.com/feeds/acl/site/domainName/siteName"/>
<generator version="1" uri="http://sites.google.com">Google Sites</generator>
<openSearch:startIndex>1</openSearch:startIndex>
<entry>
<id>https://sites.google.com/feeds/acl/site/domainName/siteName/user%3AuserA%40gmail.com</id>
<updated>2009-12-03T22:01:05.963Z</updated>
<app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-03T22:01:05.963Z</app:edited>
<category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/acl/2007#accessRule"/>
<link rel="self" type="application/atom+xml"
href="https://sites.google.com/feeds/acl/site/domainName/siteName/user%3AuserA%40google.com"/>
<link rel="edit" type="application/atom+xml"
href="https://sites.google.com/feeds/acl/site/domainName/siteName/user%3AuserA%40google.com"/>
<gAcl:scope type="user" value="userA@google.com"/>
<gAcl:role value="owner"/>
</entry>
<entry>
<id>https://sites.google.com/feeds/acl/site/domainName/siteName/user%3AuserB%40gmail.com</id>
<updated>2009-12-03T22:01:05.963Z</updated>
<app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-03T22:01:05.963Z</app:edited>
<category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/acl/2007#accessRule"/>
<link rel="self" type="application/atom+xml"
href="https://sites.google.com/feeds/acl/site/domainName/siteName/user%3AuserB%40gmail.com"/>
<link rel="edit" type="application/atom+xml"
href="https://sites.google.com/feeds/acl/site/domainName/siteName/user%3AuserB%40gmail.com"/>
<gAcl:scope type="user" value="userB@gmail.com"/>
<gAcl:role value="writer"/>
</entry>
<entry>
<id>https://sites.google.com/feeds/acl/site/domainName/siteName/user%3AuserC%40gmail.com</id>
<updated>2009-12-03T22:01:05.963Z</updated>
<app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-03T22:01:05.963Z</app:edited>
<category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/acl/2007#accessRule"/>
<link rel="self" type="application/atom+xml"
href="https://sites.google.com/feeds/acl/site/domainName/siteName/user%3AuserC%40gmail.com"/>
<link rel="edit" type="application/atom+xml"
href="https://sites.google.com/feeds/acl/site/domainName/siteName/user%3AuserC%40gmail.com"/>
<gAcl:scope type="user" value="userC@gmail.com"/>
<gAcl:role value="reader"/>
</entry>
...
</feed>
Cómo compartir un sitio
El feed de LCA acepta solicitudes GET, POST y PUT. Para insertar un rol nuevo en el feed de la LCA, simplemente envía una solicitud POST al feed de la LCA del sitio.
Nota: Es posible que ciertas LCA de uso compartido solo sean posibles si el dominio está configurado para permitir esos permisos (p. ej., si está habilitado el uso compartido fuera del dominio para los dominios de G Suite, etc.).
En este ejemplo, se agrega un nuevo colaborador (escritor) al sitio:
POST /feeds/acl/site/domainName/siteName HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> <entry xmlns="http://www.w3.org/2005/Atom" xmlns:gAcl='http://schemas.google.com/acl/2007'> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/acl/2007#accessRule'/> <gAcl:role value='writer'/> <gAcl:scope type='user' value='new_writer@example.com'/> </entry>
Se devuelven un 201 Created y la entrada nueva si la inserción se realiza correctamente:
<entry> <id>https://sites.google.com/feeds/acl/site/domainName/siteName/user%3Anew_writer%40example.com</id> <updated>2009-12-03T22:01:05.963Z</updated> <app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-03T22:01:05.963Z</app:edited> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/acl/2007#accessRule"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/acl/site/domainName/siteName/user%3Anew_writer%40example.com"/> <link rel="edit" type="application/atom+xml" href="https://sites.google.com/feeds/acl/site/domainName/siteName/user%3Anew_writer%40example.com"/> <gAcl:role value='writer'/> <gAcl:scope type='user' value='new_writer@example.com'/> </entry>
Cómo invitar a usuarios a través del alcance "invite"
Si agregas usuarios que no tienen Cuentas de Google, la API devolverá una URL que debes proporcionar a los usuarios que desees invitar. Después de hacer clic en la URL, podrán acceder al sitio con una cuenta existente o crear una nueva.
Si la invitación se envía correctamente, se devuelve un 201 Created y una entrada nueva que incluye la URL que debes pasarle al usuario:
<entry> <id>https://sites.google.com/feeds/acl/site/domainName/siteName/user%3Anew_invite%40example.com</id> <updated>2009-12-03T22:01:05.963Z</updated> <app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-03T22:01:05.963Z</app:edited> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/acl/2007#accessRule"/> <link rel="http://schemas.google.com/sites/2008#invite" type="text/html"href="domainName/siteName?invite=inviteToken"/> <link rel="self" type="application/atom+xml" href="https://sites.google.com/feeds/acl/site/domainName/siteName/user%3Anew_invite%40example.com"/> <link rel="edit" type="application/atom+xml" href="https://sites.google.com/feeds/acl/site/domainName/siteName/user%3Anew_invite%40example.com"/> <gAcl:role value='writer'/> <gAcl:scope type='invite' value='new_invite%40example.com'/> </entry>
Uso compartido a nivel del grupo y del dominio
Al igual que cuando compartes un sitio con un solo usuario, puedes compartir un sitio con un grupo de Google o un dominio de G Suite. A continuación, se indican los valores de scope necesarios.
Compartir contenido con una dirección de correo electrónico grupal:
<gAcl:scope type="group" value="group@example.com"/>
Compartir con todo un dominio:
<gAcl:scope type="domain" value="example.com"/>
El uso compartido a nivel del dominio solo se admite para los dominios de G Suite y solo para el dominio en el que se aloja el sitio. Por ejemplo, http://sites.google.com/a/domain1.com/siteA solo puede compartir todo el sitio con domain1.com, no con domain2.com. Los sitios que no están alojados en un dominio de G Suite (p.ej., http://sites.google.com/site/siteB) no pueden invitar dominios.
Cómo modificar los permisos de uso compartido
Para actualizar una entrada de ACL, modifícala según sea necesario y envía una solicitud HTTP PUT al vínculo edit de la entrada, que es simplemente un elemento <link> cuyo atributo "rel" está establecido en "edit". Para el ejemplo anterior, ese vínculo es el siguiente:
<link rel='edit' type='application/atom+xml'
href='https://sites.google.com/feeds/acl/site/domainName/siteName/user%3Anew_writer%40example.com'/>El siguiente fragmento cambia el rol de new_writer@gmail.com a "lector":
PUT /feeds/acl/site/domainName/siteName/user%3Anew_writer%40example.com HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here> <entry xmlns="http://www.w3.org/2005/Atom" xmlns:gAcl='http://schemas.google.com/acl/2007'> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/acl/2007#accessRule'/> <gAcl:role value='reader'/> <gAcl:scope type='user' value='new_writer@gmail.com'/> </entry>
Cómo quitar permisos de uso compartido
Para quitar los permisos de este usuario, envía una solicitud DELETE al mismo vínculo edit que se usó para la solicitud PUT:
DELETE /feeds/acl/site/domainName/siteName/user%3Anew_writer%40example.com HTTP/1.1 Host: sites.google.com GData-Version: 1.4 Authorization: <your authorization header here>
El servidor responderá con 200 OK.
Temas especiales
Cómo recuperar un feed o una entrada
Si quieres recuperar un feed o una entrada que ya recuperaste, puedes mejorar la eficiencia indicándole al servidor que envíe la lista o la entrada solo si cambiaron desde la última vez que las recuperaste.
Para realizar este tipo de recuperación condicional, envía una solicitud HTTP GET que incluya un encabezado HTTP If-None-Match. En el encabezado, especifica el ETag de la lista o la entrada, que puedes encontrar en el atributo gd:etag del elemento <feed> o del elemento <entry>.
Ejemplo con el feed del sitio:
GET /feeds/site/domainName/myOtherTestSite/ GData-Version: 1.4 If-None-Match: W/"Ck8GQXk7fil7ImA9WxNSFk0."
Cuando el servidor recibe esta solicitud, verifica si el elemento que solicitaste tiene la misma ETag que la que especificaste. Si los ETags coinciden, el elemento no cambió y el servidor muestra un código de estado HTTP 304 Not Modified o un código de estado HTTP 412 Precodition Failed. Ambos códigos de estado indican que el elemento que ya recuperaste está actualizado.
Si las ETag no coinciden, significa que el elemento se modificó desde la última vez que lo solicitaste y el servidor lo devuelve.
Para obtener más información sobre las etiquetas ETag, consulta la guía de referencia de las APIs de datos de Google.
Procesamiento por lotes
Las solicitudes por lotes le brindan a tu cliente la capacidad de ejecutar varias operaciones en una sola solicitud, en lugar de enviar cada operación de forma individual.
El servidor realizará tantos cambios solicitados como sea posible y devolverá información de estado que puedes usar para evaluar el éxito o el fracaso de cada operación. Para obtener más detalles sobre el procesamiento por lotes en las APIs de Google Data, consulta Batch Processing with Google Data APIs.
Todas las operaciones de un feed por lotes tienen un elemento <id>, excepto las operaciones de inserción.
Este elemento es el mismo que la URL de solicitud que normalmente usarías cuando actualizas, borras o consultas el feed de contenido.
Por ejemplo, si actualizas una edición, establece <id> en el vínculo edit de la entrada en cuestión.
Se usa para identificar la entrada de destino. Las entradas nuevas no tienen elementos <id>, ya que aún no se crearon. En su lugar, puedes definir un valor de cadena en <batch:id>, que se devolverá en la respuesta del servidor y se usará para buscar la entrada correspondiente.
Para realizar una solicitud por lotes, crea un feed por lotes y envía una solicitud HTTP POST al vínculo por lotes del feed:
<link rel="http://schemas.google.com/g/2005#batch" type="application/atom+xml"
href="https://sites.google.com/feeds/content/site/siteName/batch"/>
En el siguiente ejemplo, se muestra cómo consultar, insertar, actualizar y borrar una entrada de página web:
POST /feeds/content/site/siteName/batch HTTP/1.1 Host: sites.google.com Accept: */* If-Match: * GData-Version: 1.4 Authorization: <your authorization header here> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:sites="http://schemas.google.com/sites/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:batch='http://schemas.google.com/gdata/batch'> <entry> <id>https://sites.google.com/feeds/content/site/siteName/ENTRY_ID1</id> <batch:operation type="query"/> </entry> <entry> <batch:id>1</batch:id> <batch:operation type='insert'/> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/sites/2008#webpage" label="webpage"/> <title>New Webpage1</title> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml">HTML body goes here</div> </content> </entry> <entry gd:etag=""YDgpeyI.""> <id>https://sites.google.com/feeds/content/site/siteName/ENTRY_ID2</id> <batch:operation type='update'/> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/sites/2008#webpage" label="webpage"/> <title>Updated Title for Webpage2</title> ... <batch:operaation type="update"/> </entry> <entry gd:etag=""YassseyI.""> <id>https://sites.google.com/feeds/content/site/siteName/ENTRY_ID3</id> <batch:operation type='delete'/> </entry> </feed>
El feed devuelto contendrá una entrada de resultado para cada operación:
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/"
xmlns:sites="http://schemas.google.com/sites/2008" xmlns:gs="http://schemas.google.com/spreadsheets/2006"
xmlns:dc="http://purl.org/dc/terms" xmlns:batch="http://schemas.google.com/gdata/batch"
xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0">
<id>https://sites.google.com/feeds/content/site/siteName/ENTRY_ID1</id>
<updated>2009-11-10T22:44:08.369Z</updated>
<title>Batch Feed</title>
<entry gd:etag=""YDgpsdfeyI."">
<id>https://sites.google.com/feeds/content/site/siteName/ENTRY_ID1</id>
<published>2009-08-31T04:42:45.251Z</published>
<updated>2009-10-25T22:46:13.729Z</updated>
<app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-25T22:46:13.671Z</app:edited>
<category scheme="http://schemas.google.com/g/2005#kind"
term="http://schemas.google.com/sites/2008#webpage" label="webpage"/>
<title>Page Title</title>
...
<batch:status code="200" reason="Success"/>
<batch:operation type="query"/>
</entry>
<entry gd:etag=""YDsseyI."">
<id>https://sites.google.com/feeds/content/site/siteName/ENTRY_ID4</id>
<published>2009-11-10T22:44:08.531Z</published>
<updated>2009-11-10T22:44:08.560Z</updated>
<app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-10T22:44:08.531Z</app:edited>
<category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/sites/2008#webpage" label="webpage"/>
<title>New Webpage1</title>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<table cellspacing="0" class="sites-layout-name-one-column sites-layout-hbox">
<tbody>
<tr>
<td class="sites-layout-tile sites-tile-name-content-1">
<div>HTML body goes here</div>
</td>
</tr>
</tbody>
</table>
</div>
</content>
...
<batch:id>1</batch:id>
<batch:status code="201" reason="Created"/>
<batch:operation type="insert"/>
</entry>
<entry gd:etag=""YDkpeyI."">
<id>https://sites.google.com/feeds/content/site/siteName/ENTRY_ID2</id>
<updated>2009-11-10T22:44:09.296Z</updated>
<title>Updated Title for Webpage2</title>
...
<sites:pageName>updated-title-for-webpage2</sites:pageName>
<sites:revision>5</sites:revision>
<batch:status code="200" reason="Success"/>
<batch:operation type="update"/>
</entry>
<entry>
<id>https://sites.google.com/feeds/content/site/siteName/ENTRY_ID3</id>
<title>Deleted</title>
<content>Deleted</content>
<batch:status code="200" reason="Success"/>
<batch:operation type="delete"/>
</entry>
</feed>