googledrive内のファイルをRから操作 - googledrive

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)

参考

An Interface to Google Drive • googledrive