2

我在 Android 4.4 上的 Tasker 上使用 HTTP GET 操作已经有一段时间了,以获取我未来的谷歌日历事件。由于 Google 关闭了 v2 API,此任务不再有效。

对于 API v3,需要进行身份验证。我试图从开发者控制台获取客户端密钥。我创建了一个新项目并为其激活了日历 API。然后,我创建了一个新的客户端 ID,并且确实拥有此客户端 ID 及其相应的密钥。如何通过 HTTP GET 和此身份验证信息从我的个人 Google 日历中获取我的(未来)事件列表?我正在尝试使用:

https://www.googleapis.com/calendar/v3/calendars/my_calendar_ID/events?singleEvents=true&key=my_client_key

这将返回一个错误:

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "keyInvalid",
    "message": "Bad Request"
   }
  ],
  "code": 400,
  "message": "Bad Request"
 }
}

我究竟做错了什么?提前致谢!

4

2 回答 2

0

通常,当请求中使用的密钥无效时会引发此错误。在请求中,您必须使用公钥而不是客户端密钥(当您想要发送 API 密钥时)。这是有关如何获取应用程序公钥的文档的链接。

另外,这里是链接有关事件获取请求的 HTTP 请求的文档

于 2014-11-19T20:48:02.823 回答
0

对于任何试图实现相同目标并且不需要不惜一切代价使用 API v3 的人:

仍然可以选择通过类似于 API v2 的请求来获取未来事件。因此,请使用日历设置中的私有 XML 代码并添加您需要的参数。例如:

HTTP GET http://www.google.com/calendar/feeds/your_email/private-validation/basic?futureevents=true&max-results=1&singleevents=true&orderby=starttime&sortorder=ascending

我无法从 Google 找到任何关于此的最新文档,但它正在工作。API v2 的主要区别在于“/basic?” 最后而不是旧的“/full?”。否则,大多数参数似乎都可以正常工作。

futureevents=true - only shows future events
max-results=integer - only show integer number of results
singleevents=true - handly reoccuring events as single events
orderby=starttime - sort results by their starting time instead of last update
sortorder=ascending - well, sort order

“printpretty”似乎不再受支持。此外,时间戳现在有了不同的外观。但是,仍然包含所有需要的信息。

上面的示例显示了对日历中下一个事件的请求。这可以扩展到多个事件(例如 max-results=5)。需要其他参数来按预期显示下一个事件,而不是一些看似随机的事件。这种方法的问题当然是请求中使用了您的私有地址,与 API v3 相比可能不安全。

于 2014-11-28T12:11:03.737 回答