Utiliser cURL pour interagir avec les services de données Google

Avertissement : Cette page concerne les anciennes API Google, les API Google Data. Elle ne concerne que les API répertoriées dans l'annuaire des API Google Data, dont la plupart ont été remplacées par de nouvelles API. Pour en savoir plus sur une nouvelle API spécifique, consultez sa documentation. Pour en savoir plus sur l'autorisation des requêtes avec une API plus récente, consultez Authentification et autorisation des comptes Google.

Ryan Boyd, équipe Google Data APIs
Septembre 2007

Introduction

Les API Google Data utilisent des flux Atom et des entrées (XML) comme un format de données, et HTTP comme un protocole de transmission de données, ce qui étend le protocole de publication Atom. Nous publions un certain nombre de bibliothèques clientes pour faciliter les interactions avec les API Google Data. Vous pouvez toutefois utiliser des outils de niveau inférieur pour travailler avec nos services. Pour ce faire, il vous suffit de suivre quelques conseils.

cURL est une application de ligne de commande permettant d'effectuer des requêtes à l'aide de divers protocoles, y compris HTTP. Elle est souvent utilisée par les développeurs pour tester les services de données Google, car elle prend en charge les fonctionnalités HTTP requises pour interagir à un niveau inférieur avec les API.

cURL ne prend en charge que les communications HTTP. Par conséquent, la connaissance du protocole de données Google, du protocole spécifique au service et du format de données XML utilisé est une condition préalable à l'utilisation de l'application. D'autres outils sont mentionnés dans cet article pour vous faciliter la tâche.

Cet article utilise des exemples basés sur l'API de données de Picasa Albums Web. Cependant, tous ces exemples peuvent être facilement appliqués à d'autres API Google Data.

Obtenir et installer cURL

cURL est généralement disponible sur une installation par défaut de nombreuses plates-formes UNIX/Linux. Saisissez curl dans votre interface système préférée pour voir si l'outil est installé et s'il figure dans votre PATH. Si vous n'avez pas installé l'outil, consultez la page de téléchargement sur le site Web cURL pour obtenir la source officielle ou un package binaire envoyé par l'utilisateur. Notez que l'outil de ligne de commande utilise la bibliothèque libcurl, qui peut être proposée en tant que package de téléchargement distinct. Par conséquent, si vous ne compilerez pas à partir de la source, veillez à télécharger un package "binaire" au lieu d'un package "libcurl". Les packages SSL sont requis si vous voulez utiliser cURL pour obtenir des jetons d'authentification ou pour accéder à certains services de données Google qui requièrent SSL pour les requêtes.

S'authentifier auprès d'un service de données Google

Les requêtes de données Google authentifiées sont effectuées en ajoutant un en-tête HTTP à la requête contenant un jeton d'authentification ClientLogin (applications de bureau/mobile) ou AuthSub (applications Web). Pour les tests à l'aide de cURL, ClientLogin est la méthode la plus simple. Elle est décrite ci-dessous. Les en-têtes d'authentification AuthSub peuvent être utilisés avec cURL, mais le processus plus avancé d'obtention des jetons n'est pas abordé dans cet article.

Utiliser ClientLogin

ClientLogin est destiné aux applications installées (ordinateur/mobile). Avec cette méthode d'authentification, l'application qui utilise les API Google Data gère directement le nom d'utilisateur et le mot de passe de l'utilisateur.

Une requête d'authentification pour ClientLogin prend un nom d'utilisateur, un mot de passe et un nom de service comme variables de post de formulaire. Ces variables sont transmises en tant qu'arguments Email, Passwd et service, respectivement. Cette requête génère une réponse avec plusieurs jetons, dont l'un peut être utilisé pour envoyer des requêtes au service Google Data. Notez que les arguments de données transmis avec curl doivent être encodés en URL s'ils contiennent des caractères non-ASCII, qui apparaissent souvent dans les arguments Email et Passwd. Vous pouvez demander à curl d'encoder ces arguments en URL à l'aide de l'option --data-urlencode.

Exemple de requête:

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

Exemple de réponse:

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

Veuillez consulter la documentation ClientLogin pour obtenir des informations spécifiques sur les paramètres utilisés dans la requête ci-dessus. Dans cet exemple, nous utilisons le service API Data de Picasa Albums Web. Le nom du service (service) est lh2. Les noms des autres services Google Data sont disponibles sur la page Questions fréquentes sur les API Google Data.

La valeur du jeton Auth dans la réponse ci-dessus est la seule valeur requise pour l'authentification auprès des services Google Data. La valeur de ce jeton est constituée d'un en-tête HTTP qui est ensuite utilisé pour chaque requête adressée à un service Google Data.

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

Remarque : La méthode permettant d'échapper les caractères de retour à la ligne avec des barres obliques inverses ("\'") ci-dessus ne fonctionne pas dans l'interface système de commande Windows. Vous devez donc saisir l'intégralité de la commande sur une ligne si vous exécutez curl sous Windows.


