ユーザーがログインしていない場合でもスケジュールされたビデオのアップロードを含め、ユーザーの 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