谷歌 gd-utils 百宝箱详细教程
本文更新于2020年9月19日,由于近期
Debian
、Ubuntu
系统出现某些依赖无法安装导致部署失败,所以推荐使用CentOS
系统注意:此工具很大的方便了我们的生活,请不要滥用
Google Drive
百宝箱是iwestlin
的一个项目,可以进行自动化转存谷歌云端硬盘的文件具体使用场景是什么?
例如有的时候别人在谷歌云盘分享了一个资源,这个资源可以是文件,视频,压缩包,这个资源我想把它保存到我的谷歌网盘里,按照传统的思路,我们首先需要将别人网盘里的内容先下载下来,然后在上传到自己网盘,这是最传统的方法,也是最慢的。现在我们有了新的方法,那就是
gd-utils
百宝箱,在VPS
上搭建一个百宝箱,配置好一个电报机器人,这样就可以实现别人网盘分享的链接,我们把链接发送给机器人,点一下复制,机器人会帮我们把别人网盘的内容存储到我们的网盘,非常便捷,因为每个谷歌账号每天只有750G
的转存额度,所以还需要配置一些SA
账号来提高额度搭建之前
一个没有限额项目的谷歌账号,而且这个谷歌账号有一个团队云盘
谷歌搜索
google api
,然后登陆自己搭建的谷歌账号,找到下图所示页面,先点击左上角选择项目,如果已经有项目就点击所在项目,然后点击全部,查看已有项目;点击新建项目,查看项目额度还有项目额度的账号才可以使用,如果额度不够,需要自己申请,申请页面会在里新建项目时提示出现
为什么需要一个没有限额的账号?
因为我们搭建百宝箱需要用到
google api
项目,谷歌api
项目一般默认只有 10 个,创建项目后即占用一个额度;而如果项目不够,就不能创建项目;只能删除原先的项目,但是删除项目需要 30 天才能删除,处于删除状态的还未删除的项目也占用你的项目额度;所以项目不能所以乱建,而如果额度不够,只能向谷歌申请,但是申请项目后,我发现在搭建过程中,可能会存在不能创建项目的情况!一台纯净系统的服务器
一台纯净系统的服务器,推荐
CentOS 7
系统,使用域名给这个服务器的IP
做一下A
解析;据说使用谷歌云虚拟机实例搭建,转存网盘内容不使用谷歌云的流量;本文以 CentOS 7 64 位系统做演示向电报申请机器人
打开电报,搜索机器人
**@BotFather**
,并点击下方开始进行对话,寻找机器人的时候,一定要看清机器人的用户名点击图中所示点击创建机器人
记录机器人的
token
值,在后面的步骤要用到打开 这个网站 ,登陆你需要搭建的谷歌账号,然后按照图示操作点击创建
到了这里下载这个 credentials.json 的文件保存到本地,然后点击
done
,结束创建谷歌搜索
google API
,打开后登陆自己的账号,按图示操作,点击左上角的项目,点击全部,最后点击我们刚才创建的新项目Quickstart
进入到我们新建的项目查看这个项目下开放了哪些
API
,正常情况下需要创建开放 5个API ,如果你的项目没有或缺少某些API
,请按照下面的API
列表补齐,在上方搜索API和服务的地方搜索启用1
2
3
4
5
6
7
8
9Google Drive API
Identity and Access Management (IAM) API
Service Usage API
Cloud Resource Manager API
IAM Service Account Credentials API开始搭建
使用 SSH 连接到 VPS ,配置 VPS 环境
CentOS
1
2
3
4
5yum -y update
yum install epel-release -y
yum install wget curl python3 python3-pip git screen unzip sudo fuse fuse-devel -yDebian、Ubuntu
1
2
3apt-get update && apt-get upgrade -y
apt-get install wget curl python3 python3-pip git unzip screen sudo fuse -y安装完成后,试试输入
python
或者python3
看看有没有反应,如果有说明python
配置正确,请继续下一步;如果没有,请自行配置python
环境
安装 Node.js v12.x
CentOS
1
2
3
4
5
6
7
8
9curl -sL https://rpm.nodesource.com/setup_lts.x | bash -
yum install -y nodejs
yum install gcc-c++ make
curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | tee /etc/yum.repos.d/yarn.repo
yum install yarnDebian
1
2
3curl -sL https://deb.nodesource.com/setup_12.x | bash -
apt-get install -y nodejsUbuntu
1
2
3curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
apt-get install -y nodejs安装好
Node.js
之后,检验一下,输入node -v
代码,如果有输出且输出的是node
的版本号,则表示node
配置正确1
2
3node -v
v12.18.3安装
Node
参考:https://github.com/nodesource/distributions/blob/master/README.md#debinstall安装 rclone 和 AutoRclone
CentOS
1
2
3cd && curl https://rclone.org/install.sh | sudo bash
sudo git clone https://github.com/xyou365/AutoRclone && cd AutoRclone && sudo pip3 install -r requirements.txtDebian、Ubuntu
1
2
3sudo apt-get install screen git && curl https://rclone.org/install.sh | sudo bash
sudo git clone https://github.com/xyou365/AutoRclone && cd AutoRclone && sudo pip3 install -r requirements.txt进入到
AutoRclone
目录,将我们在谷歌网页创建项目时下载的**credentials.json**
文件上传到AutoRclone
文件夹里面创建项目,在项目里创建服务账号 SA
为什么要创建SA?
单个谷歌账号在转存谷歌云盘内容时每天有
750G
的限制,解决这一限制要么自己有很多的谷歌账号要么就创建服务账号;拥有很多谷歌账号这是不现实的,所以我们需要创建服务账号,然后把这些服务账号添加到云盘,让他们成为云盘的管理员,在利用AutoRclone
工具的自动切换功能实现一个账号限额后自动切换到下一个账号,这样就突破了每天750G
的限制,可以转存大文件服务账号就是
service accounts
,简称SA
,每个谷歌项目最多可以创建 100 个SA
创建项目,在项目里创建
SA
,这里又分为三种情况
如果你之前没创建过项目
1
python3 gen_sa_accounts.py --quick-setup 1
这个代码的意思是创建
1
个新项目、每个项目里面创建100个sa
、开启相关的服务、将 100 个sa
的授权文件下载到/root/AutoRclone/accounts
文件夹内已经存在项目,需要创建新的项目新的 sa
1
python3 gen_sa_accounts.py --quick-setup 1 --new-only
创建
1
个新项目、每个项目创建 100 个sa
,开启相关的服务、将 100 个sa
的授权文件下载到/root/AutoRclone/accounts
文件夹内提示:把代码里面的 1 改为 2 或 3;则会分别创建 1,2,3个项目;100,200,300个服务账号,以此类推
在已有的项目上来创建 sa
1
python3 gen_sa_accounts.py --quick-setup -1
注意:这会创建新的
sa
并替换掉账户里已有的全部项目的sa
注意:
方法一,因为我们之前在创建
credentials.json
文件的时候,我们其实就已经创建了一个叫Quickstart
的项目,所以不存在账号里没有项目的情况方法三,在已有项目中创建新的
SA
替换掉原先的SA
,但是我实践发现这样创建的SA
存在不能自动下载到/root/AutoRclone/accounts
文件夹的情况;并且这种方法会替换掉账户里所有项目的SA
建议使用方法二,创建新的项目新的
sa
,但是这种方法如果你的账号项目超出 10 个,并且你重新申请项目额度后也会出现不能创建新项目的情况,这跟程序有关;查看自己有多少项目就是进入到google api
点击全部项目进行查看这里以第二种方法为例,输入代码开始创建
1
2
3cd && cd /root/AutoRclone
python3 gen_sa_accounts.py --quick-setup 1 --new-only复制网址粘贴到浏览器打开授权,将网页生成的代码粘贴到
SSH
中回车出现这个页面,表示创建成功,进入
/root/AutoRclone/accounts
文件夹会发现这里面有 100 个服务账号,在回到google api
,点击项目、点击全部,会发现账户里多了一个项目,这个项目就是我们刚才新建立的,进入这个项目,这时可以看到很多账号里面有 100 个服务账号创建不成功,请自己查看提示,在结合本文提示进行寻找原因
安装 gd-utils
1
2
3cd && git clone https://github.com/iwestlin/gd-utils && cd gd-utils
npm install --unsafe-perm=true --allow-root运行中没有报错且
/root/gd-utils
文件内有内容,则为安装成功如果遇到这种情况,按照图示运行代码
npm audit fix
即可重点
把
/root/AutoRclone/accounts
文件夹下的100
个sa
账号,上传到/root/gd-utils
文件的sa
目录下给 sa 添加访问云盘的权限
**方法一:创建一个 Google Groups 群组,然后将这些
sa
添加为群组 *成员*,最后将群组的电子邮箱地址添加为云盘的成员,权限是内容管理员
打开谷歌网上论坛,登陆自己账号切换到新版网上论坛,点击左上角的 创建群组 ,然后输入自己群组名称和电子邮件地址,创建群组,记下自己
Google Groups
群组的电子邮箱地址建议
不要把自己的谷歌邮箱添加到群组成员里,因为谷歌群组每 24 小时只能添加 100 个成员,添加自己邮箱会占用一个额度导致 100 个
sa
只能添加 99 个,在下面检测sa
的可用性时,会出现一个sa
为无效的情况本地新建一个文件夹,将
/root/AutoRclone/accounts
文件内所有的服务账号下载到本地新建的文件夹内,你可以使用WinSCP
或者FinalShel
;注意下载不要下载.keep
这个文件点击下方本地下载下载 谷歌SA邮箱提取.exe ,这是批量提取谷歌服务账号的工具,方便我们把账号添加到
Google Groups
;将下载的工具和下载的sa
账号放在同一个文件夹内运行
谷歌SA邮箱提取.exe
,然后这个工具会生成一个user.txt
文件夹,打开这个文件夹将提取出来的账号分成10
份打开网上论坛,点击左边我的群组,点开我的群组,点击成员,添加成员,将分好的服务账号添加到群组成员里面,需要 10 次才能添加完成;添加完成后,论坛里应该有 101 位成员
1
注意,谷歌网上论坛每次只能添加10个,每24小时,只能添加100个
然后打开谷歌云盘,点击自己的共享盘,点击管理成员,添加用户和群组,将
Google Groups
的群组电子邮箱地址添加为云盘成员,成员权限是内容管理员这个时候,云盘应该是 1个群组.1人
检验这些
sa
是否有权限为什么要检验服务账号 SA 的权限
通过上面的方法给
sa
添加访问云盘的权限后,如果不检测sa
,不把无效SA
剔除时,有时则会遇到任务异常中断、命令行日志无限循环输出但进度不变、复制完发现丢文件等情况;在进行复制时,需要向Google
的服务器提交要复制的文件ID
和复制的位置,也就是新创建的目录ID
,由于在请求时是随机选取的sa
,所以当选中没有权限的sa
时,这次拷贝请求没有对应目录的权限,就会发生这些错误,所以需要检测执行代码检测
1
2
3cd && cd /root/gd-utils
./validate-sa.js 你的谷歌云盘ID谷歌云盘
ID
要选择你添加sa
所在的云盘ID
,程序会读取sa
目录下所有json
文件,依次检查它们是否拥有对你的目录云盘ID
的阅读权限;如果最后发现了无效的sa
,程序会提供选项让用户选择,出现下面的提示则说明sa
都有权限
方法二:直接将这些
sa
添加为谷歌云盘成员
1
2
3cd && cd /root/AutoRclone
python3 add_to_team_drive.py -d 0AJuS7AAmub3BUk9PVA 0AJuS7AAmub3BUk9PVA 为自己云盘ID此时我们打开谷歌云盘,找到这个页面,我一下云盘里面是不是多了我们刚才添加的
SA
检验这些
sa
是否有权限,检验方法跟上面的检验方法是一样的配置 rclone 挂载团队盘
1
2
3
4
5
6
7
8rclone config
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> gd给你的团队盘起一个名字,英文字符,我这里以
gd
为例,然后下一步会让你选择云盘种类,选择谷歌云盘的代号回车,一般是 13 左右;接着输入 client_id 和client_secret,这分别是api
的ID
和密钥打开
google api
,左上角选择最开始创建的项目,一般是Quickstart
,按图示操作点开后,右边就是我们的 client_id 和 client_secret
根据提示,输入到 SSH 中,下一步选择 1
root_folder_id 和 service_account_file 这两个可以直接回车,下面两个选择都选 N,之后会生成一个链接粘贴到浏览器中,登陆自己的谷歌账号授权,将生成的 代码 复制到
SSH
中回车,详细操作请看图这里有一点需要注意,配置到这一步时
1
2
3
4Configure this as a team drive?
y) Yes
n) No
y/n> n系统询问你是要挂载团队云盘还是挂载你个人的云盘,选
y
就是挂载团队云盘(前提你账户里面有团队云盘),选n
就是挂载个人云盘,但是不管是选y
还是选n
,我们在下面的步骤中运行 node check.js 代码检查服务器的联通情况时,返回的都是个人云盘内容然后将以下信息记录下来
1
2
3
4
5
6
7[gd]
type = drive
client_id = 959724asinf35vl.apps.googleusercontent.com
client_secret = V7Rz-b6iZ7bUoXiF
scope = drive
token = {"access_token":"ya29.a0AfH6SMDy-hDacbkL8w3DaT_dhrZeVjGEtfb8KmZ9Xg4S7ECLNKRJ_HYU0ndWngegJR7PcgktASdPaDsupEmqweDBoZXCtRmzIclB4EMxS5KAB99yHny_IeusrcaVVAgQG2v2R59CdWfnw","token_type":"Bearer","refresh_token":"1//0dQ_xB5KS9KejCgYIARAAGA0SNwF-L9IruF5Fg4pB8vwF2UOFeIrq1AiBEs","expiry":"2020-08-22T03:51:25.629822745-07:00"}
team_drive = 0AL5v92JLPVA其中
client_id
和client_secret
是客户端的ID
和密钥token
是rclone
连接云盘生成的值,这个值我们只取refresh_toke
这一部分,即1//
后面的内容,类似于这样1
21//0dQ_xB5KS9KejCgYIARAAGA0SNwF-L9IruF5Fg4pB8vwF2UOFeIrq1AiBEs
team_drive` 是团队盘的 `ID配置 config.js
编辑
/root/gd-utils/config.js
文件,将刚才记录的client_id
、client_secret
、refresh_token
、TARGET
、tg_token
、控制机器人的tg
用户名填入到对应的位置也可以运行命令
rclone config file
找到rcone
的配置文件,在配置文件中找到信息填写完成后保存,运行代码检查有没有连接上云盘
1
2
3cd && cd /root/gd-utils
node check.js如果你的云盘内没有文件输出的是
[]
,有文件输出文件信息;如果你的云盘有文件还是输出[]
或者有其它报错,则没有连接上云盘,需检查配置;建议个人云盘和团队云盘都放入内容测试使用宝塔安装 PM2 和 Nginx
宝塔安装完成后,点击宝塔左边软件商店,搜索 PM2 和 Nginx 这两个软件安装,安装完成后,这个时候建议重启一下服务器,重启之后运行代码;而且每次重启后都要运行一次代码
1
2
3cd && cd /root/gd-utils
pm2 start server.js --node-args="--max-old-space-size=1024"然后进入宝塔在已安装的软件中找到
PM2
管理器,查看一下是否有任务运行;如果有任务运行直接添加站点,如果没有则手动添加任务,手动添加方法如下;最后记住一定要开放 23333 端口手动添加
PM2
任务项目所在根目录选择
gd-utils
所在路径,启动文件名称为server.js
,项目名称随意,根据图示填写然后点击宝塔安全,放行23333端口,注意放行 23333 端口后端口是否是正常状态,如果不是,则说明上一步配置的
server.js
运行失败;如果厂商自带的有防火墙或者自己服务器本地设置了防火墙,请自行排查23333
端口是否开放在宝塔里添加站点,域名是解析到服务器的域名;添加成功后,给网站申请
SSL
证书,开启强制HTTPS
打开自己的网站,如果出现下面的页面,说明网站设置正确
设置反向代理
再次打开网站,打开网站后如果网页只在左上角显示
not found
字样时,说明反代配置成功回到SSH,执行下面代码以命令行的形式检查网站是否部署成功;代码一定要检查清楚,网址不能多
/
,字符不能少,请严格参考示例1
2
3
4
5
6cd && cd /root/gd-utils
curl 'YOUR_WEBSITE_URL/api/gdurl/count?fid=124pjM5LggSuwI1n40bcD5tQ13wS0M6wg'
示例
curl 'https://bot.54215.tk/api/gdurl/count?fid=124pjM5LggSuwI1n40bcD5tQ13wS0M6wg'
如果返回了gd-utils 成功启动的消息,说明部署成功了在命令行执行(请将
YOUR_WEBSITE
和YOUR_BOT_TOKEN
分别替换成你自己的网址和bot token
),将你的服务器连接上你的telegram bot
1
2
3curl -F "url=YOUR_WEBSITE/api/gdurl/tgbot" 'https://api.telegram.org/botYOUR_BOT_TOKEN/setWebhook'
示例
curl -F "url=https://bot.54215.tk/api/gdurl/tgbot" 'https://api.telegram.org/bot1240808718:AAHupIg5gpMrMiDmGSh5b5-nlqi5uRvXQTw/setWebhook'如果返回
{"ok":true,"result":true,"description":"Webhook was set"}
,则说明你的服务器连接上你的telegram bot
了,给自己的电报机器人发送/help
,如果它回复给你 使用帮助,那就配置成功了1
注意:给机器人发送消息时,一般立刻就会回复信息,如果没有回复信息,可能会有延迟请稍等几分钟,或者重启一下服务器在试,如果还不行,请检查配置
这个时候,我们向机器人发送一条谷歌云盘的分享链接,机器人会识别这个链接,提示我们选择动作,点击复制它会立刻开始复制到我们设置的云盘里
当机器人提示复制成功后,我们打开我们的谷歌云盘,发现我们的云盘里已经有了一个同名的文件夹
参考:
https://github.com/iwestlin/gd-utils
https://github.com/iwestlin/gd-utils/blob/master/changelog.md
https://kkdfxz.gitbook.io/fx/jiao-cheng-zhong-xin/drive750g
https://blog.jialezi.net/?post=153
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ONLYONE!
评论