Usa cURL para interactuar con los servicios de datos de Google

Advertencia: Esta página trata sobre las API anteriores de Google, las API de datos de Google, y solo es relevante para las API que aparecen en el directorio de las API de datos de Google, muchas de las cuales se reemplazaron con API más nuevas. Para obtener información sobre una API nueva específica, consulta la documentación de la API nueva. Para obtener información sobre cómo autorizar solicitudes con una API más reciente, consulta Autenticación y autorización de cuentas de Google.

Ryan Boyd, equipo de API de datos de Google
Septiembre de 2007

Introducción

En esencia, las API de datos de Google usan feeds Atom y entradas (XML) como formato de datos y HTTP como protocolo para la transmisión de datos, lo que extiende el Protocolo de publicación Atom. Publicamos varias bibliotecas cliente para facilitar la interacción con las API de datos de Google. Sin embargo, puede usar las herramientas de nivel inferior para trabajar con nuestros servicios. Puede hacerlo con un poco de orientación.

cURL es una aplicación de línea de comandos para realizar solicitudes mediante una variedad de protocolos, incluido HTTP. A menudo, los programadores utilizan cURL, que admite la funcionalidad de HTTP necesaria para interactuar con las API en un nivel bajo.

cURL solo proporciona asistencia para la comunicación HTTP, por lo que el conocimiento del protocolo de datos de Google, el protocolo específico del servicio y el formato de datos XML es un requisito previo para trabajar con la aplicación. En este artículo, se mencionan otras herramientas que facilitan estas tareas.

Este artículo utiliza ejemplos basados en la API de datos de Álbumes web de Picasa. Sin embargo, todos estos ejemplos se pueden aplicar fácilmente a otras API de datos de Google.

Obtén e instala cURL

cURL está generalmente disponible en una instalación predeterminada de muchas plataformas UNIX/Linux. Intenta escribir curl en tu shell favorito para ver si la herramienta está instalada y en tu PATH. Si no tienes instalada la herramienta, visita la página de descargas en el sitio web de cURL para obtener la fuente oficial o un paquete binario aportado por el usuario. Ten en cuenta que la herramienta de línea de comandos usa la biblioteca libcurl, que se puede ofrecer como un paquete de descarga independiente. Por lo tanto, si no compilas desde la fuente, asegúrate de descargar un paquete "binario" en lugar de un paquete "libcurl". Se requieren paquetes habilitados para SSL si deseas usar cURL a fin de adquirir tokens de autenticación o acceder a algunos servicios de datos de Google que requieren usar SSL para las solicitudes.

Autentica en un servicio de datos de Google

Las solicitudes de datos de Google autenticadas se realizan agregando un encabezado HTTP a la solicitud que contiene el token de autenticación ClientLogin (aplicaciones para dispositivos móviles/computadoras de escritorio) o el token de autenticación AuthSub (aplicaciones web). Para realizar pruebas con cURL, ClientLogin es el método más sencillo y se documenta a continuación. Los encabezados de autenticación de AuthSub se pueden usar con cURL, pero el proceso más avanzado de obtener los tokens está fuera del alcance de este artículo.

Usar ClientLogin

ClientLogin está diseñado para aplicaciones instaladas (computadoras de escritorio y celulares). Con este método de autenticación, la aplicación que usa las API de datos de Google maneja directamente el nombre de usuario y la contraseña del usuario.

Una solicitud de autenticación de ClientLogin toma un nombre de usuario, una contraseña y un nombre de servicio como variables de publicación de formulario. Estas variables se pasan como los argumentos Email, Passwd y service, respectivamente. Esta solicitud genera una respuesta con varios tokens, uno de los cuales se puede usar para realizar solicitudes al servicio de datos de Google. Ten en cuenta que los argumentos de datos que se pasan con curl deben estar codificados para URL si contienen caracteres que no son ASCII, que suelen aparecer en los argumentos Email y Passwd. Puedes pedirle a curl que codifique en URL estos argumentos mediante la marca --data-urlencode.

Solicitud de ejemplo:

curl https://www.google.com/accounts/ClientLogin \
--data-urlencode Email=brad.gushue@example.com --data-urlencode Passwd=new+foundland \
-d accountType=GOOGLE \
-d source=Google-cURL-Example \
-d service=lh2

