智慧山水平台每日云端自动上报健康数据

之前写了一个程序,可以帮助上报健康数据到智慧山水。 但是一直是需要自己电脑或者服务器的支持,自己的电脑需要长期开机,或者花钱购买云服务器。 现在终于可以摆脱束缚,仅需一次配置,配置完成后无需电脑或服务器,每日云端自动提交,零成本、无电费。 以下方式可实现定时提交程序。 云端自动提交 使用腾讯云函数 腾讯云函数介绍 什么是腾讯云函数? 官方介绍: 腾讯云云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码, 是实时文件处理和数据处理等场景下理想的计算平台。 您只需使用 SCF 平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。 简单来说就是可以自动定时运行代码的服务器,你无需担心服务器是否正常、是否被攻击,只需要关心代码即可。 免费额度 资源类型 每月免费额度 资源使用量 40 万 GBs 调用次数 100 万次 已经够使用了。 使用方式 准备代码 下载运行环境依赖 由于代码引入了python的lxml库,但是腾讯云函数提供的环境中又没有此依赖,所以需要手动上传。 依赖下载地址:https://wwa.lanzous.com/ivuSHeukg2h 下载到一个压缩包。 打开之后结构如图所示: 将程序运行所必须的文件放入此压缩包 程序仓库:https://github.com/imldy/health-data-post(里面有代码及使用说明) 配置文件使用说明:https://github.com/imldy/health-data-post/blob/master/students_data_explain.md 必须的文件列表: HealthDataPost.py(代码) students_data.json(配置文件) 我用的解压缩软件是Bandizip,可以直接拖拽文件到压缩包。 点击“确定” 如果你的软件不支持拖拽文件到压缩包,你可以先解压依赖文件,然后和软件运行所必须的文件压缩到同一个压缩包内,是.zip格式即可。 如图所示,是准备好的压缩文件,里面包含依赖,也包含程序运行所必须的文件。 注册、登录腾讯云 链接:https://cloud.tencent.com/product/scf 打开上方链接,点击右上角登录,可以使用邮箱、QQ等,直接登录即可,很简单,不再赘述。 使用腾讯云函数 点击页面左边的“立即使用”进入控制台。 可以看到你已经拥有的函数的情况,初次使用为空正常。 点击左边的“函数服务”,可以看到已有的函数服务。 地区使用大陆地区(除非你的代码需要国际互联网的支持,但是咱们的提交健康数据使用国内网络即可)。 点击“新建” 新建函数 基本信息 函数名称:自己随便输入,我这里使用的是HealthDataPost。 运行环境:选择“Python3.6”。 创建方式:选择“空白函数”,方便我们后续添加自己的代码 单击“下一步” 函数配置 描述:填写方便自己标识各个函数的文字,例如智慧山水平台健康自动数据提交 执行方法:填写HealthDataPost.main,这里填写的是程序的入口,即程序第一个要执行的函数。.前面是代码文件名字,后边是方法名(这个方法名必须接收两个参数,我这里已经实现了)。 提交方式:即上传代码的方式,我们这里选择“通过本地上传zip包” 单击“上传” 选择我们之前准备好的代码的压缩文件,然后点击“打开”即可。 选择完文件之后配置高级设置。 单击“高级设置” 将超时时间设置为“20”秒,这里我们设置的宽裕一点,暂时不用这么节省,后期如果你经常使用腾讯云函数,可以根据情况来自行调整。 单击“完成”,选择的文件在此时正式被上传。...

2021-05-20 18:37:46 更新

智慧山水助手更新v2.1

仓库地址 Github:https://github.com/imldy/health-data-post 更新内容 2020-04-13 Version:2.1 修改是否提交的判断逻辑为提取到提示信息进行判断 2020-04-12 Version:2.0 提交内容更新。 提交页面网址以及提交接口更新。 从当前页面上获取日期以提交。

2021-05-20 18:37:46 更新

智慧山水平台每日自动提交健康数据——2.0提交数据修改

