Utilizzo di cURL per interagire con i servizi di dati di Google

Avviso: questa pagina riguarda le API di Google più vecchie, le API di dati di Google; è pertinente solo per le API elencate nella directory delle API di dati di Google, molte delle quali sono state sostituite con API più recenti. Per informazioni su una nuova API specifica, consulta la documentazione della nuova API. Per informazioni sulle autorizzazioni per le richieste con un'API più recente, vedi Autenticazione e autorizzazione degli Account Google.

Ryan Boyd, team delle API di dati di Google
settembre 2007

Introduzione

In sostanza, le API di dati di Google utilizzano i feed e le voci Atom (XML) come formato dei dati e HTTP come protocollo per la trasmissione dei dati, estendendo il Protocollo di pubblicazione Atom. Pubblichiamo diverse librerie client per semplificare le interazioni con le API dei dati di Google. Tuttavia, puoi sempre usare strumenti di livello inferiore per lavorare con i nostri servizi ed è piuttosto semplice ricevere qualche piccolo consiglio.

cURL è un'applicazione a riga di comando per eseguire richieste che utilizzano diversi protocolli, tra cui HTTP. cURL viene spesso usato dagli sviluppatori per testare i servizi di dati di Google, in quanto supporta la funzionalità HTTP necessaria per interagire con le API a basso livello.

cURL fornisce solo il supporto per l'esecuzione delle comunicazioni HTTP, pertanto la conoscenza del protocollo per i dati Google, del protocollo specifico per i servizi e del formato dati XML utilizzato è un prerequisito per il lavoro con l'applicazione. Per semplificare queste attività, sono menzionati anche altri strumenti in questo articolo.

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

Ottenere e installare cURL

cURL è disponibile comunemente in un'installazione predefinita di molte piattaforme UNIX/Linux. Prova a digitare curl nella shell preferita per verificare se lo strumento è installato e si trova nel tuo PATH. Se non hai installato lo strumento, visita la pagina di download sul sito web cURL per ricevere la fonte ufficiale o un pacchetto binario fornito dall'utente. Tieni presente che lo strumento a riga di comando utilizza la libreria libcurl, che può essere offerta come pacchetto separato per il download. Pertanto, se non stai eseguendo la compilazione dall'origine, assicurati di scaricare un pacchetto "binary" anziché un pacchetto "libcurl". I pacchetti abilitati per SSL sono obbligatori se vuoi utilizzare cURL per acquisire i token di autenticazione o accedere ad alcuni servizi per i dati di Google che richiedono l'utilizzo di SSL per le richieste.

Autenticazione a un servizio dati di Google

Le richieste di dati di Google autenticate vengono aggiunte aggiungendo alla richiesta un'intestazione HTTP contenente un token di autenticazione di ClientLogin (app desktop/per dispositivi mobili) o AuthSub (app web). A scopo di test tramite cURL, ClientLogin è il metodo più semplice ed è riportato di seguito. Le intestazioni di autenticazione AuthSub potrebbero essere utilizzate con cURL, ma il processo più avanzato per ottenere i token non rientra nell'ambito di questo articolo.

Utilizzo di ClientLogin

ClientLogin è destinato alle applicazioni installate (desktop/dispositivi mobili). Con questo metodo di autenticazione, l'applicazione che utilizza le API di dati di Google 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 post modulo. Queste variabili vengono trasmesse rispettivamente come argomenti Email, Passwd e service. Questa richiesta restituisce una risposta con diversi token, uno dei quali può essere utilizzato per inviare richieste al servizio dati Google. Tieni presente che gli argomenti di dati trasmessi con curl devono essere codificati in URL se contengono caratteri non ASCII, che spesso compaiono negli argomenti Email e Passwd. Puoi chiedere a curl di codificare questi argomenti tramite l'URL 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

Consulta la documentazione di ClientLogin per informazioni specifiche sui parametri utilizzati nella richiesta sopra. In questo esempio, il servizio utilizzato è l'API di dati di Picasa Web Album. Il nome del servizio (service) è lh2. I nomi dei servizi per altri servizi dati di Google sono disponibili nella pagina delle domande frequenti sulle API di dati di Google.