Récupérer les flux et les entrées

Dans les API Google Data, la récupération des flux et des entrées s'effectue via une requête HTTP GET sur une URL, avec un ensemble facultatif de paramètres de requête. Comme nous exécutons une requête GET, seuls l'en-tête d'authentification et l'URL doivent être transmis à curl. L'exemple ci-dessous continuera d'utiliser l'API de données Picasa Albums Web et permet de récupérer la liste des albums appartenant à l'utilisateur authentifié. Notez que nous avons raccourci le jeton d'authentification à ABCDEFG dans cet exemple, mais que vous devez utiliser le jeton complet (par exemple, EUBBIacA... 32JKOuGh à partir de ci-dessus).

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

Cela renverra un blob XML non formaté:

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

Il existe des outils pratiques pour formater cette sortie de sorte qu'elle soit plus lisible, y compris tidy. Le moyen le plus simple d'utiliser NETTEX est de placer la sortie de la commande curl dans l'ordre suivant:

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

Ainsi, le flux est beaucoup plus lisible, comme suit:

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

Vous pouvez récupérer les entrées de la même manière en fournissant l'URL de l'entrée et non une URL de flux.

Mise à jour des entrées

Les entrées dans les API Google Data sont mises à jour en envoyant HTTP PUT à l'URL de modification avec une nouvelle copie du code XML de l'entrée dans le corps de la requête.

  1. Récupérez l'entrée à l'aide de la valeur de l'URL atom:link/@rel='self'.
  2. Mettez à jour l'entrée localement pour effectuer les modifications nécessaires.
  3. PUT renvoie l'entrée au serveur en utilisant la valeur de l'URL atom:link/@rel='edit'

1. Récupérer l'entrée

Vous pouvez récupérer l'entrée en utilisant l'une des deux URL en gras ci-dessus dans le bloc de flux. L'URL requise est la valeur href de l'élément link avec un rel='self'.

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

2. Mettre à jour l'entrée localement

Une fois l'entrée récupérée, elle doit être mise à jour à l'aide d'un éditeur de texte ou d'une application local pour y apporter les modifications nécessaires. Dans la commande ci-dessus pour récupérer une entrée, nous n'avons pas transmis les résultats à tidy, comme nous l'avons fait dans les exemples précédents. Le résultat est un fichier XML qui représente les mêmes données, mais dont la mise en forme est différente de celle de la version redirigeant vers tidy. Pour modifier manuellement une entrée, l'utilisation de tidy peut souvent faciliter l'utilisation du code XML.

Remarque: N'oubliez pas d'inclure toutes les définitions d'espaces de noms XML utilisées en tant qu'attributs de atom:entry lorsque vous publiez votre nouvelle entrée. Si vous ne les renseignez pas, les exceptions d'analyse seront définies. De plus, tidy remplacera les espaces entre les définitions d'espace de noms par des caractères de nouvelle ligne. Bien qu'il s'agisse d'un fichier XML valide, les services de données Google ne l'acceptent pas pour le moment. Si vous utilisez tidy, veillez à ajouter des espaces supplémentaires entre ces attributs dans l'élément entry.

3. Mettre à jour l'entrée sur le serveur

Avec l'URL edit, vous devez PUT une copie de l'entrée du service à l'aide de cURL. Un en-tête indiquant le type de contenu envoyé au serveur doit être ajouté. L'extrait suivant suppose que le fichier avec l'entrée mise à jour est enregistré dans 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"

Créer des entrées

Les entrées dans les API Google Data sont créées en envoyant un HTTP POST à l'URL du post avec une nouvelle entrée. atom:id est attribué par le serveur. Il n'est donc pas nécessaire de l'inclure dans de nouvelles entrées. Le moyen le plus simple de créer une entrée est de prendre une ancienne entrée et de la modifier. L'exemple suivant permet de faire cela.

  1. Récupérez une entrée de modèle à l'aide de atom:link/@rel='self'.
  2. Modifiez l'entrée du modèle localement pour supprimer les informations inutiles et effectuer les changements nécessaires.
  3. POST renvoie l'entrée au serveur en utilisant l'URL post pour le flux. Vous pouvez trouver cette valeur dans le flux récupéré en tant que valeur href pour l'élément link avec rel='http://schemas.google.com/g/2005#post', ou dans la documentation du service sur http://code.google.com.

1. Récupérer une entrée de modèle

Une seule entrée peut être récupérée à l'aide de la valeur href d'un élément link avec un rel='self' de la même manière qu'une entrée a été récupérée avant la mise à jour dans l'exemple ci-dessus.

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

Après avoir utilisé tidy, la réponse ressemblera à ceci:

<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. Modifier l'entrée du modèle