2020年4月12日更新了提交入口与提交接口,还修改了要提交的内容,特做一个小结。 修改需要提交的数据 本次新增的加粗显示,释义更新的以斜体显示。 新增“网页元素name”、“选项/数据获得方式”列 key 网页元素name 释义 选项/数据获得方式 id did 已经提交的表单的id。 如果是当天初次提交,id为空即可,会创建一个新的表单。当天提交后再次访问提交页面,返回的页面中会包含一个隐藏的输入框,其value就等于当天上次提交表单的id。则如果修改已经提交的信息则提交时id为此值即可。1 fillDate ddate 当天日期 以年-月-日的格式,例如2020-04-12(Xpath: /html//input[@name="ddate"]/@value) mqjk question1 1.目前个人身体健康情况 参考每日健康记录页面(空)v2.0.html文件。最好去http://pubinfo.sdwcvc.cn/xxtb2/dailyRecord页面实际考察对应选项的value。1 jrjk question2 2.一起居住的家人身体健康情况 参考每日健康记录页面(空)v2.0.html文件。最好去http://pubinfo.sdwcvc.cn/xxtb2/dailyRecord页面实际考察对应选项的value。1 city1 question3_0 3.目前所在位置:省份 参考xxtb2_js_city.json文件,但是一定要实际使用APP去定位一次,使用定位来的数据提交,因为这个文件有些地区不对。1 city2 question3_1 3.目前所在位置:市 参考xxtb2_js_city.json文件,但是一定要实际使用APP去定位一次,使用定位来的数据提交,因为这个文件有些地区不对。1 city3 question3_2 3.目前所在位置:县区 参考xxtb2_js_city.json文件,但是一定要实际使用APP去定位一次,使用定位来的数据提交,因为这个文件有些地区不对。1 sfwc question5 5.今天是否有外出 参考每日健康记录页面(空)v2.0.html文件。最好去http://pubinfo.sdwcvc.cn/xxtb2/dailyRecord页面实际考察对应选项的value。2 sfjc question6 7.今日是否参加过聚集性活动或去过人员密集场所 0代表否,1代表是。要求数字。参考每日健康记录页面(空)v2.0.html文件。最好去http://pubinfo.sdwcvc.cn/xxtb2/dailyRecord页面实际考察对应选项的value。2 sfhb question7 9.自2020年02月08日起,是否在湖北或温州停留或路过,是否接触过来自湖北或温州的人员? 如是请填写详细情况,如车次、时间等。如不是请填写否。1 zb question4 4.当前所居住小区或村庄是否有官方公布的新型冠状病毒确诊者或疑似者 选项:{无,有,不清楚}1 jchz question8 10.是否接触过新型冠状病毒的确诊者或疑似者,以及新型冠状病毒的密切接触者 0代表否,1代表是。2 other question9 13.其他需要向学校汇报或说明的特殊情况 如有其他需要向学校汇报或说明的特殊情况请在此处填写…。1 other1 question10 详细住址,具体到门牌号 详细地址。1 other2 question11 6.您当前是否正处于被隔离观察状态 如是填写隔离原因及隔离地点,如不是请填写否。1 other3 question12 11....

2021-05-20 18:37:46 更新

智慧山水平台每日自动提交健康数据

因为2020年疫情的原因,学校让每位同学在家上课并且每天上报健康数据,但是我上报了几次觉得很麻烦并且容易忘掉,遂写了一个python程序,帮助提交身体健康数据[注1][注2]。 我已经使用了大约1个半月左右了,经历了几次版本迭代,目前可以实现多账户提交,这里分享下当时的思路,如有不当之处,请予指正,E-MAIL:i.ldy@qq.com。 目标 针对“智慧山水”APP的“每日健康上报”功能实现自动上报数据。 思路 大致思路: 获取提交数据的API 每天自动向学校服务器发送数据 第一步、确定提交的数据是以怎样的形式被传输到学校服务器的 因为学校是让我们下载了一个安卓APP,所以在这一步中,我使用了手机端的抓包软件(当然也可以使用更专业的PC端的抓包软件),访问提交信息的页面并填写提交了数据,抓包到了一个网址链接[注3]。 抓包到的链接:http://pubinfo.sdwcvc.cn/Xxtb/dailyRecord?userid=我的学号 经测试,可以省略掉问号以及之后的内容。 PC端浏览器访问这个网址,跳转到了统一身份认证页面http://sso.sdwcvc.cn/(当时学校第一次启用智慧山水APP,所以我这里猜测是学校平台的PC端,后证实确实是),可以登录自己的账号。我当时为了速度,就使用了手机验证码登录。 登录账号后跳转到了 智慧校园综合服务门户http://portal.sdwcvc.cn/,我看到了与手机端类似的功能按钮与设计,但是并没有提交信息的入口,仅存的“健康上报管理”按钮还是灰色的。 尝试使用浏览器的“检查”功能,没有找到入口链接,所以我尝试再一次访问之前抓包到链接,这次可以正常查看提交信息的页面,发现原来就是提交页面,而且上边显示我今天已经提交。 我试着点击了“我要修改”,发现来到了正式的提交页面。之后我查看网页源代码,发现因为当天已经提交了,所以正式页面需要点击一次按钮才能被显示。如果当天未提交,则服务器返回的网页不会提示已经上报,这点可以作为当天初次提交还是修改的依据。 然后我开启了浏览器“检查”功能,打开NetWork选项卡,点击了网页的“提交修改”的按钮,发现抓包到了个好东西。 GET方式的请求,且Request URL是键值对的形式传输了数据,不难猜到这就可能就是传输的健康信息。 链接(已脱敏): http://pubinfo.sdwcvc.cn/Xxtb/saveRecord?id=924680&mqjk=%E5%81%A5%E5%BA%B7&jrjk=%E5%81%A5%E5%BA%B7&city1=%E5%8C%97%E4%BA%AC&city2=%E5%8C%97%E4%BA%AC&city3=%E5%8C%97%E4%BA%AC&sfwc=0&sfjc=0&sfhb=0&zb=%E4%B8%8D%E6%B8%85%E6%A5%9A&jchz=%E5%90%A6&other=%E8%BD%BB%E5%BE%AE%E5%92%B3%E5%97%BD%EF%BC%8C%E4%B8%8D%E5%8F%91%E7%83%AD%EF%BC%8C%E6%8B%BF%E4%BA%86%E8%8D%AF%E3%80%82 然后我们鼠标向下滑动,发现了浏览器已经帮我们做了解码。 为了避免服务器端接受信息产生歧义,url通常会被浏览器进行编码,所以这里我们看到的了好多%这样的url。 试着手动复制url到浏览器地址栏并访问,返回了这样的数据。 由此可以确定这就是我想要找到的接口。 第二步、编写代码 拿到了数据接口,开始用Pyhon写爬虫程序。 第一个版本是完全没有封装、没有优化,仅仅只有提交信息的功能。身体健康信息是用一个字典变量进行保存的,而且是写死在了代码里面。请求头数据使用的是浏览器抓包到的Request Heades信息。 登录获取Cookie 试了几次提交我发现Cookie的可用时间比较短,PC端退出了就失效了,于是我尝试每次登录获取Cookie然后再提交信息,于是我去了网站登陆页面 智慧校园综合服务门户http://portal.sdwcvc.cn/。 发现了三种登录方式。 后两种都不能实现无人值守,所以我决定使用用户名(学号)登录。 模拟发送登录请求获取Cookie 与上边抓包获得数据提交的接口同理,这次输入完用户名和密码后,点击登录之前要先打开浏览器的“检查功能”,切换至“NetWork”选项卡,然后再点击登录,会发现已经成功登录,并抓包成功,且浏览器跳转到了“智慧校园综合服务门户”页面 可以发现,发送请求使用的POST方式,并获取到了url:http://sso.sdwcvc.cn/index.php?rid=verifyWebUser 滑动至Headers选项卡最下面,找到了发送的数据。 经测试,仅需使用username用户名(学号)和password密码两项即可登录。 从登录到提交中间时间保持登录状态,我使用的方法是创建一个requests.session()实例对象,使用这个实例对象进行登录以及提交健康数据。 实际过程中我还请求了提交页面,查看当天是否已经提交成功了。 传输的信息中key的含义 我尝试修改了提交的信息,查看了网页源码,经过多次验证确定了每个key的含义 url中的每个key的解释如下 key 含义 id 表单id,如果是当天初次提交,id为空即可,会创建一个新的表单。当天提交后再次访问提交页面,返回的页面中会包含一个隐藏的输入框,其value就等于当天已经提交表单的id(Xpath:/html//input[@name="did"]/@value)。如果修改已经提交的信息则提交时id为此值即可。 mqjk 1.目前个人身体健康情况 jrjk 2.一起居住的家人身体健康情况 city1 3.目前所在城市:省份 city2 3.目前所在城市:市 city3 3.目前所在城市:县区 sfwc 5.今天之前14天内是否有外出 sfjc 6.是否有聚餐或聚众 sfhb 7.自2020年01月10日起,是否在湖北停留或路过,是否接触过来自湖北的人员 zb 4.当前所居住小区或村庄是否有官方公布的新型冠状病毒确诊者或疑似者 jchz 8.是否接触过新型冠状病毒的确诊者或疑似者,以及新型冠状病毒的密切接触者 other 9....

2021-05-20 18:37:46 更新