update readme
This commit is contained in:
parent
a8700a2994
commit
db3a1101a6
66
compare.md
66
compare.md
|
@ -1,63 +1,63 @@
|
||||||
# 对比本工具和其他类似工具在 server side copy 的速度上的差异
|
# 對比本工具和其他類似工具在 server side copy 的速度上的差異
|
||||||
|
### 這裡使用機器翻譯直接簡轉繁, 大家看得懂就好: )
|
||||||
|
以拷貝[https://drive.google.com/drive/folders/1W9gf3ReGUboJUah-7XDg5jKXKl5XwQQ3](https://drive.google.com/drive/folders/1W9gf3ReGUboJUah-7XDg5jKXKl5XwQQ3)為例([文件統計](https://gdurl.viegg.com/api/gdrive/count?fid=1W9gf3ReGUboJUah-7XDg5jKXKl5XwQQ3))
|
||||||
|
共 242 個文件和 26 個文件夾
|
||||||
|
|
||||||
以拷贝[https://drive.google.com/drive/folders/1W9gf3ReGUboJUah-7XDg5jKXKl5XwQQ3](https://drive.google.com/drive/folders/1W9gf3ReGUboJUah-7XDg5jKXKl5XwQQ3)为例([文件统计](https://gdurl.viegg.com/api/gdrive/count?fid=1W9gf3ReGUboJUah-7XDg5jKXKl5XwQQ3))
|
如無特殊說明,以下運行環境都是在本地命令行(掛代理)
|
||||||
共 242 个文件和 26 个文件夹
|
|
||||||
|
|
||||||
如无特殊说明,以下运行环境都是在本地命令行(挂代理)
|
## 本工具耗時 40 秒
|
||||||
|
|
||||||
## 本工具耗时 40 秒
|
|
||||||
<!-- ![](https://viegg.oss-cn-shenzhen.aliyuncs.com/1592732262296.png) -->
|
<!-- ![](https://viegg.oss-cn-shenzhen.aliyuncs.com/1592732262296.png) -->
|
||||||
![](static/gdurl.png)
|
![](static/gdurl.png)
|
||||||
|
|
||||||
另外我在一台洛杉矶的vps上执行相同的命令,耗时23秒。
|
另外我在一台洛杉磯的vps上執行相同的命令,耗時23秒。
|
||||||
这个速度是在使用本项目默认配置**20个并行请求**得出来的,此值可自行修改(下文有方法),并行请求数越大,总速度越快。
|
這個速度是在使用本項目默認配置**20個並行請求**得出來的,此值可自行修改(下文有方法),並行請求數越大,總速度越快。
|
||||||
|
|
||||||
## AutoRclone 耗时 4 分 57 秒(去掉拷贝后验证时间 4 分 6 秒)
|
## AutoRclone 耗時 4 分 57 秒(去掉拷貝後驗證時間 4 分 6 秒)
|
||||||
<!-- ![](https://viegg.oss-cn-shenzhen.aliyuncs.com/1592732547295.png) -->
|
<!-- ![](https://viegg.oss-cn-shenzhen.aliyuncs.com/1592732547295.png) -->
|
||||||
![](static/autorclone.png)
|
![](static/autorclone.png)
|
||||||
|
|
||||||
## gclone 耗时 3 分 7 秒
|
## gclone 耗時 3 分 7 秒
|
||||||
<!-- ![](https://viegg.oss-cn-shenzhen.aliyuncs.com/1592732597593.png) -->
|
<!-- ![](https://viegg.oss-cn-shenzhen.aliyuncs.com/1592732597593.png) -->
|
||||||
![](static/gclone.png)
|
![](static/gclone.png)
|
||||||
|
|
||||||
## 为什么速度会有这么大差异
|
## 為什麽速度會有這麽大差異
|
||||||
首先要明确一下 server side copy(后称ssc) 的原理。
|
首先要明確一下 server side copy(後稱ssc) 的原理。
|
||||||
|
|
||||||
对于 Google Drive 本身而言,它不会因为你ssc复制了一份文件而真的去在自己的文件系统上复制一遍(否则不管它有多大硬盘都会被填满),它只是在数据库里添上了一笔记录。
|
對於 Google Drive 本身而言,它不會因為你ssc覆制了一份文件而真的去在自己的文件系統上覆制一遍(否則不管它有多大硬盤都會被填滿),它只是在數據庫里添上了一筆記錄。
|
||||||
|
|
||||||
所以,无论ssc一份大文件还是小文件,理论上它的耗时都是一样的。
|
所以,無論ssc一份大文件還是小文件,理論上它的耗時都是一樣的。
|
||||||
各位在使用这些工具的时候也可以感受到,复制一堆小文件比复制几个大文件要慢得多。
|
各位在使用這些工具的時候也可以感受到,覆制一堆小文件比覆制幾個大文件要慢得多。
|
||||||
|
|
||||||
Google Drive 官方的 API 只提供了复制单个文件的功能,无法直接复制整个文件夹。甚至也无法读取整个文件夹,只能读取某个文件夹的第一层子文件(夹)信息,类似 Linux 命令行里的 `ls` 命令。
|
Google Drive 官方的 API 只提供了覆制單個文件的功能,無法直接覆制整個文件夾。甚至也無法讀取整個文件夾,只能讀取某個文件夾的第一層子文件(夾)信息,類似 Linux 命令行里的 `ls` 命令。
|
||||||
|
|
||||||
这三个工具的ssc功能,本质上都是对[官方file copy api](https://developers.google.com/drive/api/v3/reference/files/copy)的调用。
|
這三個工具的ssc功能,本質上都是對[官方file copy api](https://developers.google.com/drive/api/v3/reference/files/copy)的調用。
|
||||||
|
|
||||||
然后说一下本工具的原理,其大概步骤如下:
|
然後說一下本工具的原理,其大概步驟如下:
|
||||||
|
|
||||||
- 首先,它会递归读取要复制的目录里的所有文件和文件夹的信息,并保存到本地。
|
- 首先,它會遞歸讀取要覆制的目錄里的所有文件和文件夾的信息,並保存到本地。
|
||||||
- 然后,将所有文件夹对象过滤出来,再根据彼此的父子关系,创建新的同名文件夹,还原出原始结构。(在保证速度的同时保持原始文件夹结构不变,这真的费了一番功夫)
|
- 然後,將所有文件夾對象過濾出來,再根據彼此的父子關系,創建新的同名文件夾,還原出原始結構。(在保證速度的同時保持原始文件夾結構不變,這真的費了一番功夫)
|
||||||
- 根据上一步创建文件夹时留下的新旧文件夹ID的对应关系,调用官方API复制文件。
|
- 根據上一步創建文件夾時留下的新舊文件夾ID的對應關系,調用官方API覆制文件。
|
||||||
|
|
||||||
得益于本地数据库的存在,它可以在任务中断后从断点继续执行。比如用户按下`ctrl+c`后,可以再执行一遍相同的拷贝命令,本工具会给出三个选项:
|
得益於本地數據庫的存在,它可以在任務中斷後從斷點繼續執行。比如用戶按下`ctrl+c`後,可以再執行一遍相同的拷貝命令,本工具會給出三個選項:
|
||||||
<!-- ![](https://viegg.oss-cn-shenzhen.aliyuncs.com/1592735608511.png) -->
|
<!-- ![](https://viegg.oss-cn-shenzhen.aliyuncs.com/1592735608511.png) -->
|
||||||
![](static/choose.png)
|
![](static/choose.png)
|
||||||
|
|
||||||
另外两个工具也支持断点续传,它们是怎样做到的呢?AutoRclone是用python对rclone命令的一层封装,gclone是基于rclone的魔改。
|
另外兩個工具也支持斷點續傳,它們是怎樣做到的呢?AutoRclone是用python對rclone命令的一層封裝,gclone是基於rclone的魔改。
|
||||||
对了——值得一提的是——本工具是直接调用的官方API,不依赖于rclone。
|
對了——值得一提的是——本工具是直接調用的官方API,不依賴於rclone。
|
||||||
|
|
||||||
我没有仔细阅读过rclone的源码,但是从它的执行日志中可以大概猜出其工作原理。
|
我沒有仔細閱讀過rclone的源碼,但是從它的執行日志中可以大概猜出其工作原理。
|
||||||
先补充个背景知识:对于存在于Google drive的所有文件(夹)对象,它们的一生都伴随着一个独一无二的ID,就算一个文件是另一个的拷贝,它们的ID也不一样。
|
先補充個背景知識:對於存在於Google drive的所有文件(夾)對象,它們的一生都伴隨著一個獨一無二的ID,就算一個文件是另一個的拷貝,它們的ID也不一樣。
|
||||||
|
|
||||||
所以rclone是怎么知道哪些文件拷贝过,哪些没有呢?如果它没有像我一样将记录保存在本地数据库的话,那么它只能在同一路径下搜索是否存在同名文件,如果存在,再比对它们的 大小/修改时间/md5值 等判断是否拷贝过。
|
所以rclone是怎麽知道哪些文件拷貝過,哪些沒有呢?如果它沒有像我一樣將記錄保存在本地數據庫的話,那麽它只能在同一路徑下搜索是否存在同名文件,如果存在,再比對它們的 大小/修改時間/md5值 等判斷是否拷貝過。
|
||||||
|
|
||||||
也就是说,在最坏的情况下(假设它没做缓存),它每拷贝一个文件之前,都要先调用官方API来搜索判断此文件是否已存在!
|
也就是說,在最壞的情況下(假設它沒做緩存),它每拷貝一個文件之前,都要先調用官方API來搜索判斷此文件是否已存在!
|
||||||
|
|
||||||
此外,AutoRclone和gclone虽然都支持自动切换service account,但是它们执行拷贝任务的时候都是单一SA在调用API,这就注定了它们不能把请求频率调太高——否则可能触发限制。
|
此外,AutoRclone和gclone雖然都支持自動切換service account,但是它們執行拷貝任務的時候都是單一SA在調用API,這就注定了它們不能把請求頻率調太高——否則可能觸发限制。
|
||||||
|
|
||||||
而本工具同样支持自动切换service account,区别在于它的每次请求都是随机选一个SA,我的[文件统计](https://gdurl.viegg.com/api/gdrive/count?fid=1W9gf3ReGUboJUah-7XDg5jKXKl5XwQQ3)接口就用了20个SA的token,同时请求数设置成20个,也就是平均而言,单个SA的并发请求数只有一次。
|
而本工具同樣支持自動切換service account,區別在於它的每次請求都是隨機選一個SA,我的[文件統計](https://gdurl.viegg.com/api/gdrive/count?fid=1W9gf3ReGUboJUah-7XDg5jKXKl5XwQQ3)接口就用了20個SA的token,同時請求數設置成20個,也就是平均而言,單個SA的並发請求數只有一次。
|
||||||
|
|
||||||
所以瓶颈不在于SA的频率限制,而在运行的vps或代理上,各位可以根据各自的情况适当调整 PARALLEL_LIMIT 的值(在 `config.js` 里)。
|
所以瓶頸不在於SA的頻率限制,而在運行的vps或代理上,各位可以根據各自的情況適當調整 PARALLEL_LIMIT 的值(在 `config.js` 里)。
|
||||||
|
|
||||||
当然,如果某个SA的单日流量超过了750G,会自动切换成别的SA,同时过滤掉流量用尽的SA。当所有SA流量用完后,会切换到个人的access token,直到流量同样用尽,最终进程退出。
|
當然,如果某個SA的單日流量超過了750G,會自動切換成別的SA,同時過濾掉流量用盡的SA。當所有SA流量用完後,會切換到個人的access token,直到流量同樣用盡,最終進程退出。
|
||||||
|
|
||||||
*使用SA存在的限制:除了每日流量限制外,其实每个SA还有个**15G的个人盘空间限额**,也就是说你每个SA最多能拷贝15G的文件到个人盘,但是拷贝到团队盘则无此限制。*
|
*使用SA存在的限制:除了每日流量限制外,其實每個SA還有個**15G的個人盤空間限額**,也就是說你每個SA最多能拷貝15G的文件到個人盤,但是拷貝到團隊盤則無此限制。*
|
||||||
|
|
BIN
pic/example1.png
BIN
pic/example1.png
Binary file not shown.
Before Width: | Height: | Size: 15 KiB |
141
readme.md
141
readme.md
|
@ -1,19 +1,20 @@
|
||||||
# gd-utils-cht
|
# gd-utils-cht
|
||||||
|
|
||||||
> 不只是最快的 google drive 拷贝工具 [与其他工具的对比](./compare.md)
|
> 不只是最快的 google drive 拷貝工具 [與其他工具的對比](./compare.md)
|
||||||
|
|
||||||
> 我就只寫我修改過的部分吧 具體說明還是看[這邊](https://github.com/iwestlin/gd-utils)和[這邊](https://github.com/vitaminx/gd-utils)吧
|
> 我的readme可能不夠完全, 主要寫上我更新、修改的內容, 具體說明還是看[這邊](https://github.com/iwestlin/gd-utils)和[這邊](https://github.com/vitaminx/gd-utils)吧
|
||||||
## 更新紀錄
|
## 更新紀錄
|
||||||
2020.07.07 整體繁體化, 新增用戶可以在config.js自訂按鈕顯示的個數(每列), 可設定為1或2
|
### 2020.07.07
|
||||||
|
- 整體繁體化, 介面部分
|
||||||
|
- 新增用戶可以在config.js自訂按鈕顯示的個數(每列), 可設定為1或2
|
||||||
|
### 2020.07.06以前
|
||||||
|
- 部分繁體中文化
|
||||||
|
- 執行/task命令時, 會回傳完成度百分比
|
||||||
|
- 複製完成時, 跳出的通知會顯示文件大小
|
||||||
## tg_bot 修改部分
|
## tg_bot 修改部分
|
||||||
- 執行/task命令時, 會回傳完成度百分比
|
- 執行/task命令時, 會回傳完成度百分比
|
||||||
|
|
||||||
![](./pic/example2.png)
|
![](./pic/example2.png)
|
||||||
- 貼上分享連結時, 新增更多可用的常用選項, 不用每次都另外輸入dst ID
|
|
||||||
- 這邊預設三個複製目的地都相同, 皆為`config.js`中的`DEFAULT_TARGET`
|
|
||||||
- 修改處在[`config.js`](./config.js), `COPY_TARGET2` `COPY_TARGET2`, 賦值上對應的dstID就行
|
|
||||||
|
|
||||||
![](./pic/example1.png)
|
|
||||||
- 複製完成時, 跳出的通知會顯示文件大小
|
- 複製完成時, 跳出的通知會顯示文件大小
|
||||||
|
|
||||||
![](./pic/example3.png)
|
![](./pic/example3.png)
|
||||||
|
@ -25,26 +26,26 @@
|
||||||
- ssl另外配置在nginx服務當中(後面會說明證書放置路徑)
|
- ssl另外配置在nginx服務當中(後面會說明證書放置路徑)
|
||||||
- 具體安裝條件、限制請去參考[腳本原作者的專案](https://github.com/vitaminx/gd-utils)
|
- 具體安裝條件、限制請去參考[腳本原作者的專案](https://github.com/vitaminx/gd-utils)
|
||||||
- 這邊放了貼上就能用的命令
|
- 這邊放了貼上就能用的命令
|
||||||
- gdutils项目一键部署脚本(包括“查询转存”和“TG机器人”两部分)
|
- gdutils項目一鍵部署腳本(包括“查詢轉存”和“TG機器人”兩部分)
|
||||||
```
|
```
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/liaojack8/gd-utils-cht/master/gdutilsinstall.sh)"
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/liaojack8/gd-utils-cht/master/gdutilsinstall.sh)"
|
||||||
```
|
```
|
||||||
- gdutils项目一键部署脚本之“转存查询部分”
|
- gdutils項目一鍵部署腳本之“轉存查詢部分”
|
||||||
```
|
```
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/liaojack8/gd-utils-cht/master/gdutilscsinstall.sh)"
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/liaojack8/gd-utils-cht/master/gdutilscsinstall.sh)"
|
||||||
```
|
```
|
||||||
- gdutils项目一键部署脚本之“TG机器人部分”
|
- gdutils項目一鍵部署腳本之“TG機器人部分”
|
||||||
```
|
```
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/liaojack8/gd-utils-cht/master/gdutilsbotinstall.sh)"
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/liaojack8/gd-utils-cht/master/gdutilsbotinstall.sh)"
|
||||||
```
|
```
|
||||||
- 安装过程中需要输入一下四个参数:
|
- 安裝過程中需要輸入一下四個參數:
|
||||||
- 机器人TOKEN:这个在Telegram里面找“@BotFather”注册即可获得
|
- 機器人TOKEN:這個在Telegram裡面找“@BotFather”註冊即可獲得
|
||||||
- Telegram用户ID:在Telegram里面向机器人@userinfobot发送消息即可获得
|
- Telegram用戶ID:在Telegram裡面向機器人@userinfobot发送消息即可獲得
|
||||||
- Google team drive ID:即为你转存文件的默认地址,脚本强制要求写谷歌团队盘ID
|
- Google team drive ID:即為你轉存文件的預設地址,腳本強制要求寫Google小組雲端硬碟ID
|
||||||
- 域名:你在cloudflare上解析到VPS的域名(格式:abc.34513.com)
|
- 域名:你在cloudflare上解析到VPS的域名(格式:abc.34513.com)
|
||||||
- 脚本安装问题请信息发给TG:onekings 或 vitaminor@gmail.com
|
- 腳本安裝問題請信息發給TG:onekings 或 vitaminor@gmail.com
|
||||||
- 系统使用问题(如无法转存、重启连不上机器人等等)请联系项目作者@vegg
|
- 系統使用問題(如無法轉存、重啟連不上機器人等等)請聯系項目作者@vegg
|
||||||
- 测试可用完美安装系统:
|
- 測試可用完美安裝系統:
|
||||||
- Centos 7/8
|
- Centos 7/8
|
||||||
- debian 9/10
|
- debian 9/10
|
||||||
- ubuntu 16.04/18.04/19.10/20.04
|
- ubuntu 16.04/18.04/19.10/20.04
|
||||||
|
@ -58,96 +59,96 @@
|
||||||
6. 設定完成後, 確認主機的端口開放
|
6. 設定完成後, 確認主機的端口開放
|
||||||
7. 執行安裝腳本, 就會自動以nginx起動服務, 特別設定了http轉https的跳轉
|
7. 執行安裝腳本, 就會自動以nginx起動服務, 特別設定了http轉https的跳轉
|
||||||
|
|
||||||
## 功能简介
|
## 功能簡介
|
||||||
本工具目前支持以下功能:
|
本工具目前支持以下功能:
|
||||||
- 统计任意(您拥有相关权限的,下同,不再赘述)目录的文件信息,且支持以各种形式(html, table, json)导出。
|
- 統計任意(您擁有相關權限的,下同,不再贅述)目錄的文件信息,且支持以各種形式(html, table, json)導出。
|
||||||
支持中断恢复,且统计过的目录(包括其所有子孙目录)信息会记录在本地数据库文件中(gdurl.sqlite)
|
支持中斷恢覆,且統計過的目錄(包括其所有子孫目錄)信息會記錄在本地數據庫文件中(gdurl.sqlite)
|
||||||
请在本项目目录下命令行输入 `./count -h` 查看使用帮助
|
請在本項目目錄下命令行輸入 `./count -h` 查看使用幫助
|
||||||
|
|
||||||
- 拷贝任意目录所有文件到您指定目录,同样支持中断恢复。
|
- 拷貝任意目錄所有文件到您指定目錄,同樣支持中斷恢覆。
|
||||||
支持根据文件大小过滤,可输入 `./copy -h` 查看使用帮助
|
支持根據文件大小過濾,可輸入 `./copy -h` 查看使用幫助
|
||||||
|
|
||||||
- 对任意目录进行去重,删除同一目录下的md5值相同的文件(只保留一个),删除空目录。
|
- 對任意目錄進行去重,刪除同一目錄下的md5值相同的文件(只保留一個),刪除空目錄。
|
||||||
命令行输入 `./dedupe -h` 查看使用帮助
|
命令行輸入 `./dedupe -h` 查看使用幫助
|
||||||
|
|
||||||
- 在 config.js 里完成相关配置后,可以将本项目部署在(可正常访问谷歌服务的)服务器上,提供 http api 文件统计接口
|
- 在 config.js 里完成相關配置後,可以將本項目部署在(可正常訪問Google服務的)服務器上,提供 http api 文件統計接口
|
||||||
|
|
||||||
- 支持 telegram bot,配置完成后,上述功能均可通过 bot 进行操作
|
- 支持 telegram bot,配置完成後,上述功能均可通過 bot 進行操作
|
||||||
|
|
||||||
## 环境配置
|
## 環境配置
|
||||||
本工具需要安装nodejs,客户端安装请访问[https://nodejs.org/zh-cn/download/](https://nodejs.org/zh-cn/download/),服务器安装可参考[https://github.com/nodesource/distributions/blob/master/README.md#debinstall](https://github.com/nodesource/distributions/blob/master/README.md#debinstall)
|
本工具需要安裝nodejs,客戶端安裝請訪問[https://nodejs.org/zh-cn/download/](https://nodejs.org/zh-cn/download/),服務器安裝可參考[https://github.com/nodesource/distributions/blob/master/README.md#debinstall](https://github.com/nodesource/distributions/blob/master/README.md#debinstall)
|
||||||
|
|
||||||
建议选择v12版本的node,以防接下来安装依赖出错。
|
建議選擇v12版本的node,以防接下來安裝依賴出錯。
|
||||||
|
|
||||||
如果你的网络环境无法正常访问谷歌服务,需要先在命令行进行一些配置:(如果可以正常访问则跳过此节)
|
如果你的網絡環境無法正常訪問Google服務,需要先在命令行進行一些配置:(如果可以正常訪問則跳過此節)
|
||||||
```
|
```
|
||||||
http_proxy="YOUR_PROXY_URL" && https_proxy=$http_proxy && HTTP_PROXY=$http_proxy && HTTPS_PROXY=$http_proxy
|
http_proxy="YOUR_PROXY_URL" && https_proxy=$http_proxy && HTTP_PROXY=$http_proxy && HTTPS_PROXY=$http_proxy
|
||||||
```
|
```
|
||||||
请把`YOUR_PROXY_URL`替换成你自己的代理地址
|
請把`YOUR_PROXY_URL`替換成你自己的代理地址
|
||||||
|
|
||||||
## 依赖安装
|
## 依賴安裝
|
||||||
- 命令行执行`git clone https://github.com/iwestlin/gd-utils && cd gd-utils` 克隆并切换到本项目文件夹下
|
- 命令行執行`git clone https://github.com/iwestlin/gd-utils && cd gd-utils` 克隆並切換到本項目文件夾下
|
||||||
- **执行 `npm install --unsafe-perm=true --allow-root` 安装依赖**,部分依赖可能需要代理环境才能下载,所以需要上一步的配置
|
- **執行 `npm install --unsafe-perm=true --allow-root` 安裝依賴**,部分依賴可能需要代理環境才能下載,所以需要上一步的配置
|
||||||
|
|
||||||
如果在安装过程中发生报错,请切换nodejs版本到v12再试。如果报错信息里有`Error: not found: make`之类的消息,说明你的命令行环境缺少make命令,可参考[这里](https://askubuntu.com/questions/192645/make-command-not-found)或直接google搜索`Make Command Not Found`
|
如果在安裝過程中发生報錯,請切換nodejs版本到v12再試。如果報錯信息里有`Error: not found: make`之類的消息,說明你的命令行環境缺少make命令,可參考[這里](https://askubuntu.com/questions/192645/make-command-not-found)或直接google搜索`Make Command Not Found`
|
||||||
|
|
||||||
如果报错信息里有 `better-sqlite3`,先执行 `npm config set unsafe-perm=true`
|
如果報錯信息里有 `better-sqlite3`,先執行 `npm config set unsafe-perm=true`
|
||||||
然后 `rm -rf node_module` 删掉依赖目录,最后再执行下`npm i`安装试试。
|
然後 `rm -rf node_module` 刪掉依賴目錄,最後再執行下`npm i`安裝試試。
|
||||||
|
|
||||||
依赖安装完成后,项目文件夹下会多出个`node_modules`目录,请不要删除它,接下来进行下一步配置。
|
依賴安裝完成後,項目文件夾下會多出個`node_modules`目錄,請不要刪除它,接下來進行下一步配置。
|
||||||
|
|
||||||
## Service Account 配置
|
## Service Account 配置
|
||||||
强烈建议使用service account(后称SA), 获取方法请参见 [https://gsuitems.com/index.php/archives/13/](https://gsuitems.com/index.php/archives/13/#%E6%AD%A5%E9%AA%A42%E7%94%9F%E6%88%90serviceaccounts)
|
強烈建議使用service account(後稱SA), 獲取方法請參見 [https://gsuitems.com/index.php/archives/13/](https://gsuitems.com/index.php/archives/13/#%E6%AD%A5%E9%AA%A42%E7%94%9F%E6%88%90serviceaccounts)
|
||||||
获取到 SA 的 json 文件后,请将其拷贝到 `sa` 目录下
|
獲取到 SA 的 json 文件後,請將其拷貝到 `sa` 目錄下
|
||||||
|
|
||||||
配置好 SA 以后,如果你不需要对个人盘下的文件进行操作,可跳过[个人帐号配置]这节,而且执行命令的时候,记得带上 `-S` 参数告诉程序使用SA授权进行操作。
|
配置好 SA 以後,如果你不需要對個人盤下的文件進行操作,可跳過[個人帳號配置]這節,而且執行命令的時候,記得帶上 `-S` 參數告訴程序使用SA授權進行操作。
|
||||||
|
|
||||||
## 个人帐号配置
|
## 個人帳號配置
|
||||||
- 命令行执行 `rclone config file` 找到 rclone 的配置文件路径
|
- 命令行執行 `rclone config file` 找到 rclone 的配置文件路徑
|
||||||
- 打开这个配置文件 `rclone.conf`, 找到 `client_id`, `client_secret` 和 `refresh_token` 这三个变量,将其分别填入本项目下的 `config.js` 中,需要注意这三个值必须被成对的英文引号包裹,且引号后以英文逗号结尾,也就是需要符合JavaScript的[对象语法](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Object_initializer)
|
- 打開這個配置文件 `rclone.conf`, 找到 `client_id`, `client_secret` 和 `refresh_token` 這三個變量,將其分別填入本項目下的 `config.js` 中,需要注意這三個值必須被成對的英文引號包裹,且引號後以英文逗號結尾,也就是需要符合JavaScript的[對象語法](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Object_initializer)
|
||||||
|
|
||||||
如果你没有配置过rclone,可以搜索`rclone google drive 教程`完成相关配置。
|
如果你沒有配置過rclone,可以搜索`rclone google drive 教程`完成相關配置。
|
||||||
|
|
||||||
如果你的`rclone.conf`里没有`client_id`和`client_secret`,说明你配置rclone的时候默认用了rclone自己的client_id,连rclone自己[都不建议这样做](https://github.com/rclone/rclone/blob/8d55367a6a2f47a1be7e360a872bd7e56f4353df/docs/content/drive.md#making-your-own-client_id),因为大家共享了它的接口调用限额,在使用高峰期可能会触发限制。
|
如果你的`rclone.conf`里沒有`client_id`和`client_secret`,說明你配置rclone的時候默認用了rclone自己的client_id,連rclone自己[都不建議這樣做](https://github.com/rclone/rclone/blob/8d55367a6a2f47a1be7e360a872bd7e56f4353df/docs/content/drive.md#making-your-own-client_id),因為大家共享了它的接口調用限額,在使用高峰期可能會觸发限制。
|
||||||
|
|
||||||
获取自己的clinet_id可以参见这两篇文章:[Cloudbox/wiki/Google-Drive-API-Client-ID-and-Client-Secret](https://github.com/Cloudbox/Cloudbox/wiki/Google-Drive-API-Client-ID-and-Client-Secret) 和 [https://p3terx.com/archives/goindex-google-drive-directory-index.html#toc_2](https://p3terx.com/archives/goindex-google-drive-directory-index.html#toc_2)
|
獲取自己的clinet_id可以參見這兩篇文章:[Cloudbox/wiki/Google-Drive-API-Client-ID-and-Client-Secret](https://github.com/Cloudbox/Cloudbox/wiki/Google-Drive-API-Client-ID-and-Client-Secret) 和 [https://p3terx.com/archives/goindex-google-drive-directory-index.html#toc_2](https://p3terx.com/archives/goindex-google-drive-directory-index.html#toc_2)
|
||||||
|
|
||||||
获取到client_id和client_secret后,再次执行一遍`rclone config`,创建一个新的remote,**在配置过程中一定要填入你新获取的clinet_id和client_secret**,就能在`rclone.conf`里看到新获取的`refresh_token`了。**注意,不能使用之前的refrest_token**,因为它对应的是rclone自带的client_id
|
獲取到client_id和client_secret後,再次執行一遍`rclone config`,創建一個新的remote,**在配置過程中一定要填入你新獲取的clinet_id和client_secret**,就能在`rclone.conf`里看到新獲取的`refresh_token`了。**注意,不能使用之前的refrest_token**,因為它對應的是rclone自帶的client_id
|
||||||
|
|
||||||
参数配置好以后,在命令行执行 `node check.js`,如果命令返回了你的谷歌硬盘根目录的数据,说明配置成功,可以开始使用本工具了。
|
參數配置好以後,在命令行執行 `node check.js`,如果命令返回了你的Google雲端硬碟根目錄的數據,說明配置成功,可以開始使用本工具了。
|
||||||
|
|
||||||
## Bot配置
|
## Bot配置
|
||||||
如果要使用 telegram bot 功能,需要进一步配置。
|
如果要使用 telegram bot 功能,需要進一步配置。
|
||||||
|
|
||||||
首先在 [https://core.telegram.org/bots#6-botfather](https://core.telegram.org/bots#6-botfather) 根据指示拿到 bot 的 token,然后填入 config.js 中的 `tg_token` 变量。
|
首先在 [https://core.telegram.org/bots#6-botfather](https://core.telegram.org/bots#6-botfather) 根據指示拿到 bot 的 token,然後填入 config.js 中的 `tg_token` 變量。
|
||||||
|
|
||||||
然后获取自己的 telegram username,这个username不是显示的名称,而是tg个人网址后面的那串字符,比如,我的tg个人网址是 `https://t.me/viegg` ,用户名就是 `viegg`,获取用户名的目的是在代码里配置白名单,只允许特定的用户调用机器人。将username填入 `config.js`里的配置,像这样:
|
然後獲取自己的 telegram username,這個username不是顯示的名稱,而是tg個人網址後面的那串字符,比如,我的tg個人網址是 `https://t.me/viegg` ,用戶名就是 `viegg`,獲取用戶名的目的是在代碼里配置白名單,只允許特定的用戶調用機器人。將username填入 `config.js`里的配置,像這樣:
|
||||||
`tg_whitelist: ['viegg']`,就代表只允许我自己使用这个机器人了。
|
`tg_whitelist: ['viegg']`,就代表只允許我自己使用這個機器人了。
|
||||||
|
|
||||||
如果想把机器人的使用权限分享给别的用户,只需要改成这样子: `tg_whitelist: ['viegg', '其他人的username']`
|
如果想把機器人的使用權限分享給別的用戶,只需要改成這樣子: `tg_whitelist: ['viegg', '其他人的username']`
|
||||||
|
|
||||||
## 补充说明
|
## 補充說明
|
||||||
在`config.js`文件里,还有另外的几个参数:
|
在`config.js`文件里,還有另外的幾個參數:
|
||||||
```
|
```
|
||||||
// 单次请求多少毫秒未响应以后超时(基准值,若连续超时则下次调整为上次的2倍)
|
// 單次請求多少毫秒未響應以後超時(基準值,若連續超時則下次調整為上次的2倍)
|
||||||
const TIMEOUT_BASE = 7000
|
const TIMEOUT_BASE = 7000
|
||||||
|
|
||||||
// 最大超时设置,比如某次请求,第一次7s超时,第二次14s,第三次28s,第四次56s,第五次不是112s而是60s,后续同理
|
// 最大超時設置,比如某次請求,第一次7s超時,第二次14s,第三次28s,第四次56s,第五次不是112s而是60s,後續同理
|
||||||
const TIMEOUT_MAX = 60000
|
const TIMEOUT_MAX = 60000
|
||||||
|
|
||||||
const LOG_DELAY = 5000 // 日志输出时间间隔,单位毫秒
|
const LOG_DELAY = 5000 // 日志輸出時間間隔,單位毫秒
|
||||||
const PAGE_SIZE = 1000 // 每次网络请求读取目录下的文件数,数值越大,越有可能超时,不得超过1000
|
const PAGE_SIZE = 1000 // 每次網絡請求讀取目錄下的文件數,數值越大,越有可能超時,不得超過1000
|
||||||
|
|
||||||
const RETRY_LIMIT = 7 // 如果某次请求失败,允许其重试的最大次数
|
const RETRY_LIMIT = 7 // 如果某次請求失敗,允許其重試的最大次數
|
||||||
const PARALLEL_LIMIT = 20 // 网络请求的并行数量,可根据网络环境调整
|
const PARALLEL_LIMIT = 20 // 網絡請求的並行數量,可根據網絡環境調整
|
||||||
|
|
||||||
const DEFAULT_TARGET = '' // 必填,拷贝默认目的地ID,如果不指定target,则会拷贝到此处,建议填写团队盘ID,注意要用英文引号包裹
|
const DEFAULT_TARGET = '' // 必填,拷貝默認目的地ID,如果不指定target,則會拷貝到此處,建議填寫團隊盤ID,注意要用英文引號包裹
|
||||||
```
|
```
|
||||||
读者可根据各自情况进行调整
|
讀者可根據各自情況進行調整
|
||||||
|
|
||||||
## 注意事项
|
## 注意事項
|
||||||
程序的原理是调用了[google drive官方接口](https://developers.google.com/drive/api/v3/reference/files/list),递归获取目标文件夹下所有文件及其子文件夹信息,粗略来讲,某个目录下包含多少个文件夹,就至少需要这么多次请求才能统计完成。
|
程序的原理是調用了[google drive官方接口](https://developers.google.com/drive/api/v3/reference/files/list),遞歸獲取目標文件夾下所有文件及其子文件夾信息,粗略來講,某個目錄下包含多少個文件夾,就至少需要這麽多次請求才能統計完成。
|
||||||
|
|
||||||
目前尚不知道google是否会对接口做频率限制,也不知道会不会影响google账号本身的安全。
|
目前尚不知道google是否會對接口做頻率限制,也不知道會不會影響google賬號本身的安全。
|
||||||
|
|
||||||
**请勿滥用,后果自负**
|
**請勿濫用,後果自負**
|
||||||
|
|
Loading…
Reference in New Issue