Attempt to fix formatting of code examples:
EventController.rb
event_hash = { :data => {
:title => "Tennis with Beth",
:details => "Meet for a quick lesson.",
:transparency => "opaque", :status =>
"confirmed", :location => "Rolling Lawn Courts",
:when => [{
:start => "2012-04-17T15:00:00.000Z",
:end => "2012-04-17T17:00:00.000Z" }]
} }
event_data = event_hash.to_json auth_string = "Bearer "
+ google_oauth2_credential.access_token
header_hash = { 'Content-Type' => 'application/json',
'Authorization' => auth_string,
'GData-Version' => '2' }
response = post_to_https('https://www.google.com/calendar/feeds/
default/private/full',
event_data, header_hash) #note see
ApplicationController paste below to see the post_to_https method
if response.code == '302' uri_string =
response.response['Location'] response = post_to_https(uri_string,
event_data, header_hash) render :text => "302 " + response.body
else render :text => "not 302 " + response.body) end
ApplicationController.rb
def post_to_https(url_string, params_hash, header_hash = {}) uri
= URI.parse(url_string) http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true http.verify_mode =
OpenSSL::SSL::VERIFY_PEER request =
Net::HTTP::Post.new(uri.request_uri)
request.set_form_data(params_hash) unless header_hash.empty?
header_hash.each { |key, value| request[key] = value } end
return http.request(request) end
On Nov 7, 7:35 pm, tks <[email protected]> wrote:
> Hello,
>
> I am trying to set up my Rails application to connect to the calendar
> api. I am following the Oauth2 documentation here:
>
> http://code.google.com/apis/accounts/docs/OAuth2.html#SS
>
> and the instructions for creating a single event on a user's private
> calendar here:
>
> http://code.google.com/apis/calendar/data/2.0/developers_guide_protoc...
>
> I have been able to generate the Oauth2 access and refresh tokens
> using the server side strategy, but whenever I query the api I get the
> following error:
>
> {"apiVersion":"2.6","error":{"code":400,"message":"Invalid
> JSON","errors":
> [{"domain":"GData","code":"invalidJson","internalReason":"Invalid
> JSON"}]}}
>
> (This is the same error given in this
> threadhttp://groups.google.com/group/google-calendar-help-dataapi/browse_th...
> except I am passing GData-Version: 2 into the http post header, so the
> apiVersion is different )
>
> The json I am using is the example event data given in the protocol
> document in the second reference link above. As far as I can tell this
> is generally happening after the second time I query the api after
> getting the 302 redirect. Would greatly appreciate it if someone would
> explain what this error means and how to get around it. I'm including
> the relevent code from my app below:
>
> EventController.rb
>
> event_hash = { :data => {
> :title => "Tennis with Beth",
> :details => "Meet for a quick
> lesson.",
> :transparency => "opaque",
> :status => "confirmed",
> :location => "Rolling Lawn Courts",
> :when => [
> {
> :start =>
> "2012-04-17T15:00:00.000Z",
> :end =>
> "2012-04-17T17:00:00.000Z"
> }
> ]
> }
> }
>
> event_data = event_hash.to_json
>
> auth_string = "Bearer " +
> google_oauth2_credential.access_token
> header_hash = { 'Content-Type' => 'application/json',
> 'Authorization' => auth_string, 'GData-Version' => '2' }
>
> response = post_to_https('https://www.google.com/calendar/
> feeds/default/private/full', event_data, header_hash)
> # note see ApplicationController paste below to see the
> post_to_https method
>
> if response.code == '302'
> uri_string = response.response['Location']
> response = post_to_https(uri_string, event_data,
> header_hash)
> render :text => "302 " + response.body
> else
> render :text => "not 302 " + response.body)
> end
>
> ApplicationController.rb
>
> def post_to_https(url_string, params_hash, header_hash = {})
> uri = URI.parse(url_string)
> http = Net::HTTP.new(uri.host, uri.port)
> http.use_ssl = true
> http.verify_mode = OpenSSL::SSL::VERIFY_PEER
> request = Net::HTTP::Post.new(uri.request_uri)
> request.set_form_data(params_hash)
>
> unless header_hash.empty?
> header_hash.each { |key, value| request[key] = value }
> end
>
> return http.request(request)
> end
--
You received this message because you are subscribed to the Google
Groups "Google Calendar Data API" group.
To post to this group, send email to
[email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://code.google.com/apis/calendar/community/forum.html