OAuth2.0アクセスを承認するために外部ページにアクセスすることを完全にバイパスする方法は(私が見つけた)本当にありません。最も近いのは、code.google.com/apis/console で「Installed Application」プロジェクトを作成し、デバイスの方法論を使用することです。クライアント ID とクライアント シークレットを受け取ります。これらは後で使用します。code.google.com/apis/youtube/dashboard/ を通じて、開発者キーを生成するのが理想的ですが、現時点ではこれが必要になるとは思いません。
ヘッダーと応答に JSON 表記を使用します。選択した言語に簡単に適応できるはずです。
まず、ヘッダーを使用して accounts.google.com/o/oauth2/device/code に POST リクエストを送信します。
{
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': post_data.length,
'X-GData-Key': 'key=YOUR_DEVELOPER_KEY'
}
および以下を含むデータ:
{
client_id: 'YOUR_CLIENT_ID',
scope: 'https://gdata.youtube.com'
}
YOUR_CLIENT_ID は、前に設定した Google API プロジェクト用に取得したクライアント ID です。
次のような応答が返されます。
{
"device_code" : "4/Pj8m71w5XuEMTT0ZwOJVgvlTfF4Q",
"user_code" : "5wtw67wm",
"verification_url" : "http://www.google.com/device",
"expires_in" : 1800,
"interval" : 5
}
www.google.com/device (「verification_url」フィールドで定義) に 30 分 (「expires_in」応答フィールドごとに 1800 秒) 以内にアクセスしない場合、この最初のリクエストを再度実行する必要があります。www.google.com/device ページで、まだログインしていない場合はログインし、確認コード (「user_code」応答フィールドで定義) を入力するよう求められます。アプリケーションを承認するためのリクエストと、アプリがリクエストしている権限のリストが表示されます。「device_code」フィールドの値を (少なくとも一時的に) 保存したいとします。これは、アクセス トークンとリフレッシュ トークンを要求するときに使用されます。
アクセス許可が付与されたので、アクセス/リフレッシュ トークンのペアを要求できます。これは、リフレッシュ トークンを保存する場合にのみ行う必要があります。アクセス トークンとリフレッシュ トークンのペアをリクエストするには、accounts.google.com/o/oauth2/token にヘッダーを付けて POST リクエストを行う必要があります。
{
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': post_data.length,
'X-GData-Key': 'key=YOUR_DEVELOPER_KEY'
}
そしてデータ
{
client_id: 'YOUR_CLIENT_ID',
client_secret: 'YOUR_CLIENT_SECRET',
code: 'YOUR_DEVICE_CODE',
grant_type: 'http://oauth.net/grant_type/device/1.0'
}
応答は次のようになります
{
"access_token" : "YOUR_ACCESS_TOKEN",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "YOUR_REFRESH_TOKEN"
}
これは、アクセス トークンが 3600 秒 (60 分) で期限切れになること、および現在のアクセス トークンと更新トークンが何であるかを指定します。現在のセッションで使用するためにアクセス トークンを保存し、今後のセッションのために更新トークンを保存します。
API リクエストを作成するときは、Authorization ヘッダー フィールドにアクセス トークンを含め、これまでどおり開発者キーを含める必要があります。ビデオをアップロードするために、次のヘッダーを使用しました。
{
'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
'X-GData-Key': 'key=YOUR_DEVELOPER_KEY',
'Slug': 'video.mp4',
'Content-Type': 'multipart/related; boundary="f897a6d"',
'Content-Length': post_length,
'Connection': 'close'
}
古いトークンの有効期限が切れたときだけでなく、いつでもアクセス トークンを更新できます。アクセス トークンを更新するには、ヘッダーを使用して accounts.google.com/o/oauth2/token に POST リクエストを送信します。
{
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': post_data.length,
'X-GData-Key': 'key=YOUR_DEVELOPER_KEY'
}
そしてデータ
{
client_id: 'YOUR_CLIENT_ID',
client_secret: 'YOUR_CLIENT_SECRET',
refresh_token: 'YOUR_REFRESH_TOKEN',
grant_type: 'refresh_token'
}
このような応答が得られます
{
"access_token" : "YOUR_NEW_ACCESS_TOKEN",
"token_type" : "Bearer",
"expires_in" : 3600
}
YOUR_NEW_ACCESS_TOKEN は、今後のリクエストで使用する新しいトークンです。