为什么Google日历不会加载我动态生成的ICS文件?

时间:2011-06-21 13:56:27

标签: asp.net google-calendar-api icalendar

我的任务是为我们组织的成员创建ICAL会议电话会议。我在ASP.NET中创建了一个处理程序,它循环遍历我们的数据库,从数据库中获取调用数据,并根据我读过的ICAL格式创建对我有效的输出,以及我见过的示例/拆卸。

Outlook 2007读取结果输出并显示日历,没问题(screenshot here显示它的呈现方式)。

30个盒子也没有问题。 (see test here)。

但是当我尝试将相同的输出加载到Google日历中时,我收到消息“我们无法在请求的网址上解析日历”:

We could not parse the calendar at the url requested http://i51.tinypic.com/21mgoba.png

导致Google拒绝该输出的输出有什么问题?您可以在此网址上看到我正在测试的临时数据: http://www.joshuacarmody.com/temp/icaltest.ics。这是我的.ASHX文件输出的快照,除了电话号码和密码已经消毒之外没有改变。

使用其他信息进行编辑:

我刚刚尝试了以下

  1. 创建了一个名为“icaltest-1googevent.ics”
  2. 的测试文件的副本
  3. 删除了文件中的所有VEVENT数据
  4. 将我的一个Google日历导出到ICS
  5. 将Google导出的数据中的一个VEVENT复制到我的测试文件中
  6. 尝试在Google日历中订阅icaltest-1googevent.ics

我仍然收到错误消息。所以我猜这个问题不是我的VEVENT数据,而是关于该文件的其他内容。也许我的VCALENDAR定义出了问题?

4 个答案:

答案 0 :(得分:4)

在开始日历之前,断断续续的验证者似乎认为有一些有趣的东西(a?)

http://severinghaus.org/projects/icv/?url=http%3A%2F%2Fwww.joshuacarmody.com%2Ftemp%2Ficaltest.ics

在我的测试中谷歌有点麻烦/严谨/迂腐 - 一旦你使用验证器和谷歌它应该在大多数地方工作。

答案 1 :(得分:4)

经过大量的反复试验,并将我的输出与Google的比较,我得到了它的工作。我的ICS文件存在一些问题:

  • 未转义的角色(我不知道我不得不逃脱逗号!)
  • 行返回字符不一致。它们没有显示在我的文本编辑器中,但是我必须使用.NET的String.remove()从我的输出中删除“\ r”以让Google识别它
  • 文件缺少VCALENDAR:END。显然Outlook并不在乎。谷歌确实。

答案 2 :(得分:1)

在BEGIN之前我没有一个,但有三个有趣的角色:VCALENDAR,十进制代码239,187,191。

我发现他们感谢上面的severinghaus.org链接,谢谢!

事实证明它们是UTF-8中名为BOM的前缀,您可以在此处阅读:http://en.wikipedia.org/wiki/UTF-8#Byte_order_mark

谷歌没有处理这个问题,但是在从文件中删除这三个字符并上传到服务器之后,我能够在Google日历中(从URL)暂停到该日历。

我希望这可以帮助将来通过此页面的人...

答案 3 :(得分:0)

我遇到了类似的问题,直到我意识到在Notepad ++中打开生成的.ics文件并不是UTF-8。我使用的方法将我的字符串转换为字节数组,但是没有使用编码器,所以无论我使用什么内容标头,都不会使用UTF-8生成文件。这个简单的解决方案解决了UTF-8的问题,Google现在对我的Feed感到满意:

var utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(myString);
myString= utf8.GetString(utfBytes, 0, utfBytes.Length);