I\'m working to use the Google API Client: https://github.com/google/google-api-ruby-client
Specifically, I want to access Google Contacts via the Google API client usin
You're getting that error because you're using passing the wrong objects to
ContactList::GoogleContactsApi.new(client, auth)
. That gist expects for client
to be an instance of the dead Hurley HTTP client and auth
to be an OAuth2 instance from Google's Signet library. Instead you're trying to Intridea's OAuth2 libary.
Since Hurley is a dead project, and that gist lacks any unit tests, I'd recommend you use a tested and working implementation such as the google_contacts_api gem which is compatible with Intridea's OAuth2 library:
require 'google_contacts_api'
auth = User.first.authentications.first
client = OAuth2::Client.new('x', 'x', :site => 'https://accounts.google.com')
oauth2_object = OAuth2::AccessToken.new(client, auth.token)
google_contacts_user = GoogleContactsApi::User.new(oauth2_object)
The issue of refreshing tokens really belongs in a separate question. In short, you'll have to make a request for a new token periodically using the refresh token Google provides:
data = {
:client_id => GOOGLE_APP_KEY,
:client_secret => GOOGLE_APP_SECRET,
:refresh_token => oauth2_refresh_token_for_user,
:grant_type => "refresh_token"
}
response = ActiveSupport::JSON.decode(RestClient.post("https://accounts.google.com/o/oauth2/token"), data)
if response["access_token"].present?
puts response["access_token"]
else
# No Token
end
rescue RestClient::BadRequest => e
# Bad request
rescue
# Something else bad happened
end