Google Calendar V3 API问题?

时间:2014-04-29 16:00:21

标签: json calendar google-api google-calendar-api

出于某种原因,我从2010年开始回复此API调用中返回的事件:

https://www.googleapis.com/calendar/v3/calendars/myEmailHere@gmail.com/events?maxResults=15&key={KEY HERE}

以下是响应中的一些JSON(在项目数组中):

  {
     "kind":"calendar#event",
     "etag":"\"SaH0JPgxpZtQtKmztOIhZtDaAls/MA\"",
     "id":"_64oj8e9m8d1kab9p8cs48b9k68sj8ba284q48b9k64o4cd1p6crj6cq370",
     "status":"confirmed",
     "htmlLink":"LINK HERE",
     "created":"2010-07-29T15:10:49.000Z",
     "updated":"1970-01-01T00:00:00.000Z",
     "summary":"Blood Drive",
     "creator":{
        "email":"myEmailHere@gmail.com",
        "displayName":"Elite Gamer",
        "self":true
     },
     "organizer":{
        "email":"myEmailHere@gmail.com",
        "displayName":"Elite Gamer",
        "self":true
     },
     "start":{
        "dateTime":"2010-08-23T14:00:00-05:00"
     },
     "end":{
        "dateTime":"2010-08-23T19:00:00-05:00"
     },
     "iCalUID":"11496CCE-9C8D-4294-BA4D-410F493733C8",
     "sequence":4
  }
直到现在(2014年),我一直都是平等的。该API也显示它在20世纪更新了???。

我搞砸了什么?我错过了一个参数吗?我期待谷歌比这更多。

另外,我认为另一件事很奇怪。 Google日历还会返回两个不同的日期?!日期时间和日期。 (取决于全天活动)。这应该发生吗?它使开发人员必须检查响应中发送了哪一个,然后根据该日期解析日期。要不然,或者我在请求中缺少参数。

更新

环顾四周后,我发现了这个:

http://www.google.com/calendar/feeds/myEmail@gmail.com/public/full?alt=json&max-results=15

这可以获得确切的信息,但格式不同。但是,这确实会返回正确的日期;但由于某种原因,日期的格式仍然不同。为什么是这样?我应该使用哪一个?

2 个答案:

答案 0 :(得分:2)

updatedcreated之前,这很奇怪。我之前没有注意到。它至少应与created相同,但它显示1970-01-01T00:00:00.000Z。这必须是unix time,这是0.谷歌做错了什么。但您的日历活动是在2010年创建的。您只需添加新活动即可查看是否正确。

根据RFC 3339,所有日期都是格式化的。您可以使用库来解析它们。

答案 1 :(得分:2)

  

出于某种原因,我从2010年开始回复此API调用中返回的事件:

     

https://www.googleapis.com/calendar/v3/calendars/myEmailHere@gmail.com/events?> maxResults = 15& key = {KEY HERE}

在您的网址中使用timeMin参数查询。默认情况下,您不按日期过滤,因此您只需获得所有结果。过滤maxResults只会限制返回的事件数量。

  

https://www.googleapis.com/calendar/v3/calendars/myEmailHere@gmail.com/events?maxResults=15&timeMin=2014-01-01T01:01:01.000Z&key= {KEY HERE}

     直到现在(2014年),我一直都是平等的。该API还显示它在1900年代更新了???。

可原因,因为事件从未更新过。它未在API中记录: https://developers.google.com/google-apps/calendar/v3/reference/events/list

  

另外,我认为另一件事很奇怪。 Google日历还会返回两个不同的>日期?!日期时间和日期。 (取决于全天活动)。这应该发生吗? >它使开发人员必须检查响应中发送了哪一个,然后解析依赖于此的>日期。要不然,或者我在请求中缺少参数。

是的,这应该根据文档发生。 https://developers.google.com/google-apps/calendar/v3/reference/events#resource

  

日期,格式为“yyyy-mm-dd”,如果这是全天活动。

     

时间,作为组合日期时间值(根据RFC 3339格式化)。除非在timeZone中明确指定时区,否则需要时区>偏移。

对于我自己来说,我一直在努力让所有事情都发挥作用,所以我希望这能帮到你。

至于反序列化。我使用Newtonsoft.JSON反序列化.NET中的约会。 首先创建一个根对象,因为您正在序列化事件列表。

public class RootObject
{
    public RootObject() {}
    //parameters you want to retrieve from the Calendar.
    public List<GoogleEvent> events {get;set;}
}

public class GoogleEvent
{
    public GoogleEvent(){}

    [JsonProperty("calendarId")] //specify which JSON parameter needs to be mapped
    public string Id {get;set;}
    //all parameters you need
}

然后使用NewtonSoft反序列化器获取RootObject,该对象包含您检索到的Json中的所有事件。

NewtonSoft.Json.JsonConvert.DeserializeObject<RootObject>(JSONSTRING);