Go to file
Issue哥 97bd5d0f60 prevent dead loop 2020-06-27 20:29:05 +08:00
sa init 2020-06-27 14:19:43 +08:00
src prevent dead loop 2020-06-27 20:29:05 +08:00
static add count.png 2020-06-27 16:03:24 +08:00
.gitignore init 2020-06-27 14:19:43 +08:00
check.js init 2020-06-27 14:19:43 +08:00
compare.md init 2020-06-27 14:19:43 +08:00
config.js init 2020-06-27 14:19:43 +08:00
copy init 2020-06-27 14:19:43 +08:00
count init 2020-06-27 14:19:43 +08:00
create-table.sql init 2020-06-27 14:19:43 +08:00
db.js init 2020-06-27 14:19:43 +08:00
dedupe init 2020-06-27 14:19:43 +08:00
gdurl.sqlite init 2020-06-27 14:19:43 +08:00
package-lock.json name 2020-06-27 15:32:16 +08:00
package.json init 2020-06-27 14:19:43 +08:00
readme.md readme 2020-06-27 16:32:03 +08:00
server.js prevent dead loop 2020-06-27 20:29:05 +08:00

readme.md

Google Drive 百宝箱

不只是最快的 google drive 拷贝工具 与其他工具的对比

功能简介

本工具目前支持以下功能:

  • 统计任意您拥有相关权限的下同不再赘述目录的文件信息且支持以各种形式html, table, json导出。
    支持中断恢复且统计过的目录包括其所有子孙目录信息会记录在本地数据库文件中gdurl.sqlite 请在本项目目录下命令行输入 ./count -h 查看使用帮助

  • 拷贝任意目录所有文件到您指定目录,同样支持中断恢复。 支持根据文件大小过滤,可输入 ./copy -h 查看使用帮助

  • 对任意目录进行去重删除同一目录下的md5值相同的文件只保留一个删除空目录。 命令行输入 ./dedupe -h 查看使用帮助

  • 在 config.js 里完成相关配置后,可以将本项目部署在(可正常访问谷歌服务的)服务器上,提供 http api 文件统计接口

  • 支持 telegram bot配置完成后上述功能均可通过 bot 进行操作

demo

https://drive.google.com/drive/folders/124pjM5LggSuwI1n40bcD5tQ13wS0M6wg

环境配置

本工具需要安装nodejs客户端安装请访问https://nodejs.org/zh-cn/download/,服务器安装可参考https://github.com/nodesource/distributions/blob/master/README.md#debinstall

如果你的网络环境无法正常访问谷歌服务,需要先在命令行进行一些配置:(如果可以正常访问则跳过此节)

http_proxy="YOUR_PROXY_URL" && https_proxy=$http_proxy && HTTP_PROXY=$http_proxy && HTTPS_PROXY=$http_proxy

请把YOUR_PROXY_URL替换成你自己的代理地址

依赖安装

  • 命令行执行git clone https://github.com/iwestlin/gd-utils && cd gd-utils 克隆并切换到本项目文件夹下
  • 执行 npm i 安装依赖,部分依赖可能需要代理环境才能下载,所以需要上一步的配置

如果在安装过程中发生报错请切换nodejs版本到v12再试。如果报错信息里有Error: not found: make之类的消息说明你的命令行环境缺少make命令可参考这里或直接google搜索Make Command Not Found

依赖安装完成后,项目文件夹下会多出个node_modules目录,请不要删除它,接下来进行下一步配置。

Service Account 配置

强烈建议使用service account后称SA, 获取方法请参见 https://gsuitems.com/index.php/archives/13/ 获取到 SA 的 json 文件后,请将其拷贝到 sa 目录下

配置好 SA 以后,如果你不需要对个人盘下的文件进行操作,可跳过[个人帐号配置]这节,而且执行命令的时候,记得带上 -S 参数告诉程序使用SA授权进行操作。

