2016-08-04 72 views
1

我创建了rails web应用程序。当用户进行某些操作时,我的应用必须在我的Google日历中创建新事件。对于我的任务,我选择服务器到服务器授权。未创建Rails + Google Calendar API事件

我写了下一个Ruby代码:

client = Google::APIClient.new({:application_name => "Rails calendar", 
         :application_version => "1.0"}) 

    keypath = Rails.root.join('config','google_secrets.p12').to_s 
    key = Google::APIClient::PKCS12.load_key(keypath, "notasecret") 

# generate request body for authorization 
    client.authorization = Signet::OAuth2::Client.new(
     :token_credential_uri => 'https://accounts.google.com/o/oauth2/token', 
     :audience    => 'https://accounts.google.com/o/oauth2/token', 
     :scope    => 'https://www.googleapis.com/auth/calendar', 
     :issuer    => '***', 
     :signing_key   => key).tap{ |auth| auth.fetch_access_token! } 


    api_method = client.discovered_api('calendar','v3').events.insert 
    @meeting_data = { 
     guests: [{email: '***@gmail.com'}, {email: '***@gmail.com'}], 
     start_time: "2016-08-10T19:00:00+03:00", 
     end_time: "2016-08-10T20:00:00+03:00", 
     topic: "Test meeting", 
     messages_thread_id: 2 
    } 

    event = { 
     summary: @meeting_data[:topic], 
     start: { 
      dateTime: @meeting_data[:start_time], 
      time_zone: 'Asia/Jerusalem' 
     }, 
     end: { 
      dateTime: @meeting_data[:end_time], 
      time_zone: 'Asia/Jerusalem' 
     }, 
     attendees: @meeting_data[:guests], 
     visibility: 'private', 
     reminders: { 
      useDefault: true, 
     } 
    } 

    result = client.execute(:api_method => api_method, 
          :parameters => {calendarId: 'primary'}, 
          :body => JSON.dump(event), 
          :headers => {'Content-Type' => 'application/json'}) 

    puts result.data.as_json 

但是,当我尝试使用代码和服务器返回我JSON作为结果,如果我去上的“创建”事件的网址,谷歌告诉我消息事件不存在。

{"kind"=>"calendar#event", "etag"=>"***", "id"=>"***", "status"=>"confirmed", "htmlLink"=>"https://www.google.com/calendar/event?eid=***", "created"=>"2016-08-04T11:54:46.000Z", "updated"=>"2016-08-04T11:54:46.327Z", "summary"=>"Test meeting", "creator"=>{"email"=>"***", "self"=>true}, "organizer"=>{"email"=>"***", "self"=>true}, "start"=>{"dateTime"=>"2016-08-10T16:00:00Z", "timeZone"=>"Asia/Jerusalem"}, "end"=>{"dateTime"=>"2016-08-10T17:00:00Z", "timeZone"=>"Asia/Jerusalem"}, "visibility"=>"private", "iCalUID"=>"***", "sequence"=>0, "attendees"=>[{"email"=>"***@gmail.com", "displayName"=>"***", "responseStatus"=>"needsAction"}, {"email"=>"***@gmail.com", "displayName"=>"***", "responseStatus"=>"needsAction"}], "reminders"=>{"useDefault"=>true}} 

回答

2

我面临同样的问题。需要给日历的“client_email”写入规则。

您使用组织日历。那就是为什么只有组织管理员才能做到。

相关问题