2014-09-03 3 views
4

Я пытаюсь получить доступ к API контактов Google.Доступ к API контактов Google на Ruby

Сначала я попробовал жемчужину google-api-ruby-client, но оказалось, что это does not support the Contacts API.

Следующая выстрел был google_contacts_apigem, но я изо всех сил, чтобы получить oauth_access_token_for_user с oAuth2gem. Когда я следую за oAuth2 instructions, я не знаю, что положить в authorization_code_value и Basic some_password.

Я попытался следующие:

require 'oauth2' 
client = OAuth2::Client.new(ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET'], :site => 'http://localhost:9292') 
=> #<OAuth2::Client:0x007fcf88938758 @id="blabla.apps.googleusercontent.com", @secret="blabla", @site="http://localhost:9292", @options={:authorize_url=>"/oauth/authorize", :token_url=>"/oauth/token", :token_method=>:post, :connection_opts=>{}, :connection_build=>nil, :max_redirects=>5, :raise_errors=>true}> 

client.auth_code.authorize_url(:redirect_uri => 'http://localhost:9292') 
=> "http://localhost:9292/oauth/authorize?client_id=blabla.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A9292&response_type=code" 

token = client.auth_code.get_token('authorization_code_value', :redirect_uri => 'http://localhost:9292', :headers => {'Authorization' => 'Basic some_password'}) 
=> Faraday::ConnectionFailed: Connection refused - connect(2) for "localhost" port 9292 

Я был бы признателен, если кто-то может дать мне подробный пошаговые инструкции, как получить доступ к API.

ответ

6

Убедитесь, что приложение настроено правильно и что вы позволили Contacts API в Google Developers Console. Тогда попробуйте это:

CLIENT_ID = '?????.apps.googleusercontent.com' 
CLIENT_SECRET = 'your_secret' 
REDIRECT_URI = 'your_redirect_uri' 
client = OAuth2::Client.new(CLIENT_ID, CLIENT_SECRET, 
      site: 'https://accounts.google.com', 
      token_url: '/o/oauth2/token', 
      authorize_url: '/o/oauth2/auth') 
url = client.auth_code.authorize_url(scope: "https://www.google.com/m8/feeds", 
      redirect_uri: REDIRECT_URI) 

Посетите url в вашем браузере и войти в Google. URL-адрес, на который вы перенаправлены впоследствии, будет содержать токен в параметре code. Это будет выглядеть следующим образом (это следующая строка не код запуска):

actual_redirect_url = "#{REDIRECT_URI}?code=#{code}" 

Разбираем код из URL переадресации, а затем

token = client.auth_code.get_token(code, :redirect_uri => REDIRECT_URI) 

Редактировать

Кто-то спросил в комментирует, как передать токен в библиотеку google_contacts_api. (Я написал библиотеку, поэтому я должен знать!)

token является объектом OAuth2::AccessToken в этом примере. Все, что вам нужно сделать, это передать его в конструктор:

user = GoogleContactsApi::User.new(token) 

Чтобы быть очень ясно, конструктор принимает объект-маркер, а не строка.

+0

Спасибо, alvin, но я застрял. Я могу получить доступ к токену доступа в этом формате: # . Но теперь, как я буду продолжать работу с gogle google_contacts_api. Как я должен передать ему токен. Я был бы признателен, если бы вы могли дать что-то немного подробное? – ben

+0

Все, что вам нужно сделать, это передать токен конструктору: 'GoogleContactsApi :: User.new (токен)' – alvin

+0

Ваш ответ помог мне разрешить и даже получить токен. Когда я передаю токен конструктору, как вы предположили, он дает ошибку. Я разместил вопрос об этом http://stackoverflow.com/questions/26052480/how-to-access-google-contacts-api-in-ruby. Plz взгляните на вопрос – ben

Смежные вопросы