Il valore del token Auth nella risposta precedente è l'unico valore necessario per l'autenticazione nei servizi dati di Google. Il valore di questo token è formato in un'intestazione HTTP, che viene quindi utilizzata per ogni richiesta a un servizio dati di 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: il metodo di escape dei caratteri di nuova riga con barra rovesciata ("\"") sopra non funziona nella shell dei comandi di Windows, quindi devi eseguire l'intero comando su una riga se esegui curl su Windows.


Recupero di feed e voci

Nelle API di dati di Google, il recupero dei feed e delle voci viene eseguito eseguendo un GET HTTP su un URL, con un insieme facoltativo di parametri di ricerca. Poiché stiamo eseguendo una richiesta GET, devono essere trasmessi a curl solo l'intestazione di autenticazione e l'URL. L'esempio seguente continuerà a utilizzare l'API di dati di Picasa Web Album e viene utilizzato per recuperare un elenco degli album di proprietà dell'utente autenticato. Tieni presente che in questo esempio abbiamo abbreviato il token di autenticazione in ABCDEFG, ma è necessario utilizzare il token completo (ad es. EUBBIacA...32JKOuGh indicato sopra).

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

Verrà restituito un blob non XML di XML:

<?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 accettabili per formattare l'output al fine di renderlo più facilmente leggibile, incluso l'ordine. Il modo più semplice per utilizzare questa funzionalità consiste nel trasmettere l'output dal comando curl al seguente ordine:

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é l'URL di un feed.

Aggiornamento delle voci

Le voci nelle API di dati di Google vengono aggiornate eseguendo il comando HTTP PUT all'URL di modifica con una nuova copia del codice XML della voce nel corpo della richiesta.

  1. Recupera la voce utilizzando il valore URL atom:link/@rel='self'
  2. Aggiorna la voce localmente per apportare le modifiche necessarie
  3. PUT la voce per tornare 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 di feed sopra riportato. L'URL necessario è il valore href per l'elemento link con 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 localmente

Una volta recuperata, la voce deve essere aggiornata utilizzando un editor di testo o un'applicazione locale per poter apportare le modifiche necessarie. Nel comando riportato sopra per recuperare una voce, non abbiamo inoltrato i risultati a tidy come abbiamo fatto negli esempi precedenti. Il risultato è XML che rappresenta gli stessi dati, ma ha una formattazione diversa da quella della versione inoltrata in tidy. Ai fini della modifica manuale di una voce, l'utilizzo di tidy spesso semplifica l'utilizzo del codice XML.

Nota: ricorda di includere tutte le definizioni dello spazio dei nomi XML utilizzate come attributi nella atom:entry quando pubblichi la nuova voce. Se le ometti, le eccezioni verranno analizzate. Inoltre, tidy sostituirà gli spazi tra le definizioni dello spazio dei nomi con caratteri di nuova riga. Si tratta di un codice XML valido, ma al momento i Servizi dati Google non lo accettano. Se utilizzi tidy, assicurati di aggiungere spazi tra questi attributi nell'elemento entry.

3. Aggiornamento della voce sul server

Utilizzando l'URL edit, devi PUT una copia della voce che utilizza il servizio tramite cURL. Deve essere aggiunta un'intestazione per indicare il tipo di contenuti inviati al server. Lo snippet che segue presuppone che il file con la voce aggiornata venga salvato nel file 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 delle voci

Le voci nelle API di dati di Google vengono create effettuando un HTTP POST all'URL del post con una nuova voce. Il valore atom:id viene assegnato dal server e pertanto non è necessario includerlo nelle nuove voci. Il modo più semplice per creare una nuova voce consiste nel recuperare una voce precedente e modificarla. L'esempio riportato di seguito permette di farlo.

  1. Recupera la voce di un modello utilizzando atom:link/@rel='self'
  2. Modifica la voce del modello a livello locale per rimuovere le informazioni non necessarie e apportare le modifiche necessarie.
  3. POST la voce al server, utilizzando l'URL post del feed. Questa opzione si trova nel feed recuperato come valore href per l'elemento link con rel='http://schemas.google.com/g/2005#post' oppure nella documentazione del servizio su http://code.google.com.

1. Recuperare una voce del modello

