Utilizzo di cURL per interagire con i servizi di dati Google

Avviso: questa pagina riguarda le API precedenti di Google, le API Google Data; è pertinente solo alle API elencate nella directory delle API Google Data, molte delle quali sono state sostituite da API più recenti. Per informazioni su una nuova API specifica, consulta la relativa documentazione. Per informazioni sull'autorizzazione delle richieste con un'API più recente, vedi Autenticazione e autorizzazione degli Account Google.

Ryan Boyd, team delle API di Google Data
Settembre 2007

Introduzione

Le API Google Data utilizzano feed ed entry Atom (XML) come formato dei dati e HTTP come protocollo per la trasmissione dei dati, estendendo l'Atom Publishing Protocol. Pubblichiamo una serie di librerie client per semplificare l'interazione con le API di Google Data. Tuttavia, puoi sempre utilizzare strumenti di livello inferiore per interagire con i nostri servizi ed è piuttosto facile farlo con un po' di guida.

cURL è un'applicazione a riga di comando per eseguire richieste utilizzando una serie di protocolli, incluso HTTP. cURL viene spesso utilizzato dagli sviluppatori per testare i servizi Google Data, in quanto supporta la funzionalità HTTP necessaria per interagire con le API a un livello basso.

cURL fornisce solo il supporto per l'esecuzione della comunicazione HTTP, pertanto la conoscenza del protocollo Google Data, del protocollo specifico del servizio e del formato dei dati XML utilizzato è un prerequisito per l'utilizzo dell'applicazione. In questo articolo vengono menzionati altri strumenti per semplificare queste attività.

Questo articolo utilizza esempi basati sull'API Picasa Web Albums Data. Tuttavia, tutti questi esempi possono essere facilmente applicati ad altre API Google Data.

Ottenere e installare cURL

cURL è comunemente disponibile in un'installazione predefinita di molte piattaforme UNIX/Linux. Prova a digitare curl nella tua shell preferita per verificare se lo strumento è installato e si trova in PATH. Se non hai installato lo strumento, visita la pagina di download sul sito web cURL per ottenere l'origine ufficiale o un pacchetto binario fornito dagli utenti. Tieni presente che lo strumento a riga di comando utilizza la libreria libcurl, che potrebbe essere offerta come pacchetto di download separato, quindi, se non esegui la compilazione dal codice sorgente, assicurati di scaricare un pacchetto "binario" anziché un pacchetto "libcurl". I pacchetti abilitati per SSL sono necessari se vuoi utilizzare cURL per acquisire token di autenticazione o per accedere ad alcuni servizi Google Data che richiedono l'utilizzo di SSL per le richieste.

Autenticazione a un servizio dati Google

Le richieste di dati Google autenticate vengono eseguite aggiungendo un'intestazione HTTP alla richiesta che contiene un token di autenticazione ClientLogin (app per computer/dispositivi mobili) o AuthSub (app web). Ai fini del test utilizzando cURL, ClientLogin è il metodo più semplice ed è documentato di seguito. Le intestazioni di autenticazione AuthSub potrebbero essere utilizzate con cURL, ma la procedura più avanzata di ottenimento dei token non rientra nell'ambito di questo articolo.

Utilizzo di ClientLogin

ClientLogin è destinato alle applicazioni installate (desktop/mobile). Con questo metodo di autenticazione, l'applicazione che utilizza le API Google Data gestisce direttamente il nome utente e la password dell'utente.

Una richiesta di autenticazione per ClientLogin accetta un nome utente, una password e un nome di servizio come variabili di post del modulo. Queste variabili vengono passate rispettivamente come argomenti Email, Passwd e service. Questa richiesta genera una risposta con diversi token, uno dei quali può essere utilizzato per effettuare richieste al servizio Google Data. Tieni presente che gli argomenti dei dati passati con curl devono essere codificati come URL se contengono caratteri non ASCII, che spesso compaiono negli argomenti Email e Passwd. Puoi chiedere a curl di codificare gli URL di questi argomenti utilizzando il flag --data-urlencode.

Esempio di richiesta:

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

Esempio di risposta:

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

Per informazioni specifiche sui parametri utilizzati nella richiesta precedente, consulta la documentazione di ClientLogin. In questo esempio, il servizio che utilizziamo è l'API Picasa Web Albums Data. Il nome del servizio (service) è lh2. I nomi dei servizi per altri servizi Google Data sono disponibili nella pagina Domande frequenti sulle API Google Data.

Il valore del token Auth nella risposta precedente è l'unico valore necessario per l'autenticazione ai servizi Google Data. Il valore di questo token viene inserito in un'intestazione HTTP, che viene poi utilizzata per ogni richiesta a un servizio 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"

