PHPからDropBox APIを使ってみた
今回は DropBox の API を PHP 用の公式 SDK を利用して試してみました。特に多くのユーザーに利用してもらうためではなく、自分用に使うためのコマンドラインツールみたいなものであれば、OAuth 認証の処理を書く必要もないので簡単に実装できます。
作成するアプリを登録する
まず DropBox 開発者向けサイトの「App Console」→「Create app」から作成するアプリを登録しましょう。
どのようなアプリを作るのかいくつか順に質問されるので、用途にあわせて選択します。ここでは、
- What type of app do you want to create? → DropBox API app
- What type of data does your app need to store on Dropbox? → Files and datastores
- Can your app be limited to its own folder? → No
- What type of files does your app need access to? → All file types
を選択しました。あとはアプリ名を入力して規約に同意するチェックを入れて完了します。これでアプリ情報の登録はOKです。
次にプログラムで利用するアクセストークンを取得します。アプリ登録完了時に表示される画面に「OAuth 2」という欄があるので、
↑ ここにある「Generated access token」の「Generate」ボタンをクリックします。
↑ これで自分のアカウント用のアクセストークンが生成されます。
このアクセストークンを他の人に知られてしまうと、自分の DropBox にフルアクセスされてしまうので絶対に他人に知られないようにしましょう。
PHP 向けの SDK を使う
次に PHP プログラム上から DropBox にアクセスするために SDK を導入します。Core API のページに各種言語用の SDK やドキュメントへのリンクがあるのでこれらのページを参考に導入します。自分は Composer を使っているので composer.json に “dropbox/dropbox-sdk”: “1.1.*” を追加して導入しました。
"require": { "dropbox/dropbox-sdk": "1.1.*" }
導入ができたらあとは簡単。まずは以下のようにインスタンスを生成します。
// 第1引数には先ほど取得したアクセストークンを指定 // 第2引数は HTTP リクエスト作成時に User-Agent にセットされる $dropbox = new \Dropbox\Client(YOUR_ACCESS_TOKEN, YOUR_USER_AGENT);
DropBox 上の特定フォルダ内の情報を取得したい場合は、
$res = $dropbox->getMetadataWithChildren('/'); $res = $dropbox->getMetadataWithChildren('/Public');
のように getMetadataWithChildren() メソッドを使用します。
DropBox 上のファイルを取得してローカルに保存する場合は、
$fp = fopen($localfilePath, 'w+b'); $res = $dropbox->getFile('/Some/file.txt', $fp); fclose($fp);
のように getFile() メソッドに対して取得したいファイルのパス及び、保存先ファイルのファイルポインタを与えるだけ。
逆にアップロードする場合も、
$fp = fopen($localfilePath, 'rb'); $res = $dropbox->uploadFile('/Some/file.txt', \DropBox\WriteMode::add(), $fp); fclose($fp);
というコードだけで完結するため簡単です。より詳しいところは「PHP Core API – Dropbox」をどうぞ。
メソッド実行時に返されるデータにはリビジョン情報も含まれているので、それを利用すれば DropBox 上で変更があった場合のみファイルをダウンロードといったことも実現できます。
実際に試してみるまでは DropBox 連携はめんどくさそうなイメージがあったのですが、公式に SDK が提供されていることもあり、単純なアップロードやダウンロードといった処理は容易に実装できることが分かりました。DropBox には他にも API で豊富な機能が提供されているので、時間を見て試してみたいと思います。
コメントを残す