2

私はからサンプルコードを取りました

http://code.google.com/p/google-api-ruby-client/source/browse/service_account/analytics.rb?repo=samples

しかし、私はそれを機能させるように努めてきましたが、どんなに頑張っても、それはただ与え続けます!これが私が取得し続けるエラーです

C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/signet-0.4.5/lib/signet/oauth_2/client.rb:875:in `fetch_access_token': Authorization failed.  Server message: (Signet::Authorization
Error)
{
  "error" : "invalid_grant"
}
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/signet-0.4.5/lib/signet/oauth_2/client.rb:888:in `fetch_access_token!'

これを解決するにはどうすればよいですか?

これが私の完全なコードです

    require 'google/api_client'
require 'date'
require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

# Update these to match your own apps credentials
service_account_email = 'xxxxxx' # Email of service account
key_file = 'privatekey.p12' # File containing your private key
key_secret = 'notasecret' # Password to unlock private key
profileID = 'xxxxx' # Analytics profile ID.


client = Google::APIClient.new()

# Load our credentials for the service account
key = Google::APIClient::KeyUtils.load_from_pkcs12(key_file, key_secret)
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/analytics.readonly',
  :issuer => service_account_email,
  :signing_key => key)

# Request a token for our service account
client.authorization.fetch_access_token!

analytics = client.discovered_api('analytics','v3')

startDate = DateTime.now.prev_month.strftime("%Y-%m-%d")
endDate = DateTime.now.strftime("%Y-%m-%d")

visitCount = client.execute(:api_method => analytics.data.ga.get, :parameters => { 
  'ids' => "ga:" + profileID, 
  'start-date' => startDate,
  'end-date' => endDate,
  'dimensions' => "ga:day,ga:month",
  'metrics' => "ga:visits",
  'sort' => "ga:month,ga:day" 
})

print visitCount.data.column_headers.map { |c|
  c.name  
}.join("\t")

visitCount.data.rows.each do |r|
  print r.join("\t"), "\n"
end

私はこれを機能させるために一日を費やしました。助けてください。御時間ありがとうございます。

4

1 に答える 1

5

解決しました!

私のコンピューターの時計はどういうわけか4時間遅れました!システム時刻を修正しました。エラーは発生しません。

1-Google API FAQを使用して、SSLエラーがある場合は解決します。

一日かかったので、ソリューションを残しておくので、将来は私のように夢中になる必要はありません。

account_email = '@developer.gserviceaccount.com' 
key_file = 'privatekey.p12' 
key_secret = 'notasecret' 
client = Google::APIClient.new()

key = Google::APIClient::KeyUtils.load_from_pkcs12(key_file, key_secret)

 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 => account_email,
   :signing_key => key)

# # Request a token for our service account
 client.authorization.fetch_access_token!
 service = client.discovered_api('calendar', 'v3')

何かを実行する例は、同様の方法のようになります。

  @event = {
    'summary' => '',
    'location' => 'this is where the location goes',
     'description' => 'desc',
    'start' => {
      'dateTime' => '2013-02-08T10:00:00.000-07:00' # Date with :- offset so (yyyy-mm-dd T hh:mm:ss.000-offset)
    },
    'end' => {
      'dateTime' => '2013-02-08T10:25:00.000-07:00' # Date with :- offset so (yyyy-mm-dd T hh:mm:ss.000-offset)
    }
  }

  # Create event using the json structure 
  result = client.execute(:api_method => service.events.insert,
                          :parameters => {'calendarId' => '**'},
                          :body => JSON.dump(@event),
                          :headers => {'Content-Type' => 'application/json'})
于 2013-02-11T01:21:43.177 に答える