MooCount清华大学慕课平台讨论区统计助手 使用说明
版本号 0.1.0 build 20121402
项目地址:清华大学代码托管平台TitHub
更新 - 已暂时停更
v0.2.0 build 20122301
- 加入了“视频评论区”统计,但限于服务器设置,此步骤无法自动完成视频清单的获取,需手动添加
- 加入了评论内容整合
- 优化内存使用
v0.1.0 build 20122001
- 修复了输出csv文件的格式:以”stdID”、”count”为keys,以 **(学号,统计次数)**对为数据输出。
- 增加部分错误处理机制
- 简化凭证设置步骤
- 优化内存使用
v0.0.2 build 20121402
由Ap0str0ph3于2020年12月14日下午21:30提交
- 将项目能力能力拓展至平台任意课程
- 修复了少量bug
v0.0.1 build 20121401
由Ap0str0ph3于2020年12月14日下午17:00提交
- 完成了项目基础能力的开发
前言
我校部分思修课程的慕课学习有“16次”讨论区讨论的任务,但限于平台功能,同学们无法获知已讨论次数,故特开发此程序用于统计已讨论次数。然而,此程序使用的方法极为暴力,希望平台开发者后期能提供统计功能。
程序概述
总体设计
程序采用Python为主要语言开发,读写数据时采用以下文件格式:
- json,用于存储一个讨论区的信息数据、存储讨论区中每个讨论的内容数据
- har,用于储存一个用于平台登陆的账号的request信息
- csv,用于存储最终统计结果,便于直接读入Excel中
引用了以下包(如需二次开发请确保以下包安装到位,均可用pip安装):
- json
- requests
- csv
- urllib
慕课网站讨论区部分架构(并按照网站后台代码翻译)可表示为:
- 讨论区 - Forum
- 讨论题 - Discussion
- 讨论题目
- 讨论数据的统计数据
- 讨论数据
- 讨论 - Comment
- 讨论内容
- 学生信息(含学号)
- 讨论 - Comment
- 讨论题 - Discussion
程序原理
程序通过用户输入的慕课id获取对应慕课讨论区的数据包,里面包含每个讨论题的唯一识别编号(讨论id)。
对每个讨论题,程序发送GET请求,获取到一个json文件其url如下:
1 | "https://tsinghua.yuketang.cn/v/discussion/v2/comment/list/" + id + "/?_date=" + time + "&term=latest&offset=" + offset + "&limit=" + limit + "&web=true" |
其中:
- id是讨论题的唯一识别编号
- time是请求时的UNIX时间戳
- offset是下载的首条讨论的偏移量,即从第(
offset + 1
)条记录开始下载 - limit是讨论数的下载总量
关于UNIX时间戳,请浏览:Wikipedia。亲测time设为任意合法时间戳均可,应当只是用于服务器记录用。设置较大的limit就能保证每条数据都被下载。例如,我所在班级微信群共150人,代码中设置200几乎能保证下载到所有记录。
遍历讨论数据中的每一条,在字典中插入对应学号(如果之前没有插入)并赋值为1,或为字典中对应学号的值+1(如果之前已经插入)。
最后,将字典保存为csv文件输出。
使用说明
载入凭证
先手动登录慕课平台,按下浏览器的F12
键,打开Developer Tools,单击 “Network”选项卡;
保持Developer Tools打开,从页面进入慕课的讨论区;
在 “Network”选项卡下寻找以 “?_date=…”为前缀的项目,右键,选择Save all as HAR with content保存为HAR文件;
打开保存的HAR文件,找到request
对象,将其中的cookies
对象、headers
对象分别复制到程序同目录下的req.har文件中的对应位置。由于程序会为服务器带来短时间的大量访问,特设置此障碍,防止作者被打死防止过多人频繁使用本工具,为服务器带来明显负面影响。
载入凭证
在同一目录下创建“Forum”文件夹,确认程序有访问之的权限。
确认慕课编号
在讨论区页面,单击浏览器地址栏,找到参数cid=...
,记录后面的7位数,作为慕课id。
编译并运行程序,在提示时输入慕课id,回车。
导出数据
等待程序下载、统计数据。完成后,在程序目录下会找到count.csv文件。以UTF-8 CSV文件导入Excel即可。
这里作者不小心把学号作为csv的keys了,麻烦自己调一下,下次更新的时候(如果有)作者会改过来!