概要
DorpBoxに上がったデータをダウンロードする必要があったため、
書いてみました。その忘備録。(アップロードの記事はたくさんあったけど、ダウンロード関係の記事がネット上になかった。。)
環境
Ruby 2.3
OSX 10.11.6 El Capitan
はじめにやること。
- DropBoxのアカウント取得
- DropBoxにアプリの登録とアクセストークンの取得 参考サイト
- gem install dropbox-sdk
成果物
本家のサイトの丸写しです汗
DropBox_file_dl.rb
#! usr/bin/env ruby
# coding: utf-8
require 'rubygems'
require 'dropbox_sdk'
APP_KEY = "ここに取得したキーを入力する。"
APP_SECRET = "ここに取得したシークレットキーを入れる。"
flow = DropboxOAuth2FlowNoRedirect::new(APP_KEY, APP_SECRET)
authorize_url = flow.start()
access_token = "ここにアクセストークンを入れる"
client = DropboxClient.new(access_token)
hash = client.metadata(path = "ここにダウンロードしたいファイルのあるパスを入れる。")
#ここは補足を参照してください。
hash.dig("contents").each_index {|i|
file_path = hash.dig("contents", i, "path")
contents = client.get_file(file_path)
fname = File.basename(file_path)
open(fname, "w") {|f| f.puts }
}
補足
dropbox_sdkのmetadateメソッドはハッシュで値を取得します。
構造としては以下の通りになっています。本家のサイト参照
"contents"キーの値として、配列が与えられて、さらにその中にハッシュでファイルのメタデータを格納してあります。
そこでHash#digメソッドで"contents"に該当する値を取得して、Array#each_indexメソッドで
配列のインデックスを取得して、Hash#digメソッドでcontentsキーの中の配列に該当するインデックスの要素の中のハッシュの中のpathキーの中のファイルパスを取得しています。
(日本語下手くそですみません。。)
{
"size": "0 bytes",
"hash": "37eb1ba1849d4b0fb0b28caf7ef3af52",
"bytes": 0,
"thumb_exists": false,
"rev": "714f029684fe",
"modified": "Wed, 27 Apr 2011 22:18:51 +0000",
"path": "/Photos",
"is_dir": true,
"icon": "folder",
"root": "dropbox",
"contents": [
{
"size": "2.3 MB",
"rev": "38af1b183490",
"thumb_exists": true,
"bytes": 2453963,
"modified": "Mon, 07 Apr 2014 23:13:16 +0000",
"client_mtime": "Thu, 29 Aug 2013 01:12:02 +0000",
"path": "/Photos/flower.jpg",
"photo_info": {
"lat_long": [
37.77256666666666,
-122.45934166666667
],
"time_taken": "Wed, 28 Aug 2013 18:12:02 +0000"
},
"is_dir": false,
"icon": "page_white_picture",
"root": "dropbox",
"mime_type": "image/jpeg",
"revision": 14511
}
],
"revision": 29007
}
終わりに
英語が読めるともっと本家様のサイトを理解できたのではと。本家様のサイトにはmetadataメソッドを使うと返って来る値はhashだよって記載があるのに、これJSON?JSONなの?と恥ずかしい誤解をしていました。。。(ほんと恥ずかしい。。)目指せ英語読解力アップです。
あとはサブルーチンとして、ローカルに落としたファイルを自動分類するとこまでかけたらまずは完成。
駄文失礼いたしましました。