An Interface to Google Drive • googledriveを使ってみた
特徴
- ほとんどの関数は
drive_
で始まっているおかげでgoogledrive
パッケージの関数を自動補完で呼び出しやすい。 find
,ls
,mv
,cp
,mkdir
,rm
といったUINIXコマンドを打つようにgoogleドライブを操作することを目標としている。googledrive
では、"Drive tibble" 略してdribbleというオブジェクトにメタデータを保存する。dribbleはファイル名、ファイルIDなどを含む。%>%
でパイプが利用可能。
インストール
CRANからインストール可能
> install.packages("googledrive")
使用法
まずは例の如くライブラリを読み込む。
> library("googledrive")
ファイルの検索
> drive_find(n_max = 50) #> Auto-refreshing stale OAuth token. #> # A tibble: 50 x 3 #> name id drive_resource #> * <chr> <chr> <list> #> 1 chicken-xyz.csv 0B0Gh-SuuA2nTVUZGclZiSzZ0bkE <list [37]> #> 2 chicken-rm.txt 0B0Gh-SuuA2nTT3dBbXd1ZWtvSkE <list [38]> #> 3 chicken.jpg 0B0Gh-SuuA2nTbEhtYnIzcFNfX3M <list [40]> #> 4 README-mirrors.csv 1LJlt-1emr662GV8WdEzddzsfqrt-Vg… <list [33]> #> 5 README-mirrors.csv 1PLXfempSnjpXbKVEXwMG5vBEnd-Fwm… <list [33]> #> 6 def 0B0Gh-SuuA2nTRG5YWFVGaV8zbU0 <list [31]> #> 7 abc 0B0Gh-SuuA2nTT2NqTGdLVWFkcjA <list [31]> #> 8 folder1-level4 0B0Gh-SuuA2nTaTR6elE0TjZUUHM <list [32]> #> 9 folder1-level3 0B0Gh-SuuA2nTWktWeTB0ajVoQjQ <list [32]> #> 10 cranberry-TEST-drive-ls 1PM--xCb5axy5Uu9f6fDNjPAN2psRbQ… <list [32]> #> # ... with 40 more rows
パターンマッチ、ファイルタイプ(MIME)で検索をかけることもできる。
> drive_find(pattern = "chicken") > drive_find(type = "spreadsheet") ## Google Sheets! > drive_find(type = "csv") ## MIME type = "text/csv" > drive_find(type = "application/pdf") ## MIME type = "application/pdf"
Google Drive API で利用可能なクエリパラメータを用いて検索することも可能。
'horsebean'という文字列をファイル内に含むものを検索したい場合は以下のようにする。
(files <- drive_find(q = "fullText contains 'horsebean'")) #> # A tibble: 8 x 3 #> name id drive_resource #> * <chr> <chr> <list> #> 1 chickwts 0B0Gh-SuuA2nTN05CNjk3bG… <list [38]> #> 2 chickwts_gdoc-TEST-drive-publish 1BHmmAyclG4RQS7hOJpeKlI… <list [32]> #> 3 foobar 1qoA3kr9DmSTtsG9hoicP7y… <list [32]> #> 4 foobar 0B0Gh-SuuA2nTa01CaXZZOW… <list [39]> #> 5 chickwts-TEST-drive-publish 0B0Gh-SuuA2nTSjh6SElzSV… <list [39]> #> 6 chickwts_gdoc-TEST-drive-list 1lA8iYCyFyFi7T_qe7UrYyB… <list [32]> #> 7 chickwts_txt-TEST-drive-publish 0B0Gh-SuuA2nTaU1CRmR2ZG… <list [38]> #> 8 hadley-googledrive-tour 1CndPuuAlTGNJkyqqE-CNuw… <list [32]>
ファイルのダウンロード
google drive中のファイルはGoogle Documents, Google Sheets, Google Slidesなどのnativeなファイルタイプになっているので、一般的なフォーマットに変換する必要がある。
デフォルトでファイルのフォーマットは自動的に選択されるが、明示的に指定する場合はtype=
で指定する。
> drive_download("538-star-wars-survey", type = "csv", overwrite = TRUE) #> File downloaded: #> * 538-star-wars-survey #> Saved locally as: #> * 538-star-wars-survey.csv
path=
を指定してファイルフォーマットを指定することも可能。
> drive_download( "538-star-wars-survey", path = "538-star-wars-survey.csv", overwrite = TRUE ) #> File downloaded: #> * 538-star-wars-survey #> Saved locally as: #> * 538-star-wars-survey.csv
ファイルのアップロード
ファイルのアップロードにはdrive_upload
関数を用いる。
> (chicken <- drive_upload( drive_example("chicken.csv"), "README-chicken.csv" )) #> Local file: #> * /Users/jenny/resources/R/library/googledrive/extdata/chicken.csv #> uploaded into Drive file: #> * README-chicken.csv: 1w9vv35y7pNE6q_wl3EYoh5ty_GO44gj0 #> with MIME type: #> * text/csv #> # A tibble: 1 x 3 #> name id drive_resource #> * <chr> <chr> <list> #> 1 README-chicken.csv 1w9vv35y7pNE6q_wl3EYoh5ty_GO44gj0 <list [37]>
type
はデフォルトだと自動的に決められるが、明示的に指定することも可能。
> chicken_sheet <- drive_upload( drive_example("chicken.csv"), "README-chicken.csv", type = "spreadsheet" ) Local file: * /home/kimoton/R/x86_64-pc-linux-gnu-library/3.4/googledrive/extdata/chicken.csv uploaded into Drive file: * README-chicken.csv: 10IL80OCfOUrVNmQiyeXyz92ss_uko2zfDX5MxpAX-NA with MIME type: * application/vnd.google-apps.spreadsheet
ファイルの公開
Google Documents, Google Sheets, Google Presentationのファイルは、drive_publish()
関数で公開できる。
> (chicken_sheet <- drive_publish(chicken_sheet)) #> Files now published: #> * README-chicken.csv: 12ZzU5hS7GFQdpJBoVzBz3p8Xie2uNmCuNJNUVemGF9k #> # A tibble: 1 x 7 #> name published shared id drive_resource permissions_res… #> * <chr> <lgl> <lgl> <chr> <list> <list> #> 1 README-… TRUE TRUE 12ZzU5hS7GFQd… <list [33]> <list [2]> #> # ... with 1 more variable: revision_resource <list>
ファイルの公開状況を確認する際はdrive_reveal()
を使う。
> chicken_sheet %>% drive_reveal("published") #> # A tibble: 1 x 7 #> name published shared id drive_resource permissions_res… #> * <chr> <lgl> <lgl> <chr> <list> <list> #> 1 README-… FALSE TRUE 12ZzU5hS7GFQd… <list [33]> <list [2]> #> # ... with 1 more variable: revision_resource <list>
ファイルの削除
drive_rm
コマンドで行う。単純に引数に削除したいファイルを渡すだけ。
> drive_rm(chicken_sheet, text_file)