google driveをコマンドラインで操作する

- gdriveの具体的な使い方
- gdriveでOCRを利用する方法
- jupyter notebookからgdriveをつかう


[gdrive] 英語になるが、ここに記述していないサンプルは[こちら](https://github.com/prasmussen/gdrive#examples)


#用意
gdrive - for 64bit
Windows7 - 64bit

#導入
[github](https://github.com/prasmussen/gdrive)からダウンロード
Cドライブにgdriveフォルダを作って放り込んでおく。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/349681/5e36942c-cdeb-b923-d783-3fcdc20beebb.png)


#使い方
```普段コマンドプロンプト使用しない人用.
C:\user>cd C:\gdrive
C:\gdrive>
```

- Googleドライブの中身を知る

```
C:\gdrive> gdrive list
Id                                             Name              Type   Size      Created
abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgz1   filename1.exe      bin    60 Mb     2019-02-11 00:00:00
abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgz2   filename2.exe      bin    60 Mb     2019-02-11 00:00:01
abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgz3   filename3          doc    60 Mb     2019-02-11 00:00:02
abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgz4   filename4.exe      dir    60 Mb     2019-02-11 00:00:03
```

#ダウンロード
- ファイル(bin)のダウンロード

```
C:\gdrive> gdrive download abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgz1
Downloading ファイル名.* -> ファイル名.*
Downloaded abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgz1 at 1000 KB/s, total 60 MB
```
・ファイル名はつかえない

- ディレクトリのダウンロード

```
C:\gdrive> gdrive download abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgz4 -r　もしくは --recursive
```
・最後に -r もしくは --recursive オプションをつける必要がある
・ファイル名はつかえない

#アップロード

- ファイルのアップロード

```
C:\gdrive> gdrive upload ファイル名.*
```

- ディレクトリのアップロード

```
C:\gdrive> gdrive upload ディレクトリ名.* -r　もしくは --recursive
```
・最後に -r もしくは --recursive オプションをつける必要がある

#OCRをつかう
txt形式に直接変換することはできない。
あくまでもgoogle document形式となる

```
C:/gdrive> gdrive import ファイル名.png -p abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgz3
```
・ファイル名はつかえない

#コマンドラインからgdriveを使う

```gdrive.
import subprocess
cmd = "gdrive list"
subprocess.call(cmd, shell=True) 
```
別記事でsubprocessモジュールについていろいろ確認する予定

#使用制限

```
Failed to get file: googleapi: Error 403: Rate Limit Exceeded, rateLimitExceeded
```

こういうようなエラーがでることがあるが、GoogleAPIには一日の使用回数に制限がある。
![yoZku.png](https://qiita-image-store.s3.amazonaws.com/0/349681/1bb08bc6-87e0-5b53-2eef-52389bebe7d3.png)
1,000,000,000 回/一日
1000 回/100秒/1人

とのこと。

#細かい設定(query)について
各コマンドにqueryがつかえる。
queryは、ファイル・フォルダに含まれている文字レベルでの検索・操作を可能にする機能。

たとえばこんなことができる。

```フォルダにsがはいっているものをリストに出力.
C:/gdrive> gdrive list -q "name contains 's'"

```
これはめちゃめちゃ便利。

指定ファイルをダウンロードするときは

```フォルダにsがはいっているものをリストに出力.
C:/gdrive> download query "name contains 's'"

```

```mimeで拡張子を決めてからダウンロード.
C:/gdrive> gdrive export --mime text/plain abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgz3

```
mimeの設定については[こちら](https://developers.google.com/drive/api/v3/manage-downloads)
Corresponding MIME typeの列にいろいろと書いてあります。
・HTMLでダウンロードしたいなら、text/htmlとか。
・PDFでダウンロードしたいなら、application/pdfとか。
・エクセルでダウンロードしたいなら、application/vnd.openxmlformats-officedocument.spreadsheetml.sheetとか。

#まとめ、今後
ファイル、フォルダ指定に`ファイル名`、`フォルダ名`が直接つかえないことがあり、そこが一番めんどうだった。
gdrive list命令でIDを取得できるなら、それを使えということか。

バッチファイルでコマンドラインの自動化ができるようなので、今後一連の流れを記述したものを作っていきたい。

#参考
[Qiita - Google が提供する API のリクエスト上限数一覧](https://qiita.com/minodisk/items/934903a937813fcf1e30)
[Qiita - pythonanywhereでファイルのバックアップにGoogleドライブを使う方法](https://qiita.com/haessal/items/fa94b770275643144d0f)
[stackoverflow - What is the limit on Google Drive API usage?](https://stackoverflow.com/questions/10311969/what-is-the-limit-on-google-drive-api-usage)