Giter VIP home page Giter VIP logo

zfn_api's Introduction

🏫 新正方教务管理系统 API

😁 几乎规避所有学校不同导致的兼容性问题,可放心食用!!

求 ⭐⭐⭐⭐⭐(跪


功能实现

  • 登录(自动识别是否需要验证码)
  • 个人信息
  • 成绩查询(两种接口)
  • 课表查询
  • 课程表 PDF
  • 学业生涯数据
  • 学业生涯(学业成绩总表) PDF (存在兼容问题
  • 停补换课消息
  • 查询已选课程
  • 获取选课板块课列表
  • 选课
  • 退课
  • 空教室查询

状态码

为了一些特殊的业务逻辑,如验证码错误后自动刷新页面获取等,使用了自定义状态码,详情如下:

状态码 内容
998 网页弹窗未处理内容
999 接口逻辑或未知错误
1000 请求获取成功
1001 (登录)需要验证码
1002 用户名或密码不正确
1003 请求超时
1004 验证码错误
1005 内容为空
1006 cookies 失效或过期
1007 接口失效请更新
2333 系统维护或服务被 ban

Tips⚠️

  • 上下课时间 raspisanie 若与 zfn_api.py 中不一致,请自行按照相关格式编写。

  • 学业生涯数据为教务系统 “学生学业情况查询” 页面内容,获取数据时请留意 ignore_typedetail_category_type

    • ignore_type 表示需要忽略的最顶部根类型,如 “主修”,“20XX 级 XX 专业” 等无用类型,可留空数组,对结果无影响
    • detail_category_type 表示需要详细获取课程分类的类型,如 “其他课程” 需获取该网课属于什么类等,可留空数组
  • 教务系统的 cookies 在不同学校统一认证系统不同,若系统开启了验证码且 cookies 格式内容与默认有出入,请修改 zfn_api.pylogin_with_kaptcha() 中兼容差异注释部分。

  • 兼容导致 学业生涯数据 PDF 表的导出会出现问题,待排查。

  • 提供了可供 appwrite 等平台调用的云函数 main.py ,也有一个简单的测试示例

      # example.py
      import base64
      import os
      import sys
      from pprint import pprint
    
      from zfn_api import Client
    
      cookies = {}
      base_url = "https://xxx.com"
      raspisanie = []
      ignore_type = []
      detail_category_type = []
      timeout = 5
    
      stu = Client(cookies=cookies, base_url=base_url, raspisanie=raspisanie, ignore_type=ignore_type, detail_category_type=detail_category_type, timeout=timeout)
    
      if cookies == {}:
          lgn = stu.login("sid", "password")
          if lgn["code"] == 1001:
              verify_data = lgn["data"]
              with open(os.path.abspath("kaptcha.png"), "wb") as pic:
                  pic.write(base64.b64decode(verify_data.pop("kaptcha_pic")))
              verify_data["kaptcha"] = input("输入验证码:")
              ret = stu.login_with_kaptcha(**verify_data)
              if ret["code"] != 1000:
                  pprint(ret)
                  sys.exit()
              pprint(ret)
          elif lgn["code"] != 1000:
              pprint(lgn)
              sys.exit()
    
      result = stu.get_info('sid')  # 获取个人信息
      # result = stu.get_grade(2021, 2)  # 获取成绩信息,若接口错误请添加 use_personal_info=True,只填年份获取全年
      # result = stu.get_schedule(2022, 1)  # 获取课程表信息
      # result = stu.get_academia()  # 获取学业生涯数据
      # result = stu.get_notifications()  # 获取通知消息
      # result = stu.get_selected_courses(2022, 1)  # 获取已选课程信息
      # result = stu.get_block_courses(2021, 1, 1)  # 获取选课板块课列表
      pprint(result, sort_dicts=False)
    
      # file_result = stu.get_academia_pdf()["data"]  # 获取学业生涯(学生成绩总表)PDF文件
      file_result = stu.get_schedule_pdf(2022, 1)["data"]  # 获取课程表PDF文件
      with open(os.path.abspath("preview.pdf"), "wb") as f:
          f.write(file_result)

部分数据字段说明

{
  // 成绩
  "course_id": "课程号",
  "title": "课程标题",
  "teacher": "任课教师",
  "class_name": "教学班名称",
  "credit": "学分",
  "category": "课程类别",
  "nature": "课程性质",
  "grade": "成绩",
  "grade_point": "绩点",
  "grade_nature": "成绩性质",
  "start_college": "开课院系",
  "mark": "",
  // 课表
  "weekday": "星期几",
  "time": "上课时间",
  "sessions": "上课节数",
  "list_sessions": "开课节数列表",
  "weeks": "开课周数",
  "list_weeks": "开课周数列表",
  "evaluation_mode": "考核方式",
  "campus": "上课校区",
  "place": "上课场地",
  "hours_composition": "课程学时组成",
  "weekly_hours": "每周学时",
  "total_hours": "总学时",
  // 学业生涯
  "situation": "修读情况",
  "display_term": "修读学期",
  "max_grade": "最佳成绩",
  // 选课
  "class_id": "教学班ID",
  "do_id": "执行ID",
  "teacher_id": "教师ID",
  "kklxdm": "板块课ID",
  "capacity": "教学班容量",
  "selected_number": "已选人数",
  "optional": "是否自选",
  "waiting": ""
}

星图

Stargazers over time

zfn_api's People

Contributors

aglorice avatar nianbroken avatar yilimmilk avatar zaigie avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

zfn_api's Issues

求救

怎么进行抢课呢?

如何获取全部选课信息?

在教务系统前端可以实现“学年 = 全部;学期 = 全部“这样的操作
但通过zfn_api时却无法实现,无法获取全部选课信息
具体输出内容如下:

{
   "code": 1000,
   "msg": "获取已选课程成功",
   "data": {
      "year": "",
      "term": 0,
      "count": 0,
      "courses": []
   }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.