2

ユーザーがログインしていない場合でもスケジュールされたビデオのアップロードを含め、ユーザーの youtube アカウントを管理するのに役立つサービスをセットアップしようとしています。認証に奇妙な問題があり、方法が見つからないようですそれを修正します。

私のomniauthイニシャライザ:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET'],
    {
      name: 'google',
      scope: 'http://gdata.youtube.com, email, profile, plus.me, youtube, youtube.upload',
      prompt: 'consent',
      access_type: 'offline',
      image_aspect_ratio: 'square
    }
end

承認のための私のコードの矢面:

YOUTUBE_SCOPE = 'https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.upload'

account = User.find(1234)
client = Google::APIClient.new(application_name: 'YouTube Delivery',
                               application_version: '1.0.0')
api = client.discovered_api('youtube', 'v3')

client.authorization.client_id = ENV['GOOGLE_CLIENT_ID']
client.authorization.client_secret = ENV['GOOGLE_CLIENT_SECRET']
client.authorization.grant_type = 'refresh_token'
client.authorization.refresh_token = account.refresh_token
client.authorization.scope = YOUTUBE_SCOPE
client.authorization.fetch_access_token! if client.authorization.expired?

このコードはすべて機能しているようです。ユーザーはサインインでき、適切なアクセス許可が要求されていることを確認しました。ユーザーは、オフラインでの同意を求めるプロンプトも表示されます。リフレッシュ トークンを取得し、現在のトークンの有効期限が切れたときに、リフレッシュ トークンを使用して新しいアクセス トークンを取得できます。問題ありません。

ユーザーがいないときに YouTube に動画をアップロードしようとすると、問題が発生します。

video = Video.find(1234)
request_body = {
  snippet: {
    title: video.title,
    description: video.youtube_description,
    tags: video.tags
  },
  status: { privacyStatus: 'private' }
}

response = client.execute!(
  api_method: api.videos.insert,
  body_object: request_body,
  media: Google::APIClient::UploadIO.new(video.local_path, 'video/*'),
  parameters: {
    uploadType: 'resumable',
    part: 'snippet,status'
  },
  authorization: client.authorization
)

これは、Googleがスローバックする場所ですGoogle::APIClient::AuthorizationError: Unauthorized

Google docs に従って、次のコマンドを実行してアクセス トークンをテストできます。

curl https://www.googleapis.com/youtube/v3/channels?part=id&mine=true&access_token=ACCESS_TOKEN

私にとって、これは次を返します:

 { "error": {
   "errors": [
     {
       "domain": "usageLimits",
       "reason": "dailyLimitExceededUnreg",
       "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",
       "extendedHelp": "https://code.google.com/apis/console"
     }
   ],
   "code": 403,
   "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
 }}

Google API コンソールでプロジェクトに次の API を追加したことを確認しました: 連絡先、Google+、YouTube データ、YouTube アナリティクス。また、すべての環境変数が適切に設定されていることも確認しました。

ここからどこへ行くべきかよくわかりません。どんなガイダンスも大歓迎です!

私のレールのバージョン: 4.1.6

4

0 に答える 0