通过cURL向Google Spreadsheet添加一行 - 必填字段错误

时间:2015-02-13 20:41:16

标签: xml curl google-drive-api

因此,文档here非常明确地说,将XML发布到具有此XML格式的字段名称的工作表的列表提要URL将插入一个新行。

Auth正在运行,授权帐户可以访问工作表。所有这些错误都得到了解决。

所以当我在没有

的情况下发布到https://spreadsheets.google.com/feeds/list/key/mySheetIDHere/private/full

"发布的条目缺少一个或多个必填字段:title"

所以除了以前存在的<title></title>之外,我添加了<gsx:Title></gsx:Title>,然后消失了,但被

取代

&#34;发布的条目缺少一个或多个必填字段:rowCount&#34;

所以我尝试添加一个当前行数的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>

文档没有说明必填字段或行数。谁知道我做错了什么?

2 个答案:

答案 0 :(得分:5)

让它工作,这里是a Gist with all of my scripts。从您的网址看,您可能正在发布到add a worksheet端点而不是add a list row端点。工作表端点需要您titlerowCount。你想要的是一个看起来像

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

我设置a spreadsheet以测试三列:

  • 水果
  • 颜色
  • 尺寸

当我测试auth并阅读时,我用Apple, Red, Medium播种了它(哈!),然后使用此cURL命令添加了Orange, Orange, Medium

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是从https://www.google.com/accounts/ClientLogin
  • 获取的Google身份验证令牌
  • $spreadsheet_id是网址中显示的ID或从https://spreadsheets.google.com/feeds/spreadsheets/private/full
  • 获取的ID
  • $worksheet_id是从https://spreadsheets.google.com/feeds/worksheets/$spreadsheet_id/private/full获取的工作表(整个文档中的一个工作表/标签页)。我没有在UI中看到任何可见的工作表ID。

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>

我注意到这些列都是小写的 - 我不确定这是否重要。除了结构化元素之外,我还注意到在获取行时有titlecontent标记,但是titletitle错误的<!-- 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 --> 错误看到了。

<form id="taskitem_form" method="post" action="">

    {% csrf_token %}
    {{form}}

    <input type="submit" name="submit" value="Add Task" class ="btn btn-primary" />
</form>

答案 1 :(得分:2)

我只是使用错误的网址 - 而不是使用rel =“http://schemas.google.com/g/2005#post”引用列表供稿链接元素,我引用的是工作表供稿,有一个链接元素具有相同的rel但具有不同的href。

从我收集的内容来看,列表供稿网址和列表供稿POST网址是相同的,这就是我开始混淆的地方。