You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
3.1 KiB
Python

10 months ago
import time
import json
import weibanapi
x_token = '57ba12f6-8ef6-4d62-8103-cb97a1bd4bbe'
user_id = 'eec6b514-93d6-4516-9e6a-e45cc3ce980c'
user_project_id = '5fc7738e-f98c-4890-8ce8-d3b06d2649da'
tenant_code = '4137011066'
#jq_id = '3410029753790258616464'
# 1. showProgess 获取课程进度
# 2. listCategory 获取课程分类 传入userprojectid
# 3. listCourse 获取课程 传入categorycode
# 4. study 传入courseid(上一步获取的resourceid)
# 5. getCourseUrl 获取methodToken
# 6. checkFinish(验证码用的,直接跳过)
# 7. getNear(获取最近学习,没啥用,直接跳过)
# 8. 调用methodToken完成学习 参数callback(341+16位随机数+时间戳) _(时间戳)
def wait(text: str, ti: int):
while ti:
print(text % ti, end='')
time.sleep(1)
print('\r', end='')
ti = ti - 1
print(' \r', end='')
def main():
try:
w = weibanapi.WeibanAPI(x_token, user_id, user_project_id, tenant_code)
except Exception:
print('请检查初始化参数是否正确!')
exit(-1)
courseInfo = []
required, finished = w.showProgress()
print('{} 已完成{}'.format(required, finished))
# 获取课程分类
categorys = w.listCategory()
for c in categorys:
print("{}[{}/{}]".format(c["categoryName"], c["finishedNum"], c["totalNum"]))
# 如果该类课程学习数 < 总数 加入到courseInfo列表中
if c["totalNum"] > c["finishedNum"]:
courses = w.listCourse(c["categoryCode"])
for course in courses:
if course["finished"] == 2: # 根据观察 1是学了 2是没学
courseInfo.append(course)
for c in courseInfo:
userCourseId = c["userCourseId"]
resourceName = c["resourceName"]
categoryName = c["categoryName"]
resourceId = c["resourceId"]
print('开始学习{}-{}'.format(categoryName, resourceName))
code = w.study(resourceId)
if code != '0':
print('开始学习失败')
exit(-1)
# 学太快好像有可能学不上
wait('等待中.......%02d', 15)
retry_cnt = 0
captcha_id = w.DoCaptcha(userCourseId)
while (captcha_id is None) and (retry_cnt < 5):
retry_cnt = retry_cnt + 1
print(f'验证码未通过,正在重试第 {retry_cnt}')
captcha_id = w.DoCaptcha(userCourseId)
if (retry_cnt >= 5):
print('验证码重试次数达到上限,系统自动退出')
exit(-1)
tmp = w.MakeCourseFinish(captcha_id, userCourseId)
res = tmp[tmp.find('({') + 1:len(tmp) - 1]
print(f'tmp = [{tmp}], res = [{res}]')
j = json.loads(res)
if j["msg"] != "ok":
print('调用MakeCourseFinish失败!')
exit(-1)
wait('通过! %02d s后继续', 3)
if __name__ == '__main__':
print('免责声明: \n此程序仅供学习使用,由于个人操作引发的一系列后果与作者无关')
main()