2016-01-27 6 views
1

Я использую пример из https://developers.google.com/google-apps/calendar/v3/reference/events/insertGoogle Calendar V3 рубин API вставка событие

event = Google::Apis::CalendarV3::Event.new{ 
    summary:'Google I/O 2015', 
    location:'800 Howard St., San Francisco, CA 94103', 
    description:'A chance to hear more about Google\'s developer products.', 
    start: { 
    date_time: '2015-05-28T09:00:00-07:00', 
    time_zone:'America/Los_Angeles', 
    }, 
    end: { 
    date_time:'2015-05-28T17:00:00-07:00', 
    time_zone:'America/Los_Angeles', 
    } 
} 

result = service.insert_event(calendar_id, event) 

Однако я получил ошибку:

wwtlf:~/workspace $ ruby test.rb 
/usr/local/rvm/gems/ruby-2.3.0/gems/google-api-client-0.9.1/lib/google/apis/core/http_command.rb:202:in `check_status': required: Missing end time. (Google::Apis::ClientError) 
     from /usr/local/rvm/gems/ruby-2.3.0/gems/google-api-client-0.9.1/lib/google/apis/core/api_command.rb:103:in `check_status' 
     from /usr/local/rvm/gems/ruby-2.3.0/gems/google-api-client-0.9.1/lib/google/apis/core/http_command.rb:170:in `process_response' 
     from /usr/local/rvm/gems/ruby-2.3.0/gems/google-api-client-0.9.1/lib/google/apis/core/http_command.rb:275:in `execute_once' 
     from /usr/local/rvm/gems/ruby-2.3.0/gems/google-api-client-0.9.1/lib/google/apis/core/http_command.rb:107:in `block (2 levels) in execute' 
     from /usr/local/rvm/gems/ruby-2.3.0/gems/retriable-2.1.0/lib/retriable.rb:54:in `block in retriable' 
     from /usr/local/rvm/gems/ruby-2.3.0/gems/retriable-2.1.0/lib/retriable.rb:48:in `times' 
     from /usr/local/rvm/gems/ruby-2.3.0/gems/retriable-2.1.0/lib/retriable.rb:48:in `retriable' 
     from /usr/local/rvm/gems/ruby-2.3.0/gems/google-api-client-0.9.1/lib/google/apis/core/http_command.rb:104:in `block in execute' 
     from /usr/local/rvm/gems/ruby-2.3.0/gems/retriable-2.1.0/lib/retriable.rb:54:in `block in retriable' 
     from /usr/local/rvm/gems/ruby-2.3.0/gems/retriable-2.1.0/lib/retriable.rb:48:in `times' 
     from /usr/local/rvm/gems/ruby-2.3.0/gems/retriable-2.1.0/lib/retriable.rb:48:in `retriable' 
     from /usr/local/rvm/gems/ruby-2.3.0/gems/google-api-client-0.9.1/lib/google/apis/core/http_command.rb:96:in `execute' 
     from /usr/local/rvm/gems/ruby-2.3.0/gems/google-api-client-0.9.1/lib/google/apis/core/base_service.rb:267:in `execute_or_queue_command' 
     from /usr/local/rvm/gems/ruby-2.3.0/gems/google-api-client-0.9.1/generated/google/apis/calendar_v3/service.rb:1207:in `insert_event' 

Что плохое объект события из примера? Я попытался использовать dateTime insted date_time, но ошибка такая же.

UPD: Оригинальный пример:

event = Google::Apis::CalendarV3::Event.new{ 
    summary: 'Google I/O 2015', 
    location: '800 Howard St., San Francisco, CA 94103', 
    description: 'A chance to hear more about Google\'s developer products.', 
    start: { 
    date_time: '2015-05-28T09:00:00-07:00', 
    time_zone: 'America/Los_Angeles', 
    }, 
    end: { 
    date_time: '2015-05-28T17:00:00-07:00', 
    time_zone: 'America/Los_Angeles', 
    }, 
    recurrence: [ 
    'RRULE:FREQ=DAILY;COUNT=2' 
    ], 
    attendees: [ 
    {email: '[email protected]'}, 
    {email: '[email protected]'}, 
    ], 
    reminders: { 
    use_default: false, 
    overrides: [ 
     {method' => 'email', 'minutes: 24 * 60}, 
     {method' => 'popup', 'minutes: 10}, 
    ], 
    }, 
} 

enter image description here Очевидно, что существует много синтаксических ошибок. (пропущенный ') метод' => 'всплывающего окна', 'минут (упущенные'): 10

Итак, я решил изменить его:

event = Google::Apis::CalendarV3::Event.new{ 
    summary:'Google I/O 2015', 
    location:'800 Howard St., San Francisco, CA 94103', 
    description:'A chance to hear more about Google\'s developer products.', 
    start: { 
    date_time:'2015-05-28T09:00:00-07:00', 
    time_zone:'America/Los_Angeles', 
    }, 
    end: { 
    date_time:'2015-05-28T17:00:00-07:00', 
    time_zone:'America/Los_Angeles', 
    }, 
    recurrence: [ 
    'RRULE:FREQ=DAILY;COUNT=2' 
    ], 
    attendees: [ 
    {email: '[email protected]'}, 
    {email: '[email protected]'}, 
    ], 
    reminders: { 
    use_default: false, 
    overrides: [ 
     {'method' => 'email', 'minutes'=> 24 * 60}, 
     {'method' => 'popup', 'minutes'=> 10}, 
    ], 
    } 
} 

Но я до сих пор получил http_command.rb: 202 : в `check_status ': требуется: Отсутствует конечное время. (Google :: Apis :: ClientError)

