Почему Календарь Google не загружает мой динамически сгенерированный файл ICS? - PullRequest
2 голосов
/ 21 июня 2011

Мне было поручено создать ICAL-канал для конференц-звонков для членов нашей организации. Я создал обработчик в ASP.NET, который проходит по нашей базе данных, получает данные вызовов из базы данных и создает вывод, который мне кажется действительным, на основании того, что я прочитал о формате ICAL, и примеров, которые я видел / в разобранном виде.

Outlook 2007 читает результирующий вывод и отображает календарь, без проблем ( скриншот здесь показывает, как он отображается).

30 Коробки также не имеют проблем с этим. ( см. Тест здесь ).

Но когда я пытаюсь загрузить тот же вывод в Календарь Google, я получаю сообщение «Не удалось разобрать календарь по запрошенному URL»:

Не удалось разобрать календарь по запрошенному URL http://i51.tinypic.com/21mgoba.png

Что не так с моим выводом, из-за которого Google отклоняет его? Вы можете увидеть временные данные, с которыми я проверяю, по этому адресу: http://www.joshuacarmody.com/temp/icaltest.ics. Это снимок вывод из моего файла .ASHX, без изменений, за исключением того, что номера телефонов и пароли были очищены.

Редактировать с дополнительной информацией:

Я только что попробовал следующее

  1. Создана копия моего тестового файла с именем "icaltest-1googevent.ics"
  2. Удалил все данные VEVENT из файла
  3. Экспортировал один из моих календарей Google в ICS
  4. Скопировал один VEVENT из экспортированных данных Google в мой тестовый файл
  5. Попытка подписки на icaltest-1googevent.ics в Календаре Google.

Я все еще получил сообщение об ошибке. Я предполагаю, что проблема не в моих данных VEVENT, а в чем-то другом в файле. Может быть, что-то не так с моим определением VCALENDAR?

Ответы [ 4 ]

4 голосов
/ 22 июня 2011

После большого количества проб и ошибок и сравнения моего вывода с результатами Google, я получил его на работу.Было несколько проблем с моим файлом ICS:

  • Неэкранированные символы (я не знал, что должен был экранировать запятые!)
  • Несовместимые символы возврата строки.Они не отображаются в моем текстовом редакторе, но мне пришлось использовать .NET String.remove (), чтобы удалить «\ r» из моего вывода, чтобы Google распознал его
  • В файле отсутствовал VCALENDAR:КОНЕЦ.Видимо Outlook не сильно волнует.Google делает.
4 голосов
/ 22 июня 2011

Валидатор severinghaus ics, кажется, думает, что есть что-то смешное (а?) До НАЧАЛА КАЛЕНДАРЯ

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

В моем тестировании Google был намного более суетливым / строгим / педантичным - как только вы настроите его на валидатор и Google, он должен работать в большинстве мест.

1 голос
/ 07 февраля 2012

До НАЧАЛА у меня был не один, а три забавных символа: VCALENDAR, десятичные коды 239, 187, 191.

Я нашел их благодаря ссылке на severinghaus.org, спасибо!

Оказывается, это префикс, называемый BOM в UTF-8, вы можете прочитать его здесь: http://en.wikipedia.org/wiki/UTF-8#Byte_order_mark

Google не справляется с этим, но после удаления этих трех символов из файла и загрузки на сервер я смог подписаться на этот календарь в Календаре Google (из URL).

Надеюсь, это поможет кому-то пройти мимо этой страницы в будущем ...

0 голосов
/ 10 мая 2016

У меня была похожая проблема, пока я не понял, что открытие сгенерированного файла .ics в Notepad ++ не было в UTF-8.Я использовал метод для преобразования моей строки в байтовый массив, но не использовал для этого кодировщик, поэтому независимо от того, какие заголовки содержимого я использовал, файл никогда не будет сгенерирован с использованием UTF-8.Это простое исправление разрешило поколение UTF-8, и теперь Google доволен моим фидом:

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