Nous voulons créer un album intitulé "Curling in Canada" (Le curling au Canada) avec des photos de notre récent match de curling. Google Data vous permet de supprimer les éléments Atom pour lesquels le serveur fournit des valeurs. Par conséquent, pour créer cette entrée de modèle simple, nous allons supprimer les éléments atom:id, atom:published, atom:updated, atom:author et atom:link des différents éléments du flux. Nous obtenons ainsi une entrée de modèle réduite. L'entrée doit alors être modifiée pour représenter le nouvel album que nous créons:

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

Remarque: N'oubliez pas d'inclure toutes les définitions d'espaces de noms XML utilisées en tant qu'attributs de atom:entry lorsque vous publiez votre nouvelle entrée. Si vous ne les renseignez pas, les exceptions d'analyse seront définies. De plus, tidy remplacera les espaces entre les définitions d'espace de noms et les remplacera par des caractères de nouvelle ligne. Bien qu'il s'agisse d'un fichier XML valide, les services de données Google ne l'acceptent pas pour le moment. Si vous utilisez tidy, veillez à ajouter des espaces supplémentaires entre ces attributs dans l'élément entry.

3. Publier la nouvelle entrée sur le serveur

La commande curl permettant de publier une nouvelle entrée sur le serveur est très semblable à la mise à jour d'une entrée existante, à ceci près que l'URL est différente:

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 l'article a abouti, le résultat XML généré est une copie de l'entrée créée. Cette entrée inclut les éléments générés par le serveur au moment de la création, y compris les valeurs des éléments atom:id, atom:published, atom:updated et atom:link. Les valeurs link résultantes peuvent être utilisées pour modifier ou supprimer l'entrée, à condition qu'aucune autre modification ne soit effectuée dans l'intervalle.

Suppression des entrées

La suppression des entrées est très semblable à la mise à jour des entrées, sauf qu'une méthode HTTP DELETE est utilisée à la place d'un HTTP PUT et qu'aucune donnée n'est requise pour l'envoi. De même que la requête de mise à jour, l'URL edit est utilisée comme cible de la requête HTTP.

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

Importer des objets multimédias

L'API de données Picasa Albums Web et l'API de données de la liste des documents permettent de transférer des objets binaires. cURL peut facilement transférer des données binaires et un en-tête de slug. Toutefois, l'API de données de la liste des documents nécessite actuellement la publication du code XML avec les données binaires en tant que message MIME comportant plusieurs parties. La formation du message en plusieurs parties n'est pas prévue dans cet article.

L'exemple ci-dessous montre comment transférer une image appelée sweeping_the_rock.png vers un album Web Picasa intitulé "Sweeping the rock" :

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

Autres outils de ligne de commande

Certains développeurs préfèrent apprendre ou déboguer à l'aide d'autres outils de ligne de commande.

Voici quelques outils populaires:

  • telnet, openssl sont utilisés pour établir des connexions socket brutes (respectivement en texte brut et ssl, respectivement) avec les serveurs Web et pour interagir avec les services Google Data. Notez que tous les services Google Data ne sont pas compatibles avec le protocole SSL. Voici comment ouvrir les connexions :
    • telnet picasaweb.google.com 80 (API de données Picasa Albums Web)
    • openssl s_client -connect www.google.com:443 (API de données Google Agenda et autres services sur www.google.com)
    Une fois la connexion établie, une requête HTTP brute doit être envoyée. Cette requête inclut le verbe HTTP, le chemin d'accès relatif, la version, tous les en-têtes et le corps de la requête. Voici un exemple :
    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>
    
    Lors de l'envoi de données HTTP brutes, sachez que les opérations POST et PUT nécessitent de calculer la valeur d'un en-tête Content-Length. Vous pouvez utiliser l'outil UNIX wc pour calculer cette valeur. Placez l'intégralité du contenu du corps HTTP dans un fichier texte tel que template_entry.xml (exemple utilisé ci-dessus), puis exécutez wc -c template_entry.xml. Il est souvent difficile de déboguer la requête si vous utilisez accidentellement une valeur incorrecte pour l'en-tête Content-Length.
  • wget est généralement utilisé pour télécharger les données d'un serveur Web dans un fichier local. Cependant, wget propose de nombreuses options lui permettant d'effectuer tous les différents types de requêtes nécessaires pour interagir avec les services de données Google. Voici un exemple d'utilisation de wget pour POST une nouvelle entrée d'album dans Picasa Albums Web :
    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 est un outil permettant d'appliquer des transformations XSL (XSLT) à des documents XML. Il permet d'extraire facilement les données souhaitées à partir d'une entrée ou d'un flux XML renvoyé par les API Google Data, ou de générer de nouvelles entrées ou des entrées mises à jour.

Conclusion

Comme vous avez pu le constater, vous pouvez utiliser cURL et plusieurs autres outils de ligne de commande pour interagir facilement avec les services Google Data à l'aide de fichiers XML et HTTP bruts. Rejoignez-nous sur les forums spécifiques à l'API si vous avez des questions sur l'utilisation de ces outils avec votre API de données Google préférée.