Respuesta de ejemplo:

SID=DQAAAHYBADCv2pSv7nflacDNwz3zEDUGtrSvNVDcpkSfddi77b3U5sEaHmP8YLWhmA36F9rk85mL8J5dqo4apn0T1vKz0fPGI9Xtnuet6cuE2ZzYvrNIwbSC_HjTqF4zudNQnnlDuD2wqZT-g1qXI8KhGAQZV4NexHZoQPlabTsGuRZeIBxj1A
LSID=EUBBBIaBADCl-kNxvRVmcQghpt3cqSMfEooKR9flLOUZqwgP9OrZS83gse-KSdTNeXhxsET7FYenDhceP9lIPOmesH-t9qh-AWUHjjMdZEbUNeF9mWyzln6Z-FajaiG-cVFkqW0ZJ8ZbnCP30xXj6xFK6QxaAcqy_9Pej8jhEnxS9E61ftQGPg
Auth=EUBBIacAAADK-kNxvRVmcQghpt3cqSMfEooLNMflLNIQqwgP9OrZS83gs-KSdTNeXhxsET7FYePWmaD8Vsy1V4LSUGMUP48Je2TO8OcjBj6HgAtPhiZeX-gKDfagZDK44j4n-Tkb44nhOnp2_QPSnBj3Z2vYwOEDjjG3Q53aQVC2132JKOuGh

Consulta la documentación de ClientLogin para obtener la información específica sobre los parámetros utilizados en la solicitud anterior. En este ejemplo, el servicio que usamos es la API de datos de Álbumes web de Picasa. El nombre del servicio (service) es lh2. Puedes encontrar los nombres de otros servicios de datos de Google en la página Preguntas frecuentes sobre las API de datos de Google.

El valor del token Auth en la respuesta anterior es el único valor necesario para la autenticación en los servicios de datos de Google. El valor de este token se forma en una cabecera HTTP que luego se utiliza para cada solicitud a un servicio de datos de Google.

curl --silent --header "Authorization: GoogleLogin auth=EUBBIacAAADK\
-kNxvRVmcQghpt3cqSMfEooLNMflLNIQqwgP9OrZS83gs-KSdTNeXhxs\
ET7FYePWmaD8Vsy1V4LSUGMUP48Je2TO8OcjBj6HgAtPhiZeX-gKDfag\
ZDK44j4n-Tkb44nhOnp2_QPSnBj3Z2vYwOEDjjG3Q53aQVC2132JKOuGh" \
"http://picasaweb.google.com/data/feed/api/user/default"