个人帐号配置

  • 命令行执行 rclone config file 找到 rclone 的配置文件路径
  • 打开这个配置文件 rclone.conf, 找到 client_id, client_secretrefresh_token 这三个变量,将其分别填入本项目下的 config.js需要注意这三个值必须被成对的英文引号包裹且引号后以英文逗号结尾也就是需要符合JavaScript的对象语法

如果你没有配置过rclone可以搜索rclone google drive 教程完成相关配置。

如果你的rclone.conf里没有client_idclient_secret说明你配置rclone的时候默认用了rclone自己的client_id连rclone自己都不建议这样做,因为大家共享了它的接口调用限额,在使用高峰期可能会触发限制。

获取自己的clinet_id可以参见这两篇文章Cloudbox/wiki/Google-Drive-API-Client-ID-and-Client-Secrethttps://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

参数配置好以后,在命令行执行 node check.js,如果命令返回了你的谷歌硬盘根目录的数据,说明配置成功,可以开始使用本工具了。

Bot配置

如果要使用 telegram bot 功能,需要进一步配置。

首先在 https://core.telegram.org/bots#6-botfather 根据指示拿到 bot 的 token然后填入 config.js 中的 tg_token 变量。

接下来需要将代码部署到服务器上。 如果你一开始就是在服务器上配置的,可以直接执行npm i pm2 -g

如果你之前是在本地操作的,请在服务器上同样重复一遍,配置好相关参数后,执行npm i pm2 -g安装进程守护程序pm2

安装好pm2之后执行 pm2 start server.js,代码运行后会在服务器上监听23333端口。

如果你不想用nginx可以将server.js中的23333改成80直接监听80端口可能需要root权限

接下来可通过nginx或其他工具起一个web服务示例nginx配置

server {
  listen 80;
  server_name your.server.name;

  location / {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:23333/;
  }
}

配置好nginx后可以再套一层cloudflare具体教程请自行搜索。

检查网站是否部署成功可以命令行执行请将YOUR_WEBSITE_URL替换成你的网址

curl 'YOUR_WEBSITE_URL/api/gdurl/count?fid=124pjM5LggSuwI1n40bcD5tQ13wS0M6wg'

如果返回了这样的文件统计,说明部署成功了。

最后,在命令行执行(请将[YOUR_WEBSITE]和[YOUR_BOT_TOKEN]分别替换成你自己的网址和bot token

curl -F "url=[YOUR_WEBSITE]/api/gdurl/tgbot" 'https://api.telegram.org/bot[YOUR_BOT_TOKEN]/setWebhook'

这样,就将你的服务器连接上你的 telegram bot 了试着给bot发送个 /help,如果它回复给你使用说明,那就配置成功了。

补充说明

config.js文件里,还有另外的几个参数:

// 单次请求多少毫秒未响应以后超时基准值若连续超时则下次调整为上次的2倍
const TIMEOUT_BASE = 7000

// 最大超时设置比如某次请求第一次7s超时第二次14s第三次28s第四次56s第五次不是112s而是60s后续同理
const TIMEOUT_MAX = 60000

const LOG_DELAY = 5000 // 日志输出时间间隔,单位毫秒
const PAGE_SIZE = 1000 // 每次网络请求读取目录下的文件数数值越大越有可能超时不得超过1000

const RETRY_LIMIT = 7 // 如果某次请求失败,允许其重试的最大次数
const PARALLEL_LIMIT = 20 // 网络请求的并行数量,可根据网络环境调整

const DEFAULT_TARGET = '' // 必填拷贝默认目的地ID如果不指定target则会拷贝到此处建议填写团队盘ID注意要用英文引号包裹

读者可根据各自情况进行调整

注意事项

程序的原理是调用了google drive官方接口,递归获取目标文件夹下所有文件及其子文件夹信息,粗略来讲,某个目录下包含多少个文件夹,就至少需要这么多次请求才能统计完成。

目前尚不知道google是否会对接口做频率限制也不知道会不会影响google账号本身的安全。

请勿滥用,后果自负