Nota: il metodo di escape dei caratteri di nuova riga con i caratteri barra rovesciata ("\") riportato sopra non funziona nella shell dei comandi di Windows, quindi devi inserire l'intero comando su una riga se esegui curl su Windows.


Recupero di feed e voci

Nelle API Google Data, il recupero di feed e voci viene eseguito tramite un'operazione HTTP GET su un URL, con un insieme facoltativo di parametri di query. Poiché stiamo eseguendo una richiesta GET, solo l'intestazione di autenticazione e l'URL devono essere passati a curl. L'esempio riportato di seguito continuerà a utilizzare l'API Picasa Web Albums Data e viene utilizzato per recuperare un elenco di album di proprietà dell'utente autenticato. Tieni presente che in questo esempio abbiamo abbreviato il token di autenticazione a ABCDEFG, ma al suo posto deve essere utilizzato il token completo (ad es. EUBBIacA...32JKOuGh riportato sopra).

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

Verrà restituito un blob XML non formattato:

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

Esistono alcuni strumenti validi per formattare questo output in modo da renderlo più leggibile, tra cui tidy. Il modo più semplice per utilizzare tidy è reindirizzare l'output del comando curl a tidy come segue:

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

Il risultato è un feed molto più leggibile, come il seguente:

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

Le singole voci possono essere recuperate allo stesso modo fornendo l'URL della voce, anziché un URL feed.

Aggiornamento delle voci

Le voci nelle API Google Data vengono aggiornate eseguendo un'operazione HTTP PUT sull'URL di modifica con una nuova copia dell'XML della voce nel corpo della richiesta.

  1. Recupera la voce utilizzando il valore dell'URL atom:link/@rel='self'
  2. Aggiorna la voce localmente per apportare le modifiche necessarie.
  3. PUT la voce al server, utilizzando il valore dell'URL atom:link/@rel='edit'

1. Recupero della voce

La voce può essere recuperata utilizzando uno dei due URL in grassetto nel blocco del feed riportato sopra. L'URL necessario è il valore href per l'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. Aggiornamento della voce in locale

Dopo aver recuperato la voce, è necessario aggiornarla utilizzando un editor di testo o un'applicazione locale per apportare le modifiche necessarie. Nel comando riportato sopra per recuperare una voce, non abbiamo reindirizzato i risultati a tidy come negli esempi precedenti. Il risultato è un file XML che rappresenta gli stessi dati, ma ha una formattazione diversa rispetto alla versione inviata a tidy. Ai fini della modifica manuale di una voce, l'utilizzo di tidy può spesso semplificare l'utilizzo dell'XML.

Nota: quando pubblichi la nuova voce, ricordati di includere tutte le definizioni dello spazio dei nomi XML utilizzate come attributi per atom:entry. Se ometti questi campi, si verificheranno eccezioni di analisi. Inoltre, tidy sostituirà gli spazi tra le definizioni dello spazio dei nomi con caratteri di nuova riga. Sebbene questo sia un XML valido, al momento i servizi Google Data non lo accettano. Se utilizzi tidy, assicurati di aggiungere spazi aggiuntivi tra questi attributi nell'elemento entry.

3. Aggiornamento della voce sul server

Utilizzando l'URL edit, devi PUT una copia della voce al servizio utilizzando cURL. È necessario aggiungere un'intestazione per indicare il tipo di contenuti inviati al server. Il seguente snippet presuppone che il file con la voce aggiornata sia salvato in 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"

Creazione di voci

Le voci nelle API di dati di Google vengono create eseguendo un HTTP POST all'URL del post con una nuova voce. L'atom:id viene assegnato dal server, pertanto non è necessario includerlo nelle nuove voci. Il modo più semplice per creare una nuova voce è prendere una voce precedente e modificarla. L'esempio seguente fa proprio questo.

  1. Recuperare una voce del modello utilizzando atom:link/@rel='self'
  2. Modifica la voce del modello localmente per rimuovere le informazioni non necessarie e apportare le modifiche necessarie.
  3. POST all'entry al server, utilizzando l'URL post per il feed. Questo valore si trova nel feed recuperato come valore href dell'elemento link con un rel='http://schemas.google.com/g/2005#post' oppure nella documentazione del servizio all'indirizzo http://code.google.com.

1. Recuperare una voce del modello

È possibile recuperare una singola voce utilizzando il valore href di un elemento link con un rel='self' nello stesso modo in cui è stata recuperata una voce prima di aggiornarla nell'esempio precedente.

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

La risposta, dopo aver utilizzato tidy, sarà simile alla seguente:

<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. Modificare la voce del modello

Vogliamo creare un album chiamato "Curling in Canada" con le foto della nostra recente partita di curling. Google Data ti consente di eliminare gli elementi Atom per i quali il server fornisce i valori, quindi per creare questa semplice voce del modello, rimuoveremo atom:id, atom:published, atom:updated, atom:author e i vari elementi atom:link nel feed. In questo modo otterremo una voce di modello semplificata. La voce deve quindi essere modificata per rappresentare il nuovo album che stiamo creando:

<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: quando pubblichi la nuova voce, ricordati di includere tutte le definizioni dello spazio dei nomi XML utilizzate come attributi per atom:entry. Se ometti questi campi, si verificheranno eccezioni di analisi. Inoltre, tidy sostituirà gli spazi tra le definizioni dello spazio dei nomi con caratteri di nuova riga. Sebbene questo sia un XML valido, al momento i servizi Google Data non lo accettano. Se utilizzi tidy, assicurati di aggiungere spazi aggiuntivi tra questi attributi nell'elemento entry.

3. Pubblicazione della nuova voce sul server

Il comando curl per pubblicare una nuova voce sul server è molto simile all'aggiornamento di una voce esistente, tranne per l'URL:

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

Se il post è andato a buon fine, l'output XML risultante è una copia della voce appena creata. Questa voce includerà gli elementi generati dal server al momento della creazione della voce, inclusi i valori degli elementi atom:id, atom:published, atom:updated e atom:link. I valori link risultanti possono essere utilizzati per modificare o eliminare la voce, a condizione che non vengano apportate ulteriori modifiche nel frattempo.

Eliminazione delle voci

L'eliminazione delle voci è molto simile all'aggiornamento delle voci, tranne per il fatto che viene utilizzato un metodo HTTP DELETE anziché un metodo HTTP PUT e non è necessario inviare dati. Come per la richiesta di aggiornamento, l'URL edit viene utilizzato come destinazione della richiesta HTTP.

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

Caricamento di oggetti multimediali

Una funzionalità importante dell'API Picasa Web Albums Data e dell'API Documents List Data è la possibilità di caricare oggetti binari. cURL può eseguire facilmente il caricamento di dati binari e di un'intestazione slug. Tuttavia, l'API Documents List data attualmente richiede la pubblicazione dell'XML insieme ai dati binari come messaggio MIME multipart. La creazione del messaggio in più parti non rientra nell'ambito di questo articolo.

L'esempio riportato di seguito mostra come caricare un'immagine denominata sweeping_the_rock.png in un Picasa Web Album con il titolo "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

Altri strumenti a riga di comando

Alcuni sviluppatori preferiscono imparare o eseguire il debug utilizzando altri strumenti a riga di comando.

Gli strumenti più utilizzati includono:

  • telnet, openssl vengono utilizzati per stabilire connessioni socket non elaborate (rispettivamente basate su testo normale e SSL) ai server web e possono essere utilizzati per interagire con i servizi Google Data. Tieni presente che non tutti i servizi Google Data potrebbero supportare SSL. Ecco come aprire le connessioni:
    • telnet picasaweb.google.com 80 (API Picasa Web Albums Data)
    • openssl s_client -connect www.google.com:443 (API Google Calendar Data e altri servizi su www.google.com)
    Una volta stabilita la connessione, deve essere inviata una richiesta HTTP non elaborata. Questa richiesta include il verbo HTTP, il percorso relativo, la versione, tutte le intestazioni e il corpo della richiesta. Ecco un esempio:
    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>
    
    Quando invii dati HTTP non elaborati, tieni presente che le operazioni POST e PUT richiedono il calcolo del valore di un'intestazione Content-Length. Puoi utilizzare lo strumento UNIX wc per calcolare questo valore. Inserisci tutti i contenuti del corpo HTTP in un file di testo come template_entry.xml (esempio utilizzato sopra) ed esegui wc -c template_entry.xml. Spesso è difficile eseguire il debug se utilizzi per errore un valore errato per l'intestazione Content-Length.
  • wget viene in genere utilizzato per scaricare dati da un server web in un file locale. Tuttavia, wget offre molte opzioni che lo rendono in grado di eseguire tutti i diversi tipi di richieste necessari per interagire con i servizi di dati Google. Ecco un esempio di come utilizzare wget per POST una nuova voce di album in Picasa Web Album:
    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 è uno strumento per applicare trasformazioni XSL (XSLT) ai documenti XML. Può essere utilizzato per estrarre facilmente i dati desiderati da una voce o da un feed XML restituito dalle API Google Data oppure per generare voci nuove o aggiornate.

Conclusione

Come hai visto, cURL e diversi altri strumenti da riga di comando possono essere utilizzati per interagire facilmente con i servizi Google Data utilizzando XML e HTTP non elaborati. Se hai domande sull'utilizzo di questi strumenti con la tua API Google Data preferita, partecipa ai forum specifici per le API.