Добавление повторяющегося события в Календарь Google через XML

Я пытаюсь добавить повторяющееся событие в свой календарь через API протокола. Я взял синтаксис тега повторения из события, созданного в интерфейсе Google, и использовал его в своем запросе на создание. Вот что я отправил:

<?xml version='1.0' encoding='utf-8' ?> 
<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005'> 
    <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category> 
    <title type='text'>Hi Stack Overflow!</title> 
    <content type='text'>Help me please!</content> 
    <gd:where valueString='StackOverflow.com'></gd:where> 
    <gd:recurrence>
        DTSTART;TZID=America/Los_Angeles:20090824T080000
        DTEND;TZID=America/Los_Angeles:20090824T090000 
        RRULE:FREQ=DAILY;WKST=SU;UNTIL=20090828T090000 
        BEGIN:VTIMEZONE TZID:America/Los_Angeles X-LIC-LOCATION:America/Los_Angeles 
        BEGIN:DAYLIGHT TZOFFSETFROM:-0800 TZOFFSETTO:-0700 TZNAME:PDT DTSTART:19700308T020000 
        RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU 
        END:DAYLIGHT 
        BEGIN:STANDARD TZOFFSETFROM:-0700 TZOFFSETTO:-0800 TZNAME:PST DTSTART:19701101T020000 
        RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU 
        END:STANDARD 
        END:VTIMEZONE
    </gd:recurrence> 
 </entry>

Событие добавляется, но не повторяется. Когда я смотрю на раздел повторения результирующего канала событий, RRULE, который определяет повторение, там нет.

Спасибо за любую помощь!


person KingErroneous    schedule 13.08.2009    source источник


Ответы (1)


Две вещи:

  1. Раздел вашего часового пояса недействителен - я считаю, что каждое свойство должно быть в отдельной строке.

  2. Ваше «UNTIL» должно быть временем UTC. Из RFC2445:

Если указано значение даты и времени, оно ДОЛЖНО быть указано в формате времени UTC.

Итак, вот полный пример, после корректировки местного времени на UTC для части «до» и расширения часового пояса:

DTSTART;TZID=America/Los_Angeles:20090824T080000
DTEND;TZID=America/Los_Angeles:20090824T090000 
RRULE:FREQ=DAILY;WKST=SU;UNTIL=20090828T160000Z
BEGIN:VTIMEZONE
TZID:America/Los_Angeles
X-LIC-LOCATION:America/Los_Angeles 
BEGIN:DAYLIGHT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
TZNAME:PDT
DTSTART:19700308T020000 
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU 
END:DAYLIGHT 
BEGIN:STANDARD
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
TZNAME:PST
DTSTART:19701101T020000 
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU 
END:STANDARD 
END:VTIMEZONE

У меня есть скрытое подозрение, что это возможно было недавним изменением.

В качестве альтернативы вы можете попробовать полностью опустить раздел VTIMEZONE - просто укажите TZID, который должен быть идентификатором, который, как вы знаете, поддерживает Календарь Google. Например:

DTSTART;TZID=America/Los_Angeles:20090824T080000
DTEND;TZID=America/Los_Angeles:20090824T090000 
RRULE:FREQ=DAILY;WKST=SU;UNTIL=20090828T160000Z
person Jon Skeet    schedule 13.08.2009
comment
Это плюс удаление ведущего пробела (я делал его отступ) сделало это. - person KingErroneous; 14.08.2009
comment
Была аналогичная проблема, и виновником был пробел! Благодарность - person aldrin; 17.12.2009