背景说明
过了一段时间以后,因为要给OJ添加网盘的缘故,我在官方的文档里面竟然找到了管理用户的API,可以直接发送请求而不需要获取Cookies,文档的地址如下 :https://docs.nextcloud.com/server/10.0/admin_manual/configuration_user/user_provisioning_api.html
为此我重新写了一份python代码,除了可以批量添加和删除用户,还可以批量设置用户的组别,即使高一年级分班,也可以继续使用旧的账号,资料也不必删除。
Python代码
本代码实现了用户的添加、删除,修改用户分组,具体内容如下:
from re import findall
from urllib.request import urlopen
import os,requests
import json
import time
def getTxtInfo(filename):
with open(filename, "r") as f:
data = f.readline()
return data
url=getTxtInfo("url.txt")
ocs="true"
headers = {
'OCS-APIRequest': 'true',
}
select=1
print("请选择对应编号执行相关操作:")
print("1.添加用户")
print("2.重新设置用户的分组")
print("3.删除用户")
select=int(input("请输入编号:"))
user_body={"userid":"userid","password":"123456","displayName":"张三丰","email":"zhcdhgz@qq.com","groups":["class01"],"subadmin":[],"quota":"100MB","language":"zh_CN"}
group_body={"groupid":"groupname"}
cnt=0
with open("users.csv", "r", encoding='UTF-8') as f:
for line in f.readlines():
line = line.strip('\n') #去掉列表中每一个元素的换行符
cnt=cnt+1
if cnt==1:
continue
temp=line.split(",")
name=temp[0]
old_class=temp[1]
new_class=temp[2]
username=temp[3]
email=temp[4]
passwd=temp[5]
quota=temp[6]
if select==1:
user_body["displayName"]=name
user_body["groups"][0]=new_class
user_body["userid"]=username
user_body["email"]=email
user_body["password"]=passwd
user_body["quota"]=quota
response = requests.post(url, json = user_body, headers =headers)
if response.text.find("ok")>1:
print(user_body["userid"]+" 添加用户成功!")
else :
print(user_body["userid"]+" 添加用户失败...")
# print (response.text)
if select==2:
group_body["groupid"]=old_class
response=requests.delete(url+'/'+username+'/groups',json=group_body,headers=headers)
if response.text.find("ok")>1:
print(username+" 从分组:"+old_class+"移除成功!")
else :
print(username+" 从分组:"+old_class+"移除失败!")
#print(response.text)
group_body["groupid"]=new_class
# print(url+username+'/'+old_class)
response=requests.post(url+'/'+username+'/groups',json=group_body,headers=headers)
if response.text.find("ok")>1:
print(username+" 添加到分组:"+new_class+"成功!")
else :
print(username+" 添加到分组:"+old_class+"失败!")
#print(response.text)
if select==3:
response=requests.delete(url+'/'+username,json=group_body,headers=headers)
if response.text.find("ok")>1:
print(" 删除用户:"+username+"成功!")
else :
print("删除用户:"+username+"失败!")
代码使用说明:
1.设置请求地址
代码中的变量url表示请求的链接,请求格式为
http://admin:secret@example.com/ocs/v1.php/cloud/users
要将链接中的管理员账号和密码,请求的地址换成自己的,然自己新建一个“url.txt”,将请求的地址保存到里面,如果不想从文件中获取请求地址,也可以直接在代码
url=getTxtInfo(“url.txt”)
中修改。
2.用excel新建一个表格,填写内容完成后保存为“users.csv”到,保存的目录和运行程序一个目录,表格的第一行内容不用修改