È possibile recuperare una singola voce utilizzando il valore href di un elemento link con rel='self' come se fosse stata recuperata prima di aggiornarla nell'esempio sopra.

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 l'utilizzo di tidy, avrà il seguente aspetto:

<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 voce del modello

Vogliamo creare un album chiamato "Curling in Canada" con le foto della nostra recente partita di curling. I dati di Google consentono di eliminare gli elementi Atom per cui il server fornisce valori. Pertanto, per creare questa semplice voce di modello, rimuoveremo i valori atom:id, atom:published, atom:updated, atom:author e i vari elementi atom:link nel feed. Questo ci permetterà di inserire una voce di modello essenziale. 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: ricorda di includere tutte le definizioni dello spazio dei nomi XML utilizzate come attributi nella atom:entry quando pubblichi la nuova voce. Se le ometti, le eccezioni verranno analizzate. Inoltre, tidy sostituirà gli spazi tra le definizioni dello spazio dei nomi e li sostituirà con caratteri di nuova riga. Si tratta di un codice XML valido, ma al momento i Servizi dati Google non lo accettano. Se utilizzi tidy, assicurati di aggiungere spazi tra questi attributi nell'elemento entry.

3. Pubblicazione della nuova voce sul server

Il comando curl per pubblicare una nuova voce nel server è molto simile all'aggiornamento di una voce esistente, tranne per il fatto che l'URL è diverso:

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 ha esito positivo, l'output XML risultante è una copia della voce appena creata. Questa voce include gli elementi generati dal server al momento della creazione, inclusi i valori degli elementi atom:id, atom:published, atom:updated e atom:link. I valori link generati possono essere utilizzati per modificare o eliminare la voce, a condizione che nel frattempo non vengano apportate altre modifiche .

Eliminazione di voci

L'eliminazione delle voci è molto simile all'aggiornamento delle voci, ad eccezione del fatto che viene utilizzato un metodo HTTP DELETE invece di HTTP PUT e non è necessario inviare dati. Analogamente alla richiesta di aggiornamento, l'URL edit viene utilizzato come target 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 di dati di Picasa Web Album e dell'API di dati dell'elenco documenti è la possibilità di caricare oggetti binari. cURL può facilmente caricare dati binari e un'intestazione slug. Tuttavia, l'API di dati dell'elenco documenti richiede attualmente la pubblicazione di file XML con i dati binari sotto forma di messaggio multiparte MIME. La formulazione del messaggio multiparte non rientra nell'ambito di questo articolo.

L'esempio seguente mostra come caricare un'immagine chiamata sweeping_the_rock.png in un album web Picasa con il titolo "Spazzare la roccia":

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.

Tra gli strumenti più diffusi figurano:

  • telnet,opensl viene utilizzato per effettuare connessioni socket non elaborate (rispettivamente in testo normale e SSL) ai server web e può essere utilizzato per interagire con i servizi di dati di Google. Tieni presente che non tutti i servizi dati Google potrebbero supportare SSL. Ecco come aprire le connessioni:
    • telnet picasaweb.google.com 80 (API di dati di Picasa Web Album)
    • openssl s_client -connect www.google.com:443 (API di dati di Google Calendar 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 per 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, ad esempio template_entry.xml (esempio utilizzato sopra) ed esegui wc -c template_entry.xml. Spesso è difficile eseguire il debug se usi accidentalmente un valore errato per l'intestazione Content-Length.
  • wget viene in genere utilizzato per scaricare dati da un server web a un file locale. Tuttavia, wget offre molte opzioni che consentono di eseguire tutti i diversi tipi di richieste necessarie per interagire con i servizi di dati di Google. Ecco un esempio di come usare 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 le trasformazioni XSL (XSLT) ai documenti XML. Può essere utilizzato per estrarre facilmente i dati desiderati da una voce o un feed XML restituiti dalle API di dati di Google o per generare voci nuove o aggiornate.

Conclusione

Come hai visto, cURL e molti altri strumenti a riga di comando possono essere utilizzati per interagire facilmente con i servizi di dati di Google utilizzando XML e HTTP non elaborati. Unisciti a noi nei forum specifici per le API per eventuali domande sull'utilizzo di questi strumenti con la tua API di dati di Google preferita.