Nota: El método para escapar los caracteres de salto de línea con barras invertidas ('\') anteriores no funciona en la shell de comando de Windows, por lo que debes ingresar el comando completo en una línea si ejecutas curl en Windows.


Cómo recuperar feeds y entradas

En las API de datos de Google, la recuperación de feeds y de entradas se realiza mediante la ejecución de un GET de HTTP en una URL con un conjunto opcional de parámetros de consulta. Debido a que estamos realizando una solicitud GET, solo el encabezado de autenticación y la URL deben pasarse a curl. El siguiente ejemplo continúa usando la API de datos de Álbumes web de Picasa y se usa para recuperar una lista de álbumes que pertenecen al usuario autenticado. Ten en cuenta que acortamos el token de autenticación a ABCDEFG en este ejemplo, pero el token completo (p.ej., EUBBIacA...32JKOuGh anterior) debe usarse en su lugar.

curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/default"

Esto mostrará un BLOB XML sin formato:

<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:geo='http://www.w3.org/2003/01/geo/wgs84_pos#' xmlns:gml='http://www.opengis.net/gml' xmlns:georss='http://www.georss.org/georss' xmlns:photo='http://www.pheed.com/pheed/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:batch='http://schemas.google.com/gdata/batch' xmlns:gphoto='http://schemas.google.com/photos/2007'><id>http://picasaweb.google.com/data/feed/base/user/brad.gushue</id><updated>2007-09-13T21:30:21.454Z</updated>...</entry></feed>

Existen algunas herramientas adecuadas para aplicar formato a este resultado a fin de que sea más legible, incluido el uso de tidy. La forma más fácil de usar el orden es ordenar la salida del comando curl para que se ordene de la siguiente manera:

curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/default" | tidy -xml -indent -quiet

Esto da como resultado un feed mucho más legible, como el siguiente:

<?xml version='1.0' encoding='utf-8'?>
<feed xmlns='http://www.w3.org/2005/Atom' 
xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' 
xmlns:geo='http://www.w3.org/2003/01/geo/wgs84_pos#' 
xmlns:gml='http://www.opengis.net/gml' 
xmlns:georss='http://www.georss.org/georss' 
xmlns:photo='http://www.pheed.com/pheed/' 
xmlns:media='http://search.yahoo.com/mrss/' 
xmlns:batch='http://schemas.google.com/gdata/batch' 
xmlns:gphoto='http://schemas.google.com/photos/2007'>
  <id>http://picasaweb.google.com/data/feed/api/user/brad.gushue</id>
  <updated>2007-09-13T21:47:07.337Z</updated>
  <category scheme='http://schemas.google.com/g/2005#kind'
  term='http://schemas.google.com/photos/2007#user' />
  <title type='text'>brad.gushue</title>
  <subtitle type='text'></subtitle>
  <icon>
  http://lh6.google.com/brad.gushue/AAAAj9zigp4/AAAAAAAAAAA/RiMAlXV4MFI/s64-c/brad.gushue</icon>
  <link rel='http://schemas.google.com/g/2005#feed'
  type='application/atom+xml'
  href='http://picasaweb.google.com/data/feed/api/user/brad.gushue' />
  <link rel='alternate' type='text/html'
  href='http://picasaweb.google.com/brad.gushue' />
  <link rel='self' type='application/atom+xml'
  href='http://picasaweb.google.com/data/feed/api/user/brad.gushue?start-index=1&max-results=1000' />
  <author>
    <name>Brad</name>
    <uri>http://picasaweb.google.com/brad.gushue</uri>
  </author>
  <generator version='1.00' uri='http://picasaweb.google.com/'>
  Picasaweb</generator>
  <openSearch:totalResults>8</openSearch:totalResults>
  <openSearch:startIndex>1</openSearch:startIndex>
  <openSearch:itemsPerPage>1000</openSearch:itemsPerPage>
  <gphoto:user>brad.gushue</gphoto:user>
  <gphoto:nickname>Brad</gphoto:nickname>
  <gphoto:thumbnail>
  http://lh6.google.com/brad.gushue/AAAAj9zigp4/AAAAAAAAAAA/RiMAlXV4MFI/s64-c/brad.gushue</gphoto:thumbnail>
  <entry>
    <id>
    http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593</id>
    <published>2007-05-23T04:55:52.000Z</published>
    <updated>2007-05-23T04:55:52.000Z</updated>
    <category scheme='http://schemas.google.com/g/2005#kind'
    term='http://schemas.google.com/photos/2007#album' />
    <title type='text'>Trip To Italy</title>
    <summary type='text'>This was the recent trip I took to
    Italy.</summary>
    <rights type='text'>public</rights>
    <link rel='http://schemas.google.com/g/2005#feed'
    type='application/atom+xml'
    href='http://picasaweb.google.com/data/feed/api/user/brad.gushue/albumid/9810315389720904593' />
    <link rel='alternate' type='text/html'
    href='http://picasaweb.google.com/brad.gushue/TripToItalyV2' />
    <link rel='self' type='application/atom+xml'
    href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593' />
    <link rel='edit' type='application/atom+xml'
    href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456' />
    <author>
      <name>Brad</name>
      <uri>http://picasaweb.google.com/brad.gushue</uri>
    </author>
    <gphoto:id>9810315389720904593</gphoto:id>
    <media:group>
    ...
    </media:group>
  </entry>
  <entry>
  ...
  </entry>

</feed>

Las entradas individuales se pueden recuperar de la misma manera si se proporciona la URL de la entrada, en lugar de la URL de un feed.

Actualizando entradas

Para actualizar las entradas en las API de datos de Google, se realiza una HTTP PUT en la URL de edición con una nueva copia del archivo XML de la entrada en el cuerpo de la solicitud.

  1. Recupera la entrada con el valor de URL atom:link/@rel='self'
  2. Actualice la entrada de forma local para realizar los cambios necesarios
  3. PUT la entrada de nuevo al servidor, con el valor de URL atom:link/@rel='edit'

1. Recupera la entrada

La entrada se puede recuperar usando una de las dos URL en negrita en el bloque de feed anterior. La URL necesaria es el valor de href para el elemento link con un rel='self'.

curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593"

2. Actualiza la entrada de forma local

Después de recuperar la entrada, esta debe actualizarse con una aplicación o un editor de texto local para realizar los cambios necesarios en la entrada. En el comando anterior para recuperar una entrada, no canalizamos los resultados a tidy, como lo hicimos en los ejemplos anteriores. El resultado es un XML que representa los mismos datos, pero que tiene un formato diferente al de la versión canalizada a tidy. Para editar una entrada manualmente, usar tidy a menudo puede facilitar el trabajo con el XML.

Nota: Recuerda incluir todas las definiciones de espacio de nombres XML que se usan como atributos de atom:entry cuando publiques la entrada nueva. Omitirlos hará que se analicen las excepciones. Además, tidy reemplazará los espacios entre las definiciones de espacios de nombres con caracteres de saltos de línea. Si bien este valor es un formato XML válido, los servicios de datos de Google no lo aceptan en este momento. Si usas tidy, asegúrate de agregar espacios adicionales entre estos atributos en el elemento entry.

3. Actualiza la entrada en el servidor

Con la URL edit, debes PUT una copia de la entrada al servicio mediante cURL. Se debe agregar un encabezado que indique el tipo de contenido que se envía al servidor. En el siguiente fragmento, se supone que el archivo con la entrada actualizada se guarda en updated_entry.xml.

curl --silent --data-binary "@updated_entry.xml" --request PUT --header "Content-Type: application/atom+xml" --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456"

Crea entradas

Las entradas en las API de datos de Google se crean mediante una HTTP POST en la URL de la entrada con una entrada nueva. El servidor asigna el atom:id, por lo que no es necesario incluirlo en entradas nuevas. La manera más fácil de crear una nueva entrada es tomar una anterior y modificarla. En el siguiente ejemplo, se hace justamente eso.

  1. Recupera una entrada de una plantilla con atom:link/@rel='self'.
  2. Modifique la entrada de la plantilla localmente para quitar la información innecesaria y realizar los cambios necesarios.
  3. Usa POST para ingresar la entrada al servidor mediante la URL post del feed. Puedes encontrarlo en el feed recuperado como el valor href para el elemento link con un rel='http://schemas.google.com/g/2005#post', o en la documentación del servicio en http://code.google.com.

1. Recuperar una entrada de plantilla

Se puede recuperar una sola entrada con el valor href de un elemento link con un rel='self' de la misma manera que se recuperó una entrada antes de actualizarla en el ejemplo anterior.

curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593" | tidy -xml -indent -quiet > template_entry.xml

Después de usar tidy, la respuesta se verá de la siguiente manera:

<entry xmlns='http://www.w3.org/2005/Atom' 
xmlns:exif='http://schemas.google.com/photos/exif/2007'
xmlns:geo='http://www.w3.org/2003/01/geo/wgs84_pos#'
xmlns:gml='http://www.opengis.net/gml'
xmlns:georss='http://www.georss.org/georss'
xmlns:photo='http://www.pheed.com/pheed/'
xmlns:media='http://search.yahoo.com/mrss/'
xmlns:batch='http://schemas.google.com/gdata/batch'
xmlns:gphoto='http://schemas.google.com/photos/2007'>
  <id>
  http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389741123981</id>
  <published>2007-05-23T04:55:52.000Z</published>
  <updated>2007-05-23T04:55:52.000Z</updated>
  <category scheme='http://schemas.google.com/g/2005#kind'
  term='http://schemas.google.com/photos/2007#album' />
  <title type='text'>Trip To Italy</title>
  <summary type='text'>This was the recent trip I took to
  Italy.</summary>
  <rights type='text'>public</rights>
  <link rel='http://schemas.google.com/g/2005#feed'
  type='application/atom+xml'
  href='http://picasaweb.google.com/data/feed/api/user/brad.gushue/albumid/9810315389741123981' />
  <link rel='alternate' type='text/html'
  href='http://picasaweb.google.com/brad.gushue/TripToItaly' />
  <link rel='self' type='application/atom+xml'
  href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389741123981' />
  <link rel='edit' type='application/atom+xml'
  href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389741123981/1179896152905401' />
  <author>
    <name>Brad</name>
    <uri>http://picasaweb.google.com/brad.gushue</uri>
  </author>
  <gphoto:id>9810315389741123981</gphoto:id>
  <gphoto:name>TripToItaly</gphoto:name>
  <gphoto:location></gphoto:location>
  <gphoto:access>public</gphoto:access>
  <gphoto:timestamp>1179896152000</gphoto:timestamp>
  <gphoto:numphotos>0</gphoto:numphotos>
  <gphoto:numphotosremaining>500</gphoto:numphotosremaining>
  <gphoto:bytesUsed>0</gphoto:bytesUsed>
  <gphoto:user>brad.gushue</gphoto:user>
  <gphoto:nickname>Brad</gphoto:nickname>
  <gphoto:commentingEnabled>true</gphoto:commentingEnabled>
  <gphoto:commentCount>0</gphoto:commentCount>
  <media:group>
    <media:title type='plain'>Trip To Italy</media:title>
    <media:description type='plain'>This was the recent trip I took
    to Italy.</media:description>
    <media:keywords></media:keywords>
    <media:content url='http://lh5.google.com/brad.gushue/ADFUFKqeA5E/AAAAAAAAABc/V6Sga_Z03WU/TripToItaly.jpg'
    type='image/jpeg' medium='image' />
    <media:thumbnail url='http://lh5.google.com/brad.gushue/ADFUFKqeA5E/AAAAAAAAABc/V6Sga_Z03WU/s160-c/TripToItaly.jpg'
    height='160' width='160' />
    <media:credit>Brad</media:credit>
  </media:group>

</entry>

2. Modifica la entrada de la plantilla

Queremos crear un álbum que se llame "Curling in Canada" (Curling in Canada) con fotos de nuestro partido reciente de curling. Los datos de Google te permiten descartar elementos Atom para los que el servidor proporciona valores. Por lo tanto, para crear esta simple entrada de plantilla, quitaremos atom:id, atom:published, atom:updated, atom:author y los diversos elementos atom:link del feed. Esto nos dará una entrada de plantilla simple. Luego, la entrada debe modificarse para representar el álbum nuevo que crearemos:

<entry xmlns='http://www.w3.org/2005/Atom' 
xmlns:gphoto='http://schemas.google.com/photos/2007'>
  <category scheme='http://schemas.google.com/g/2005#kind'
  term='http://schemas.google.com/photos/2007#album' />
  <title type='text'>Curling in Canada</title>
  <summary type='text'>Pictures of all my curling matches in Canada.</summary>
  <gphoto:location>Canada</gphoto:location>
  <gphoto:access>public</gphoto:access>
  <gphoto:commentingEnabled>true</gphoto:commentingEnabled>

</entry>

Nota: Recuerda incluir todas las definiciones de espacio de nombres XML que se usan como atributos de atom:entry cuando publiques la entrada nueva. Omitirlos hará que se analicen las excepciones. Además, tidy reemplazará los espacios entre las definiciones de espacios de nombres y los reemplazará por caracteres de saltos de línea. Si bien este valor es un formato XML válido, los servicios de datos de Google no lo aceptan en este momento. Si usas tidy, asegúrate de agregar espacios adicionales entre estos atributos en el elemento entry.

3. Publica la entrada nueva en el servidor

El comando curl para publicar una entrada nueva en el servidor es muy similar a actualizar una entrada existente, excepto que la URL es diferente:

curl --silent --request POST --data-binary "@template_entry.xml" --header "Content-Type: application/atom+xml" --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/brad.gushue" | tidy -xml -indent -quiet

Si la publicación se realizó correctamente, el resultado XML resultante será una copia de la entrada recién creada. Esta entrada incluirá los elementos que el servidor generó en el momento de la creación, incluidos los valores para los elementos atom:id, atom:published, atom:updated y atom:link. Los valores link resultantes se pueden usar para editar o borrar la entrada, siempre que no se realicen cambios adicionales mientras tanto.

Borra entradas

Borrar entradas es muy similar a actualizar entradas, excepto que se usa un método HTTP DELETE en lugar de un HTTP PUT y no se necesitan datos para enviar. Al igual que la solicitud de actualización, la URL edit se usa como destino de la solicitud HTTP.

curl --silent --request DELETE --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456"

Sube objetos multimedia

Una función importante de la API de datos de Álbumes web de Picasa y de la lista de documentos es la capacidad de subir objetos binarios. cURL puede lograr que se suban fácilmente datos binarios y un encabezado de slug. Sin embargo, la API de datos de la lista de documentos actualmente requiere la publicación del XML junto con los datos binarios como un mensaje multiparte MIME. La creación de un mensaje multiparte está fuera del alcance de este artículo.

El siguiente ejemplo muestra cómo subir una imagen llamada sweeping_the_rock.png a un álbum web de Picasa con el título "Barrer la roca":

curl --silent --request POST --data-binary "@sweeping_the_rock.png" --header "Slug: Sweeping the rock" --header "Content-Type: image/png" --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/brad.gushue/albumid/5113621341847124417" | tidy -xml -indent -quiet

Otras herramientas de línea de comandos

Algunos desarrolladores prefieren aprender o depurar mediante otras herramientas de línea de comandos.

Entre las herramientas populares, se incluyen las siguientes:

  • telnet y openssl se usan para realizar conexiones de socket sin procesar (texto sin formato y basado en ssl, respectivamente) a servidores web, y se pueden usar para interactuar con los servicios de datos de Google. Ten en cuenta que no todos los servicios de datos de Google admiten SSL. A continuación, se muestra cómo abrir las conexiones:
    • telnet picasaweb.google.com 80 (API de datos de Álbumes web de Picasa)
    • openssl s_client -connect www.google.com:443 (API de datos del Calendario de Google y otros servicios en www.google.com)
    Una vez que se realiza la conexión, se debe enviar una solicitud HTTP sin procesar. Esta solicitud incluye el verbo HTTP, la ruta de acceso relativa, la versión, todos los encabezados y el cuerpo de la solicitud. A continuación, se muestra un ejemplo:
    POST /data/feed/api/user/brad.gushue HTTP/1.1
    Host: picasaweb.google.com
    Authorization: GoogleLogin auth=ABCDEFG
    Content-Length: 493
    
    <entry xmlns='http://www.w3.org/2005/Atom' 
    xmlns:gphoto='http://schemas.google.com/photos/2007'>
      <category scheme='http://schemas.google.com/g/2005#kind'
      term='http://schemas.google.com/photos/2007#album' />
      <title type='text'>Curling in Canada</title>
      <summary type='text'>Pictures of all my curling matches in Canada.</summary>
      <gphoto:location>Canada</gphoto:location>
      <gphoto:access>public</gphoto:access>
      <gphoto:commentingEnabled>true</gphoto:commentingEnabled>
    
    </entry>
    
    Cuando envíes datos HTTP sin procesar, ten en cuenta que las operaciones POST y PUT requerirán el cálculo del valor de un encabezado Content-Length. Puedes usar la herramienta wc de UNIX para calcular este valor. Coloca todo el contenido del cuerpo HTTP en un archivo de texto, como template_entry.xml (ejemplo anterior) y ejecuta wc -c template_entry.xml. A menudo, es difícil depurar si usas un valor incorrecto para el encabezado Content-Length por accidente.
  • Por lo general, wget se usa para descargar datos de un servidor web en un archivo local. Sin embargo, wget tiene muchas opciones que permiten realizar los diferentes tipos de solicitudes necesarias para interactuar con los servicios de datos de Google. Este es un ejemplo de cómo usar wget para POST una entrada de álbum nueva de Álbumes web de Picasa:
    wget --post-file template_entry.xml --header "Authorization: GoogleLogin auth=ABCDEFG" --header "Content-Type: application/atom+xml" "http://picasaweb.google.com/data/feed/api/user/brad.gushue"
    
  • xsltproc es una herramienta para aplicar transformaciones XSL (XSLT) a documentos XML. Se puede usar para extraer fácilmente los bits de datos que desees de una entrada XML o de un feed que muestran las API de datos de Google, o para generar entradas nuevas o actualizadas.

Conclusión

Como has visto, cURL y muchas otras herramientas de línea de comandos se pueden usar para interactuar fácilmente con los servicios de datos de Google usando XML y HTTP sin procesar. Únete a nosotros en los foros específicos de la API si tienes dudas sobre cómo utilizar estas herramientas con tu API de datos de Google favorita.