Добавление строки в таблицу Google с помощью cURL - ошибки требуемых полей - программирование

Добавление строки в таблицу Google с помощью cURL - ошибки требуемых полей

Итак, docs здесь говорят очень просто, что POSTing XML в URL-адрес канала для листа с именами полей в формате этого XML будет вставлять новую строку.

Auth работает, и авторизированная учетная запись может получить доступ к листу. Все эти ошибки разрешены.

Итак, когда я отправляю сообщение https://spreadsheets.google.com/feeds/list/key/mySheetIDHere/private/full, не получив

"В опубликованной записи отсутствует одно или несколько требуемых полей: title"

Итак, я добавил <title></title> в дополнение к ранее существующему <gsx:Title></gsx:Title> и ушел, но заменен на

"В опубликованной записи отсутствует одно или несколько требуемых полей: rowCount"

Итак, я попытался добавить int, который является текущим числом строк, но эта ошибка сохраняется.

Текущий XML ниже

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

Документы не говорят ничего о необходимых полях или подсчетах строк. Кто-нибудь знает, что я делаю неправильно?

4b9b3361

Ответ 1

Получил работу здесь Gist со всеми моими скриптами. Из вашего URL-адреса вам кажется, что вы можете добавить POSTing к добавить рабочий стол вместо добавить строку списка конечная точка. Конечная точка рабочего листа ожидает title и rowCount, как вы видите. Вы хотите, чтобы URL-адрес выглядел как

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

Я установил таблицу для тестирования с тремя столбцами:

  • Фрукты
  • Цвет
  • Размер

Я засеял его (hah!) с помощью Apple, Red, Medium, когда я тестировал auth и читал, а затем добавил Orange, Orange, Medium с помощью этой команды cURL:

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"

Где:

  • $auth - мой токен Google, полученный от https://www.google.com/accounts/ClientLogin
  • $spreadsheet_id - это идентификатор, видимый в URL-адресе или полученный из https://spreadsheets.google.com/feeds/spreadsheets/private/full
  • $worksheet_id - это рабочий лист (один лист/вкладка внутри всего документа), полученный из https://spreadsheets.google.com/feeds/worksheets/$spreadsheet_id/private/full. Я не видел ничего видимого в пользовательском интерфейсе, я мог бы получить идентификатор листа.

и data.xml выглядит следующим образом:

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

Я заметил, что все столбцы были внизу - я не уверен, что это важно. Я также заметил, что есть теги title и content, когда я извлекаю строки в дополнение к структурированным элементам, но title был красной серой для ошибки title, которую вы видите.

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

Ответ 2

Я просто использовал неправильный URL-адрес - вместо ссылки на элемент ссылки "Список каналов" с rel= "http://schemas.google.com/g/2005#post", я ссылался на фид Worksheet, который также имеет элемент связи с тем же rel, но с другим href.

Из того, что я собираю, URL-адрес фида списка и URL-адрес POST-списка для списка совпадают, и это начало путаницы для меня.