Python获取头歌实训及图文作业的截止日期和完成情况

  • 直接运行python文件,输入用户名和cookie即可
  • 也可以将用户名和cookie硬编码到代码中
  • 默认输出文件为./tmp.json,可以自行更改
  • 目前常用实训作业和图文作业,所以只做了这两个。分组作业应该也可以,但没布置过分组作业,没法验证在线考试疑似用了其他手段,导致没法用获取实训的方法获取考试信息。

gitee:EducoderDeadlines: 使用python获取头歌平台所有实训和图文作业的截止日期 (gitee.com)

代码:

from urllib import request
import re
import json

username = input("username:")
cookie = input("cookie:")


ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.50"
referer = "https://www.educoder.net/users/%s/classrooms" % username
headers = {
    "User-Agent": ua,
    "Referer": referer,
    "Cookie": cookie,
}

# username username
course_list_url = "https://data.educoder.net/api/users/%s/courses.json?username=%s"
"""
type对应关系

homework_commons.json:
1-图文作业
3-分组作业
4-课堂实验


"""
# course-id course-id course-id type-num
course_item_url = "https://data.educoder.net/api/courses/%s/homework_commons.json?coursesId=%s&id=%s&limit=114514&type=%d"

homework_types = {"图文": 1, "实训": 4, "分组": 3}

deadlines = {}


course_list = []
course_list_req = request.Request(
    url=course_list_url % (username, username), headers=headers
)
course_list_res = request.urlopen(course_list_req)
course_json = json.loads(course_list_res.read().decode("utf-8"))
for i in course_json["courses"]:
    course_list.append(
        (i["name"], re.findall(r"^/[a-z]*/([a-zA-Z0-9]*)/", i["first_category_url"])[0])
    )

for course, courseid in course_list:
    deadlines[course] = {}
    # 图文作业
    normal_homework_req = request.Request(
        url=course_item_url % (courseid, courseid, courseid, homework_types["图文"]),
        headers=headers,
    )
    normal_homework_res = request.urlopen(normal_homework_req)
    normal_homework_json = json.loads(normal_homework_res.read().decode("utf-8"))
    deadlines[course][normal_homework_json["main_category_name"]] = {
        "total_count": normal_homework_json["task_count"],
        "homeworks": [
            {
                "name": i["name"],
                "end_time": i["end_time"],
                "unfinished": i["un_commit_work"],
            }
            for i in normal_homework_json["homeworks"]
        ],
    }
    unfinished = 0
    for i in normal_homework_json["homeworks"]:
        if i["un_commit_work"]:
            unfinished += 1
    deadlines[course][normal_homework_json["main_category_name"]][
        "unfinished_count"
    ] = unfinished

    # 实训作业
    shixun_homework_req = request.Request(
        url=course_item_url % (courseid, courseid, courseid, homework_types["实训"]),
        headers=headers,
    )
    shixun_homework_res = request.urlopen(shixun_homework_req)
    shixun_homework_json = json.loads(shixun_homework_res.read().decode("utf-8"))
    deadlines[course][shixun_homework_json["main_category_name"]] = {
        "total_count": shixun_homework_json["task_count"],
        "homeworks": [
            {
                "name": i["name"],
                "end_time": i["end_time"],
                "unfinished": not bool(i["shixun_finished_status"]),
            }
            for i in shixun_homework_json["homeworks"]
        ],
        "unfinished": shixun_homework_json["task_count"]
        - shixun_homework_json["finished_task_count"],
    }

deadlines_json = json.dumps(deadlines, ensure_ascii=False)
open("tmp.json", "w", encoding="utf-8").write(deadlines_json)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值