使用google api nodejs客户端更新或修补Glass时间轴中的现有卡

时间:2014-05-22 20:51:31

标签: google-glass google-mirror-api google-api-nodejs-client

我正在玩Googles官方js客户端访问Google API,在这种情况下是Google Glass Mirror API。

我需要一些指导,了解如何使用update或更好的patch方法(请参阅https://developers.google.com/glass/v1/reference/timeline)更新我之前插入时间轴的时间轴卡。

插入和列出相当容易并且成功运行。我已经使用本教程开始了:https://github.com/emil10001/glass-mirror-nodejs-auth-demo/blob/master/app.js

我试过以下:

card = {
        "kind": "mirror#timelineItem",
        "id": "74b88eb3-a6d7-4c13-8b0e-bfdecf71c913",
        "created": "2014-05-22T20:26:56.253Z",
        "updated": "2014-05-22T20:27:18.961Z",
        "etag": "1400790438961",
        "text": "This item3 auto-resizes according to the text length",
        "notification": {
            "level": "DEFAULT"
        }
    }

client
    .mirror.timeline.update({"id": card.id, resource: card})
    .withAuthClient(oauth2Client)
    .execute(function (err, data) {
        if (!!err)
            errorCallback(err);
        else
            successCallback(data);
    });

我得到了以下有效负载的成功回复:

{ 
  kind: 'mirror#timelineItem',
  id: '74b88eb3-a6d7-4c13-8b0e-bfdecf71c913',
  selfLink: 'https://www.googleapis.com/mirror/v1/timeline/74b88eb3-a6d7-4c13-8b0e-bfdecf71c913',
  created: '2014-05-22T20:26:56.253Z',
  updated: '2014-05-22T20:32:11.862Z',
  etag: '1400790731862' 
}

我最终得到的是内容空白的卡片。我怀疑我没有正确使用更新方法,第二个参数resource没有正确命名?

1 个答案:

答案 0 :(得分:0)

Google API通常使用两种不同的方式来指定事物的值:

  • 参数。这些通常是短值,用于控制您正在使用的资源或该资源如何呈现给您。 (如果您正在查看API文档,这些通常是URL的一部分。)
  • 资源。这些是您关心的价值观。 (如果您正在查看API文档,则会将其作为邮件正文发送。)

对于timeline.insert,您只需处理资源,因为您只是添加资源。使用timeline.patch和timeline.update,您将同时处理参数(您正在编辑的资源的ID)和资源更改。因此,您需要为函数调用指定两个参数。

使用上面的示例,调用可能如下所示:

client
.mirror.timeline.update(card.id, card)
.withAuthClient(oauth2Client)
.execute(function (err, data) {
    if (!!err)
        errorCallback(err);
    else
        successCallback(data);
});

您还询问了timeline.patchtimeline.update之间的区别。

更新用于将您在卡中提供的所有内容(可写)替换为时间轴项目。因此,使用上面的示例, text notification 字段可能会更改之前的内容。其他字段将被忽略 - 它们不可写,Glass将根据需要设置/更改它们。

正如你所推测的那样,timeline.update在你有一张卡时非常有用(因为你在发送给你时存储了它,或者是因为你是从timeline.list或其他东西那里得到的)并且你需要更改一些其中的字段。

当您可能没有整张卡时使用补丁,但是当您可能仍希望更新其中的某些字段时使用。在这种情况下,资源仅指定要更改的字段 - 其他字段保持不变。

所以以下两个是等价的:

var update = {
  text: "new text",
  notification: {
    level: "DEFAULT"
  }
};
client.mirror.timeline.update( card.id, update )
.withAuthClient(oauth2Client)
.execute(function(err,data){
  console.log(err,data);
});

var patch = {
  text: "new text",
};
client.mirror.timeline.patch( card.id, patch )
.withAuthClient(oauth2Client)
.execute(function(err,data){
  console.log(err,data);
});

请注意,如果您想要使用补丁删除字段(例如上面的通知),则需要将字段显式设置为null。