私はインターネット全体を検索して、正しい方向を示すことができる簡単な例を見つけようとしましたが、運が悪かったので、ここに私の質問があります:
Ubuntu Oneにログインして、自分のWebページからファイルを同期(またはほとんど読み取り)したいのですが、すべてPHPで実行されます。ファイルに到達する必要性はすべてそのページで説明されています:https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/
次のコマンドで最初のリクエストを完了することができます:
$url = 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%[email protected]%20try1';
$data = curlPetition(array('URL'=>$url,'USERPWD'=>'user:pass'));
$ar = fopen('uOne','w');fwrite($ar,$data['responseBody']);fclose($ar);
$tokenA = json_decode($data['responseBody'],1);
わかりました、curlPetitionは基本的なcurl請願のみを行います。有効なuser:passubuntuoneアカウントが必要であることに注意してください。 「consumer_secret」、「token」、「consumer_key」、「name」、「token_secret」を使用して、jsonで正しく応答を取得します。エントリでさえ、ubuntuの許可されたアプリにリストされているように見えます。
私は最新のOAuthPCLphpextensiónをインストールしました。しかし、私がしようとすると:
$api_url = 'https://one.ubuntu.com/api/file_storage/v1/';
$conskey = $tokenA['consumer_key'];
$conssec = $tokenA['consumer_secret'];
$token = $tokenA['token'];
$secret = $tokenA['token_secret'];
$oauth = new OAuth($conskey,$conssec,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
$oauth->enableDebug();
$oauth->enableSSLChecks();
$oauth->setToken($token,$secret);
$oauth->fetch($api_url.'~/Ubuntu%20One/');
print_r($oauth->getLastResponse());
手動Webログインを行うときに通過する「OpenIDトランザクション進行中」ページに移動します。私は間違いなく何か間違ったことをしています。 https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/から$oauth->fetch、$ oauth-> getAccessToken、$oauth->getRequestTokenを使用して2番目のステップを取得しようとしました。 403エラー:S
ペイロードがどのように機能するかを理解しようとしましたが、主な例は、トークンをほぼ自動化する「importubuntuone.couch.authasauth」を使用してPythonで記述されています。
ヒントが欲しいです。ありがとう
承認された回答:
問題は、https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/で定義されている「新しいトークンの作成」ワークフローのステップ2が、サービスが今週末、いくつかのポイントでダウンしました。この状況をトラップして対処する必要があります(503は、標準のHTTPに従って、後でリクエストを再試行する必要があることを示します)。
私は以下のPHPをテストしました(注意:私はPHPハッカーではないので、最も慣用的なコードではない可能性があります)。それは3つのステップを経ます:
- Ubuntu SSO(login.ubuntu.com)で新しいトークンを作成します(APIドキュメント)
- その新しいトークンについてUbuntuOneに通知します(APIドキュメント)
- その新しいトークンを使用して、Ubuntu OneファイルAPI(APIドキュメント)へのリクエストに署名します
以下にコメントされた個々の部分が表示されます。これは新しいトークンを要求して取得することを忘れないでください。トークンを取得したら(手順2の後)、どこかに保存します。毎回新しいものをリクエストしないでください。
<?php
function curlPetition($arr){
$curl = curl_init($arr['URL']);
if($arr['USERPWD']){curl_setopt($curl, CURLOPT_USERPWD, $arr['USERPWD']);}
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
$out = curl_exec($curl);
curl_close($curl);
$data['responseBody'] = $out;
return $data;
}
/* Define username and password details */
$email_address = '[email protected]';
$password = 'MY PASSWORD';
/* Step 1: Get a new OAuth token from Ubuntu Single-Sign-On */
$url = 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%[email protected]%20try1';
$data = curlPetition(array('URL'=>$url,'USERPWD'=> $email_address.':'.$password));
$tokenA = json_decode($data['responseBody'],1);
/* Set up that new token for use in OAuth requests */
$conskey = $tokenA['consumer_key'];
$conssec = $tokenA['consumer_secret'];
$token = $tokenA['token'];
$secret = $tokenA['token_secret'];
$oauth = new OAuth($conskey,$conssec,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
$oauth->enableDebug();
$oauth->enableSSLChecks();
$oauth->setToken($token,$secret);
/* Step 2: tell Ubuntu One about the new token (signed with the token itself) */
$tell_u1_about_token_url = 'https://one.ubuntu.com/oauth/sso-finished-so-get-tokens/' . $email_address;
$oauth->fetch($tell_u1_about_token_url);
print_r($oauth->getLastResponse());
/* Step 3: use the token to make a request to the Files API */
$api_url = 'https://one.ubuntu.com/api/file_storage/v1/';
$oauth->fetch($api_url.'~/Ubuntu%20One/');
print_r($oauth->getLastResponse());
?>