+0

Не могли бы вы попробовать посмотреть (и вставить здесь), какие фактические HTTP reques t есть и что такое тело JSON события в нем? – luc

+0

Отказ от ответственности - не рубиновый dev. По какой-то причине объект 'end' не распознается. Я вижу, что ваш фрагмент кода похож на [образец в документации] (https://developers.google.com/google-apps/calendar/create-events), единственное, что я вижу (кроме некоторых свойств удаляется) является последним свойством ('end'), не заканчивается символом«, », как и другие объекты. Если вы проверяете другие объекты, они выглядят так, как будто они заканчиваются запятой, вы можете проверить это? – adjuremods

+0

Вы можете перенести «решение» из тела вопроса в реальный ответ - нормально отвечать на собственные вопросы в SO. – Nakilon

ответ

0

Я решил свою проблему. Хэш событие должно быть так:

event = Google::Apis::CalendarV3::Event.new({ 
    'summary':'Google I/O 2015', 
    'location':'800 Howard St., San Francisco, CA 94103', 
    'description':'A chance to hear more about Google\'s developer products.', 
    'start':{ 
    'date_time': DateTime.parse('2016-05-28T09:00:00-07:00'), 
    'time_zone': 'America/Los_Angeles' 
    }, 
    'end':{ 
    'date_time': DateTime.parse('2016-05-28T17:00:00-07:00'), 
    'time_zone': 'America/Los_Angeles' 
    } 
}) 

Также не забудьте предоставить доступ к календарю по severice accaunt электронной почты из файла JSON. «Client_email»: «[email protected]»,

2

В вашем примере вы создаете рубиновый блок, который равен:

Google::Apis::CalendarV3::Event.new do 
    # something 
end 

Но то, что вы хотите, чтобы пройти хэш, как это:

Google::Apis::CalendarV3::Event.new({ 
    key: value 
}) 
+0

Вы правы. На самом деле это пример Google. Как вы видите, я добавил скобки и вызываю конструктор «new», передавая хэш как agrument. – WWTLF

2

для меня, атм, работает этот синтаксис:

Google::Apis::CalendarV3::Event.new({ 
    :summary => 'event title', 
    :location => 'event address', 
    :description => 'event description', 
    :start => { 
    :date_time => 'event start time in rfc3339' 
    }, 
    :end => { 
    :date_time => 'event end time in rfc 3339' 
    } 
}) 
Смежные вопросы