お客さんに、撮った動画を指定の共有フォルダーへアップしてくれるよう依頼しても、いつもルートフォルダーへアップするので、DropboxのAPIで解決した話です。
作ったプログラムは、ルートフォルダにあるファイルを、指定のフォルダーへ移動させるというものです。
では早速いきましょう。
1.DropboxのAPIを使えるようにする
こちらの記事が詳しいので、参考にしてください。
Individual Scopesの権限は、全て、 write read ができるようにしておいてください。
2.アクセストークンを取得する
Dropbox のアクセストークンは、数時間で期限が切れます。そこで、リフレッシュトークンを使って、実行のたびに新しいアクセストークンを取得するようにします。
curl コマンドで書くと次のとおりです(xxx はリフレッシュトークン、yyy:zzz は App key と App secret)。
|
1 |
curl https://api.dropbox.com/oauth2/token -d grant_type=refresh_token -d refresh_token=xxx -u yyy:zzz |
これを PHP で書く際にはまったのが、-u オプション(Basic 認証)の書き方です。PHP では CURLOPT_USERPWD に指定します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
function getToken(){ $ch = "https://api.dropbox.com/oauth2/token"; $parameters = array( "grant_type" => "refresh_token", "refresh_token" => "xxx", ); $curl=curl_init(); curl_setopt($curl, CURLOPT_URL, $ch); curl_setopt($curl, CURLOPT_USERPWD, 'yyy:zzz'); curl_setopt($curl, CURLOPT_POST, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($parameters)); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $response= curl_exec($curl); $resp = json_decode($response, true); curl_close($curl); return $resp['access_token']; } |
ここで取得したアクセストークンを、以下の関数の Authorization: Bearer xxx の xxx の部分に入れて使います。
3.ルートのファイル一覧を取得
下の関数でファイルが取得できます。
一つ注意することは、ルートパスのファイルを取得する場合、”path” => “/” ではなく、 “path” => “” とするということです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
function dfilelist($path){ $headers = array('Authorization: Bearer xxx', 'Content-Type: application/json'); $ch = curl_init('https://api.dropboxapi.com/2/files/list_folder'); $parameters = array( "path" => "$path", ); $curlOptions = array( CURLOPT_HTTPHEADER => $headers, CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($parameters), CURLOPT_RETURNTRANSFER => true, CURLOPT_VERBOSE => true ); curl_setopt_array($ch, $curlOptions); $response = curl_exec($ch); curl_close($ch); return $response; } |
4.ファイルの移動
ファイルを移動する関数は以下の通りです。
$filename には、「/hoge.jpg」などの変数を入れます。
to_pathに入れる変数が「/test/」のようにフォルダ名だけだとうまくいかないので注意してください。必ず、「/test/aaa.jpg」のようにファイル名まで指定する必要があります。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
function move($filename){ $headers = array('Authorization: Bearer xxx', 'Content-Type: application/json'); $ch = curl_init('https://api.dropboxapi.com/2/files/move_v2'); $parameters = array( 'from_path' => "$filename", 'to_path'=> "/test{$filename}", 'allow_ownership_transfer' => true, 'autorename'=> true, ); $curlOptions = array( CURLOPT_HTTPHEADER => $headers, CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($parameters), CURLOPT_RETURNTRANSFER => true, CURLOPT_VERBOSE => true ); curl_setopt_array($ch, $curlOptions); $response = curl_exec($ch); curl_close($ch); } |
以上となります。
日本語の解説記事が全然無いので、参考になれば幸いです。


