На моем сайте у меня есть календарь. Пользователи могут добавлять события в этот календарь. Я бы хотел создать веб-ссылку для этого календаря. Эта ссылка используется для импорта событий в другие приложения календаря. На самом деле я сделал это, и он отлично работает в приложении Thunderbird. Сгенерированный файл ics также отлично работает в приложениях для Outlook и Windows 10. Однако он не работает в Календаре Google. Когда я добавляю календарь по URL, Google говорит мне, что его нельзя разобрать, потому что синтаксис неверен. Не могли бы вы помочь мне понять, что не так с синтаксисом? Это прекрасно работает в Thunderbird, поэтому мне интересно. Это пример файла ics, который создается моей ссылкой:
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//hacksw/handcal//NONSGML v1.0//EN CALSCALE:GREGORIAN BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged call\nTest call DTSTART:20160601T080600Z DTEND:20160601T090600Z UID:2f42aa2827cfb DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Concept Attention AB DESCRIPTION:Logged call\nTest call. DTSTART:20160930T142700Z DTEND:20160930T152700Z UID:d51a9949584c2 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged call\ntest DTSTART:20161003T130700Z DTEND:20161003T140700Z UID:c5b033518dad9 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:WIP media DESCRIPTION:Logged call\nTest long row 012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 DTSTART:20161109T091600Z DTEND:20161109T101600Z UID:d25d0c6d386ff DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged call\nTEST CALL DTSTART:20161117T044100Z DTEND:20161117T054100Z UID:4f920ef97c547 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged call\ncall DTSTART:20161117T044200Z DTEND:20161117T054200Z UID:62eea787772b3 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:WIP media DESCRIPTION:Logged call\nololo test Meddelande DTSTART:20170124T120600Z DTEND:20170124T130600Z UID:88dac7bf56da8 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged call\nCALL DTSTART:20170127T064200Z DTEND:20170127T074200Z UID:241f02b368978 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Wisall Holding AB DESCRIPTION:Logged call\nTest phone log DTSTART:20170429T120800Z DTEND:20170429T130800Z UID:66171144c35c7 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:WIP media DESCRIPTION:Logged call\nTest log in a group DTSTART:20170429T121100Z DTEND:20170429T131100Z UID:9f169cae97c05 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged call\nTest group call log. DTSTART:20170503T160300Z DTEND:20170503T170300Z UID:9fe60fb4423d8 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:WIP media DESCRIPTION:Logged call\nТестовый звонок DTSTART:20170923T194700Z DTEND:20170923T204700Z UID:6c125503ad97d DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged deal\nTest deal for testing auto updating logs on live server. DTSTART:20160623T220000Z DTEND:20160623T230000Z UID:190243f0cce9e DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged deal\n1 DTSTART:20160722T105700Z DTEND:20160722T115700Z UID:2fa244dc25034 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged deal\nzxc DTSTART:20160905T140400Z DTEND:20160905T150400Z UID:7181e750e8444 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged deal\nToday deal 1 DTSTART:20160930T101400Z DTEND:20160930T111400Z UID:d68da964201ae DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged deal\nToday deal 2 DTSTART:20160930T161400Z DTEND:20160930T171400Z UID:9b952b4ff0947 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Wisall Holding AB DESCRIPTION:Logged deal\nTest deal log DTSTART:20170429T120900Z DTEND:20170429T130900Z UID:8b0069e27af19 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged interest\nHas shown interest DTSTART:20160718T124757Z DTEND:20160718T134757Z UID:c5298ca4041e1 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:WIP media DESCRIPTION:Logged interest\nHas shown interest DTSTART:20160718T124741Z DTEND:20160718T134741Z UID:0f75edfe91d72 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged interest\nHas shown interest DTSTART:20170127T064157Z DTEND:20170127T074157Z UID:9b39355269301 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:WIP media DESCRIPTION:Logged interest\nHas shown interest DTSTART:20170215T132012Z DTEND:20170215T142012Z UID:051253fab02cd DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Wisall Holding AB DESCRIPTION:Logged interest\nHas shown interest DTSTART:20170429T120944Z DTEND:20170429T130944Z UID:3ab2cf8eac258 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged meeting\nHi! DTSTART:20160905T140400Z DTEND:20160905T150400Z UID:3dba180e75039 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged meeting\nasdasd DTSTART:20160901T140400Z DTEND:20160901T150400Z UID:abc9e6b773c64 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged meeting\nasdasd DTSTART:20160909T140400Z DTEND:20160909T150400Z UID:92498f2de684d DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged meeting\nTest 1 DTSTART:20160928T150400Z DTEND:20160928T160400Z UID:b0d0b95f2dd33 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged meeting\nTest 2 DTSTART:20160929T162200Z DTEND:20160929T172200Z UID:b2ee0844a8274 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:LeaseOnline Sweden AB DESCRIPTION:Logged meeting\n30 sept meeting DTSTART:20160930T120400Z DTEND:20160930T130400Z UID:c949781fda21a DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:WIP media DESCRIPTION:Logged meeting\nMeeting time! DTSTART:20161001T050000Z DTEND:20161001T060000Z UID:6138364b7bd8c DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged meeting\ntest DTSTART:20161116T211900Z DTEND:20161116T221900Z UID:e7a678e89cc89 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Wisall Holding AB DESCRIPTION:Logged meeting\nTest meeting log DTSTART:20170429T120900Z DTEND:20170429T130900Z UID:a69ef68dad077 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged meeting\nTest meeting DTSTART:20170920T124200Z DTEND:20170920T134200Z UID:cf3e3d63ebd59 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged ToDo\nTodo. \nTest todo. DTSTART:20160601T080700Z DTEND:20160601T090700Z UID:4bb2a73ddab56 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged ToDo\nNew todo for testing some features. DTSTART:20160714T135400Z DTEND:20160714T145400Z UID:0c3ce20e05334 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged ToDo\nCheck it! DTSTART:20160719T104400Z DTEND:20160719T114400Z UID:336fef5464a1a DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged ToDo\nNext todo! DTSTART:20160705T104600Z DTEND:20160705T114600Z UID:2bdd9738035a8 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:LeaseOnline Sweden AB DESCRIPTION:Logged ToDo\ntodays todo DTSTART:20160929T170400Z DTEND:20160929T180400Z UID:913d0fa75544b DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged ToDo\nmejl fortfarande inte can DTSTART:20170321T085700Z DTEND:20170321T095700Z UID:c9c06843796c7 DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Svenska ProgrammerarPoolen AB DESCRIPTION:Logged ToDo\nand and and AND !! DTSTART:20170320T110800Z DTEND:20170320T120800Z UID:e543be65bc7cf DTSTAMP:20170920T102014Z END:VEVENT BEGIN:VEVENT SUMMARY:Wisall Holding AB DESCRIPTION:Logged ToDo\nSomething to do DTSTART:20170429T120900Z DTEND:20170429T130900Z UID:dbc2480782fae DTSTAMP:20170920T102014Z END:VEVENT END:VCALENDAR
Перед отправкой этих данных я отправляю следующие заголовки:
header('Content-type: text/calendar'); header('Content-Disposition: attachment; filename="calendar.ics"');
Спасибо за помощь!
Google – это правильные валидаторы, они не идеальны, но они дадут вам некоторое представление. Похоже, что вы не обрабатываете длину линии и новые строки правильно. Они жалуются на строку 32, я думаю, и на строку 271. Вам нужно пустое место в начале продолженной строки – вот почему она жалуется на \ n в начале строки.
! CRLF следует использовать для новых строк! Недопустимое имя [\ NTEST TODO