AutoApiSS/README_NEW.md

300 lines
14 KiB
Markdown
Raw Normal View History

2024-11-11 03:13:53 -05:00
# Microsoft 365 E5开发者订阅自动续订脚本
本文来自[此处](https://b2og.com/archives/6)遵循CC BY 4.0协议,有问题欢迎邮箱联系或者博客直接留言。
# 0. 写在前面
之前在浏览github的时候发现我的存储库少了几个最后发现是E5自动续订的存储库因为违反github服务协议而被ban了包括AutoApiSR模仿人为应用开发版, AutoApiS超级版上游仓库无一幸免全被ban了。
![0.0 仓库被ban了 :(](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/06/1686053137-image-20230606200535602-cab4ef.png)
为了避免今后续订不上的问题我自己从一开始用的是超级版而且并非直接fork其他人的仓库而是自行修改了workflow工作流的一些bug也就是修改了一部分代码自行上传到了github因而避免了仓库被ban。
而且仓库原来的readme中图片早已无法访问而且由于github政策的影响仓库随时可能被ban因此再写一份超级版教程以备不时之需。
若今后仓库再次被ban会考虑将续订脚本转移到自己的云服务器上今后会再出教程。
脚本会放在文末,需要自取。
# 1. 新建用户
*这一步可选,你可以直接使用管理员账户,但不建议。*
在注册了e5开发者后使用管理员账号登录[Microsoft 365 管理中心](admin.microsoft.com)。
点击``用户````活跃用户````添加用户``。
![1.1 添加用户](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/06/1686059174-1.1-4d8145.png)
按需填写``显示名称``、``用户名``、以及``密码``。
![1.2 按需填写](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/06/1686059406-image-20230606215005224-ed2f99.png)
并勾选E5授权``Microsoft 365 E5 开发者``。
![1.3 e5授权勾选](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/06/1686059253-1.2-89704d.png)
可选设置无需填写,点击完成即可。
# 2. 注册新应用
进入[Microsoft Azure主页](https://portal.azure.com/#home),点击左侧菜单栏,再点击 ~~``Azure Active Directory``~~,现在是 ``Microsoft Entra ID``。
![2.1](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/06/1686059835-2.1-ce52c2.png)
点击左侧``应用注册``,再点击``新注册``以注册新应用。
![2.2 注册新应用](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/06/1686060076-2.2-8a36aa.png)
名称随意填写受支持的账户类型选择第三项重定向URI选择Web并填写``http://localhost:53682``。
![2.3 填写应用配置](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/06/1686060297-2.3-41b7fc.png)
注册完成后保存``应用程序(客户端) ID``备用。
![2.4 保存应用程序id](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/09/1686295118-2.4-c9a16e.png)
# 3. 授予api权限
在左侧导航栏选择``API权限``,再点击``添加权限``,再点击``Microsoft Graph``。
![3.1 添加权限](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/09/1686293287-3.1-5f65df.png)
点击``委托的权限``。
![3.2 点击委托的权限](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/09/1686293414-3.2-0a67ea.png)
根据超级版要求添加以下权限。
```
Calendars.ReadWrite, Contacts.ReadWrite, Directory.ReadWrite.All,
Files.ReadWrite.All, MailboxSettings.Read, Mail.ReadWrite,
Notes.ReadWrite.All, People.Read.All, Sites.ReadWrite.All,
Tasks.ReadWrite, User.ReadWrite.All
```
若你是管理员账户,可以直接点击``代表***授予管理员同意``;否则请切换为管理员账户并点击以上按钮。
![3.3 授予管理员同意](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/09/1686294241-3.3-e5af77.png)
# 4. 创建密码
在左侧导航栏点击``证书与密码``,再点击``新客户端密码``截止期限最长24个月。点击添加。
![4.1 添加客户端密码](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/09/1686294558-4.1-88a338.png)
复制``值``,保存备用。密码只会出现这一次,若丢失请重新生成密码。
![4.2 复制密码](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/09/1686294708-4.2-2e4219.png)
# 5. 获取refresh_token
[下载](https://rclone.org/downloads/)rclone客户端。之后在下载目录右键打开终端。输入以下命令。
```
// powershell
.\rclone.exe authorize "onedrive" "应用程序id" "密码"
// cmd
rclone.exe authorize "onedrive" "应用程序id" "密码"
```
回车后会跳转到浏览器,登录刚刚的账号并点击``接受``。
![5.1 点击接受](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/09/1686295870-5.1-56179d.png)
回到终端,即可复制``refresh_token``,保存备用。注意不要复制错了。
![5.2 复制refresh_token](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/09/1686295971-5.2-43a84e.png)
# 6. 脚本设置
在文末获取py脚本源代码并修改。
在``token``文件夹中,从``0.txt``开始新建文本文档。若有多个账号,则为``0.txt, 1.txt ··· ``以此类推。
文本文档内按顺序放入``refresh_token``账号1的``refresh_token``放入``0.txt``账号2的``refresh_token``放入``1.txt``,以此类推。
![6.1 放入refresh_token](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/09/1686296955-6.1-7ee952.png)
文档内容如下,无需其他内容
![6.2 文档展示](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2024/01/09/1704814287-image-20240109233125041-ce0d7b.png)
打开项目根目录的``testapi.py``文件在第15行修改参数。
```
各参数说明:
* 每次轮数每启动一次运行多少轮api调用一轮调用10个api
* 是否启动随机时间:每一轮结束隔“多久”才开始下一轮调用,这个“多久”会根据后面的参数随机生成
* 延时范围起始结束例如设置600跟1200则“多久”会在600到1200秒这个范围随机生成一个数到时间开启下一轮调用
* 是否开启随机api顺序:根据一定规则从28个api抽13个随机排序我设置的是30天换一次顺序。不开启则默认原教程10个api。
* 是否开启各api延时就是每个api调用要不要停一下才开始下一个api调用。个人建议不开
同样有范围例如api延时范围开始跟api延时结束分别设置为1020.则会在10到20秒这个范围随机生成一个数然后调用下一个api
* 是否开启各账号延时:就是每个账号调用要不要停一下才开始下一个账号调用。
同样有范围例如账号延时范围开始跟分结束分别设置为60120.则会在60到120秒这个范围随机生成一个数然后调用下一个账号
* 是否开启备用应用更换应用id调用api。同样每30天更换一次应用id。目前每个账号只至支持1个副应用
开启后需分别为各账号再注册一个应用然后在设置的secret再增加两条若开启则需要从第二章开始再来一遍。Secret为Github Action的设置在下一章会讲到。
ID_LIST2
内容为: id_list2=[r'帐号1副应用id',r'帐号n副应用id']
KEY_LIST2
内容为: secret_list2=[r'帐号1副应用机密',r'帐号n副应用机密']
然后类似的在backuptoken文件夹里放入对应的副应用的0.txt....n.txt。
这里看不懂的话直接选N吧
* 是否开启测试瞬间完成运行以便查看id、机密、token等是否填写错误能否正确运行。
若配合备用应用模式使用则会同时测试各账号的主副应用看看主副应用是否都能成功调用api
测试完务必改回N
```
修改完保存即可。
# 7. Github设置
登录你的账号在你Github主页[新建](https://github.com/new)仓库。公有或者私有仓库对Github Action的支持是不一样的参考以下内容。
> GithubAction介绍
> 提供的虚拟环境:
>
> · 2-core CPU · 7 GB RAM 内存 · 14 GB SSD 硬盘空间
>
> 使用限制:
>
> 每个仓库只能同时支持20个 workflow 并行。
> 每小时可以调用1000次 GitHub API 。
> 每个 job 最多可以执行6个小时。
> 免费版的用户最大支持20个 job 并发执行macOS 最大只支持5个。
> 私有仓库每月累计使用时间为2000分钟超过后$ 0.008/分钟,..公共仓库则无限制。
> 我们这里用的公共仓库按理你们可以设定无限循环调用然后6小时启动一次保证24小时全天候调用
![7.1 新建仓库](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/09/1686297807-image-20230609160203677-e83a91.png)
在源码根目录中打开终端按照Github的提示将文件push到仓库中。
![7.2 pushpush](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/09/1686298410-7.3-13cc6e.png)
```
git init //把这个目录变成Git可以管理的仓库
git add README.md //文件添加到仓库
git add . //不但可以跟单一文件还可以跟通配符更可以跟目录。一个点就把当前目录下所有未追踪的文件全部add了
git commit -m "first commit" //把文件提交到仓库
git branch -M main //创建main分支
git remote add origin "https://github.com/GrandDuke1106/test.git" //关联远程仓库
git push -u origin main //把本地库的所有内容推送到远程库上
```
在push过程中会要你登录Github登录你自己的账号即可。
![7.3 登录 Github](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/09/1686299034-image-20230609162353335-28c705.png)
以下是完整命令。
```
PS D:\document\vs\e5> git init
Initialized empty Git repository in D:/document/vs/e5/.git/
PS D:\document\vs\e5> git add .
PS D:\document\vs\e5> git commit -m "first commit"
[master (root-commit) b357599] first commit
14 files changed, 691 insertions(+)
create mode 100644 .github/workflows/AutoApiSuper.yml
create mode 100644 .github/workflows/randomapi.yml
create mode 100644 .github/workflows/uaptetoken.yml
create mode 100644 README.md
create mode 100644 backuptoken/0.txt
create mode 100644 backuptoken/1.txt
create mode 100644 config/1.txt
create mode 100644 config/buconfig.txt
create mode 100644 config/randomapi.txt
create mode 100644 testapi.py
create mode 100644 token/0.txt
create mode 100644 token/1.txt
create mode 100644 updaterand.py
create mode 100644 updatetoken.py
PS D:\document\vs\e5> git branch -M main
PS D:\document\vs\e5> git remote add origin https://github.com/GrandDuke1106/test.git
PS D:\document\vs\e5> git push -u origin main
info: please complete authentication in your browser...
Enumerating objects: 21, done.
Counting objects: 100% (21/21), done.
Delta compression using up to 8 threads
Compressing objects: 100% (17/17), done.
Writing objects: 100% (21/21), 13.31 KiB | 4.44 MiB/s, done.
Total 21 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), done.
To https://github.com/GrandDuke1106/test.git
* [new branch] main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
PS D:\document\vs\e5>
```
# 8. 机密设置
在仓库页面点击``Settings``,点击``Secrets and variables``,点击``Actions``,再点击``New repository secret``,以添加机密。
![8.1 添加机密](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/09/1686299792-8.1-e20154.png)
第一个机密的标题为``ID_LIST``(必须要大写),内容如下所示。
```
//只有一个账户时
id_list = [r'应用id']
//多个账户时按照之前refresh_token的顺序填写
id_list = [r'账号0应用id',r'账号n应用id']
```
![8.2 添加ID_LIST](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/09/1686300141-image-20230609164220243-c4534c.png)
点击``Add secret``即可。
第二个机密的标题为``KEY_LIST``(必须大写),内容如下所示。
```
//只有一个账户时
secret_list = [r'应用机密']
//多个账户时按照之前refresh_token的顺序填写
secret_list = [r'账号0应用机密',r'账号n应用机密']
```
![8.3 添加KEY_LIST](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/09/1686300398-image-20230609164637366-36d7b0.png)
点击``Add secret``即可。
# 9. 授予Github Action读写仓库的权限
由于需要随机排列api顺序以及刷新refresh_token因此需要允许工作流能够写入仓库。
打开仓库中``Settings``->``Actions``->``General``->``Workflow permissions``,选择``Read and write permissions``。
![9.1 授予读写权限](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2024/01/09/1704784917-%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202024-01-09%20152015-250f3c.png)
![9.2 授予读写权限](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2024/01/09/1704784922-%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202024-01-09%20152109-15ca61.png)
# 10. 启动Github Action
最后,点击``Actions``,在三个工作流中选择并手动运行测试即可。
![10.1 开始运行](https://fastly.jsdelivr.net/gh/GrandDuke1106/Imagebed@main/img/2023/06/09/1686300557-8.4-3972a5.png)
你可以在``testapi.py``文件中将``是否开启测试``选项打开来快速确定是否能够调用成功否则检查是否是因为机密等原因造成调用api失败。
# 最后
实在感谢wangziyingwen的脚本。
源代码[在此](https://drive.b2og.com/Tech/e5%E7%BB%AD%E8%AE%A2.zip),有需要自取。
咕咕咕~