0

目標は、Web アプリ用に 1 つの Google (YouTube) アカウントを持つことです。Web アプリのユーザーは、このアカウントを介して 1 つの YouTube チャンネルに動画をアップロードできます。何時間も経った後、私は最後にいます。Google ユーザー <-> Web アプリの対話を実装する方法のサンプルはたくさん見つかりましたが、そのような包括的なソリューションは必要ありません。

OAuth 2.0 (推奨) と Google API Ruby クライアント ( https://github.com/google/google-api-ruby-client )を試しています。

これまでのところ、Web アプリを使用して Google アカウント (YouTube チャンネルを持つ予定) を承認し、必要なすべてのスコープを含め、オフライン アクセスも承認しました。アクセス トークンを更新するためのメカニズムも用意されています。したがって、アクセス トークン、リフレッシュ トークン、クライアント ID、およびクライアント シークレットがあります。

しかし、単純な承認済みリクエストを送信する方法がわかりません。以下の結果は、「認証されていない使用の 1 日の制限を超えました」を返します。しばらくすると、何か問題が発生しました-クライアントIDとクライアントシークレットの一部が欠落していると思います。

問題は、Google API Ruby クライアントを使用して OAuth 2.0 を介して単純に承認されたリクエストを送信する方法です。ユーザーが 1 人だけで、必要な ID、シークレット、トークンがすべて揃っている場合です。

助けや提案をありがとう。

# Faraday connection
conn = Faraday.new(:url => 'https://accounts.google.com',:ssl => {:verify => false}) do |faraday|
  faraday.request  :url_encoded
  faraday.response :logger
  faraday.adapter  Faraday.default_adapter
end    

# Refresh token
result = conn.post '/o/oauth2/token', {
  'refresh_token' => "1/1lDIvifN******************dk9Akuc9ELVKM0",
  'client_id' => "61********506.apps.googleusercontent.com",
  'client_secret' => "********************g_dLfKmi",
  'grant_type' => 'refresh_token'}

@output = ActiveSupport::JSON.decode result.body
@access_token = @output['access_token']   
@token_type = @output['token_type'] 


# Google Client
client = Google::APIClient.new      

# YouTube API v3
api = client.discovered_api('youtube', 'v3')

# Retrieve list of playlists (not working)
@result = client.execute(
  :api_method => api.playlists.list,
  :parameters => {'part' => 'snippet', 'mine' => 'true'},
  :authorization => {'token_type' => @token_type, 'access_token' => @access_token}
)
4

1 に答える 1

0

わかりましたので、実行リクエストの :authorization パラメータは HTTP ヘッダー Authorization: token_type access_token 自体を追加しますが、そうではなく、問題でした。

したがって、これは機能します:

@result = client.execute(
  :api_method => api.playlists.list,
  :parameters => {'part' => 'snippet', 'mine' => 'true'},
  :authorization => {:token_type => @token_type, :access_token => @access_token},
  :headers => {:authorization => @token_type + ' ' + @access_token}
)
于 2014-02-01T10:27:43.213 に答える