2015-02-13 2 views
12

Quindi i documenti here dicono molto chiaramente che POSTing XML all'URL di feed elenco per il foglio con i nomi dei campi nel formato di questo XML inserirà una nuova riga.Aggiunta di una riga a Google Spreadsheet tramite cURL - errori nei campi obbligatori

L'autenticazione funziona e l'account autorizzato può accedere al foglio. Tutti quegli errori sono stati risolti.

Così, quando ho posto a https://spreadsheets.google.com/feeds/list/key/mySheetIDHere/private/full senza ottengo

"La voce postato manca uno o più dei campo obbligatorio (s): titolo di"

così ho aggiunto <title></title> in aggiunta al già esistente <gsx:Title></gsx:Title> e che va via, ma è sostituito dal

"la voce postato manca uno o più dei campi obbligatori (s): rowCount"

Così ho provato ad aggiungere un int che è la riga corrente conta ma l'errore persiste.

XML corrente è al di sotto

<entry xmlns="http://www.w3.org/2005/Atom" 
    xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended"> 
    <title>A Title</title> 
    <rowCount>3</rowCount> 
    <gsx:Title>A Title</gsx:Title> 
    <gsx:Name>A Name</gsx:Name> 
    <gsx:Email>An email</gsx:Email> 
    <gsx:Phone>A phone</gsx:Phone> 
</entry> 

La documentazione non dicono nulla su campi obbligatori o conteggi delle righe. Qualcuno sa cosa sto sbagliando?

+0

Sto incontrando gli stessi errori, mai capirlo? –

risposta

5

ottenuto che funziona, ecco a Gist with all of my scripts. Dal tuo URL, sembra che potresti inviare il POST all'endpoint add a worksheet anziché all'endpoint . L'endpoint del foglio di lavoro si aspetta title e rowCount come stai vedendo. Quello che vogliamo è un URL che assomiglia

https://spreadsheets.google.com/feeds/list/$spreadsheet_id/$worksheet_id/private/full 

ho creato a spreadsheet alla prova con tre colonne:

  • frutta
  • colori
  • Dimensioni

ho seminato che (hah!) con Apple, Red, Medium come ho provato auth e lettura, quindi ho aggiunto Orange, Orange, Medium con questo cUR Comando L:

curl \ 
    --header "Authorization: GoogleLogin auth=$auth" \ 
    --header 'Content-Type: application/atom+xml' \ 
    -d @data.xml \ 
    -X POST \ 
    "https://spreadsheets.google.com/feeds/list/$spreadsheet_id/$worksheet_id/private/full" 

Dove:

  • $auth è il mio Google autenticazione gettone ottenuti da https://www.google.com/accounts/ClientLogin
  • $spreadsheet_id è l'ID visibile nell'URL o ottenuti da https://spreadsheets.google.com/feeds/spreadsheets/private/full
  • $worksheet_id è il foglio di lavoro (un foglio/scheda all'interno dell'intero documento) ottenuto da https://spreadsheets.google.com/feeds/worksheets/$spreadsheet_id/private/full. Non ho visto alcunché visibile nell'interfaccia utente. Potrei ottenere l'ID del foglio di lavoro.

e data.xml si presenta così:

<entry xmlns="http://www.w3.org/2005/Atom" 
    xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended"> 
    <gsx:fruit>Orange</gsx:fruit> 
    <gsx:color>Orange</gsx:color> 
    <gsx:size>Medium</gsx:size> 
</entry> 

ho notato che le colonne sono state tutte in minuscolo - non sono sicuro se quello che conta.Ho anche notato che ci sono i tag title e content quando recupero le righe, oltre agli elementi strutturati, ma che title era un'aringa rossa per l'errore title che stai vedendo.

<!-- GET https://spreadsheets.google.com/feeds/list/$spreadsheet_id/$worksheet_id/private/full --> 
<!-- snip --> 
    <title type="text">Apple</title> 
    <content type="text">color: Red, size: Medium</content> 
    <gsx:fruit>Apple</gsx:fruit> 
    <gsx:color>Red</gsx:color> 
    <gsx:size>Medium</gsx:size> 
<!-- snip --> 
+0

Ora che Google non supporta più ClientLogin, come si recupera il token di autorizzazione? –

+0

Sembra che dobbiamo passare a [OAuth 2] (https://developers.google.com/google-apps/spreadsheets/authorize) –

2

Stavo semplicemente utilizzando l'URL sbagliato - invece di fare riferimento all'elemento link del feed elenco con rel = "http://schemas.google.com/g/2005#post", mi è stato riferimento al foglio di lavoro di alimentazione , che ha anche un elemento di collegamento con lo stesso rel ma un href diverso.

Da ciò che ho raccolto, l'URL del feed di elenco e l'URL POST dei feed di elenchi sono gli stessi, ovvero il punto in cui è iniziata la confusione per me.

+0

Generalmente nelle API REST-like, vedi che gli URL sono gli stessi. La differenza importante è il verbo, chiedendo di OTTENERE la risorsa o POST una nuova. C'è un sommario bello e semplice del comportamento RESTful nella [documentazione di routing di Rails] (http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions). –

+0

So come funzionano le API REST e stavo di fatto usando il comando POST. Come ho affermato, stavo facendo riferimento all'URL sbagliato, non eseguendo un GET. –