查询不符合获得youtube分析的期望

时间:2014-02-11 23:39:49

标签: ruby-on-rails ruby youtube-api google-api google-oauth

我使用omniauth创建了一个rails应用程序,允许用户使用google登录并跟踪他们的YouTube视频分析。我使用以下宝石:omniauth-google-oauth2google-api-client并遵循一些provided examples。用户授权应用程序获取分析(一次),之后每天收集它们。

这是omniauth.rb范围,client_id和client_secret。我成功获得了access_token和refresh_token。

provider :google_oauth2, ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET'], { 
  :scope => "yt-analytics.readonly,userinfo.email,userinfo.profile" 
}

使用私钥在后台成功获取客户端访问令牌:

key = Google::APIClient::KeyUtils.load_from_pkcs12('xxx-privatekey.p12', 'notasecret')
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/yt-analytics.readonly',
  :issuer => 'xxx-yyy@developer.gserviceaccount.com',
  :signing_key => key)
client.authorization.fetch_access_token!

我正在使用以下行执行报告查询:

# [Query 1]

client.execute!(:api_method => youtube_analytics.reports.query, :parameters => {
  :ids => 'channel==own_channel_id', 
  'end-date' => '2014-02-15', 
  'start-date' => '2014-02-01', 
  :metrics => 'views'
})

即使对于这个一般查询,我收到以下错误消息:

Google::APIClient::ClientError: Invalid query. Query did not conform to the expectations.

如果我执行[查询1]的url版本甚至更复杂的查询,我确实成功获取了正确的json:

https://www.googleapis.com/youtube/analytics/v1/reports?ids=channel%3D%3DUown_channel_id&start-date=2013-10-01&end-date=2014-10-31&metrics=views%2Ccomments%2CfavoritesAdded%2Clikes%2Cdislikes%2CestimatedMinutesWatched%2CaverageViewDuration&key={YOUR_API_KEY}
你能告诉我吗?

谢谢。

更新1:经过进一步调查后,我认为问题可能与令牌的生成有关,因为这是请求中的唯一区别(我和谷歌api资源管理器生成的请求) 。

可能不是主要问题,但仍然是:client.authorization.fetch_access_token!生成的持有人令牌长度为78个字符,而google api资源管理器的令牌长度为85个字符。要在client.execute!我添加client.authorization.access_token = [token-obtained-by-api-explorer]并返回正确结果之前验证这一点。

我正在添加两个完整的示例(都返回“...查询不符合预期......”错误):https://gist.github.com/rebelact/9135573https://gist.github.com/rebelact/9135594。我从https://www.youtube.com/account_advanced

获得了我的频道ID

更新2:经过多次挖掘后,我得知用刷新后的刷新令牌。我发现了这条评论 - https://github.com/zquestz/omniauth-google-oauth2/issues/37#issuecomment-15734250,它最初刷新了令牌。但经过一段时间后,它开始抛出错误"{'error' : 'invalid_grant'}"。我读了它,我相信我传递了正确的凭据,我的时钟根据NTP同步(我在heroku上得到了同样的错误)。您能否提一些建议? (如果你想打开另一个问题,请告诉我)

0 个答案:

没有答案