搭建自己的健康上报APP全栈开发教学

准备:云服务器(域名可有可无,不过既然都上云,建议买域名做个自己的网站)
技术栈:lnmp+python+android前端
重点学习内容是php和python脚本和android前端
本文重在服务器,不在前端与脚本

一、环境配置

服务端环境配置,基本都是傻瓜式一键操作,没有难度。

云服务器如何搭建,推荐这篇文章
涉及第一次购买服务器的基本配置+LNMP环境搭建
注意:php版本建议选择7.x以上,如果不考虑wordpress搭建网站,看到第六部分之前即可
链接: https://blog.csdn.net/u014557455/article/details/124858175

确认已经搭建好宝塔界面,后续操作全部在宝塔界面实现
下面搭建网站,这里不使用任何框架

宝塔-》网站-》添加站点
在这里插入图片描述

添加站点,这里直接用ip创建(有域名的可以用域名)
把177.77.77.77替换成你的公网ip
同时创建个数据库
在这里插入图片描述
记得还得在php.ini配置文件中找到

;extension=mysqli

把;符号去掉
因为这个数据库默认用的是mysqli
但在配置文件里默认不用

然后访问http://177.77.77.77/
得到如下界面代表创建成功
在这里插入图片描述
至此网站,以及数据库搭建完成
后续在服务器部署python环境

在软件商店里找到python项目管理器,安装
在这里插入图片描述
然后设置,版本管理,安装一个版本,这里安装的是3.9.7
在这里插入图片描述
安装完成以后python环境就部署好了。

剩下的部分就是android前端,我依然还记得被andorid studio搞崩溃的日子,导入了别人的项目,却怎么都配置不好依赖库…不过android前端肯定还是要学,工具:android studio,用java和kotlin哪个语言去学都可以,熟悉java的话肯定首选Java。重点学习ui,控件事件,http部分。

正常的话就用Android studio开发最后的app了。但我没用Android studio做过完整的项目,正好之前用autojs写过一个运行脚本的android app,所以这里直接套壳使用。如果你一样懒,那么可以尝试autojs开发(这个是专门用来做手机脚本的),下面放上相关学习资料。

链接: Auto.JS 教程(1)

链接: autojs官方文档

链接: autojs实例

二、正式开发

往路径www/wwwroot/ip
这个ip就是你建网站的时候用的公网ip
这个路径下上传php文件
在这里插入图片描述
上传个my.php文件,里面随便写点,比如用echo输出一句话
通过下面的网址访问测试一下
http://服务器IP地址/my.php

如果觉得我写的比较简单,这里有一篇非常详细的文章可以参考
链接: https://blog.csdn.net/weixin_44634727/article/details/113641930

php接口测试完毕,下面就是php与android端的交互
这里以php与autojs下的前端交互为例

提交数据用http.post,不要用提交json
http.post
接收用$_POST数组

前端代码:

var url = "http://177.77.77.77/my_sql.php";
var username = "你的用户名";
var password = "你的密码";
var res = http.post(url, {
    "TPL_username": "usernavv",
    "TPL_password": "passwovv"
});

服务端代码my_sql.php:

$temp1=$_POST['TPL_username'];
$temp2=$_POST['TPL_password'];
echo $temp1;
echo $temp2;

返回数据以json格式传递,前提以上例post方式向服务器发出了请求

服务端:

header('Content-Type:application/json; charset=utf-8');
//以json的格式返回数据
$res_js=["temp1"=>$temp1, "temp2"=>$temp2 ];
exit(json_encode($res_js));
//以json的格式返回查询到的数据

前端代码:

var data=res.body.json();
toast(data.temp1);
toast(data.temp2);
});

python脚本部分
一开始我是想用php curl模块实现模拟登录功能的
通过数据抓包看了一下

我是看到登陆页面传输的数据是我的明文账号+密码+一堆未知字符串
作为一个小白我看到的是这些,心中窃喜,明文也太好搞了吧
在这里插入图片描述
结果等到健康信息上报页面,传递的东西就看不懂了,有些字符串你能读出来,有些不知道是什么含义

在这里插入图片描述
只能说还是太菜了,到这心凉了半截,白做这么多了

不甘心,去github上一搜,果然有neu健康打卡脚本,其中有两个python脚本都可以成功

链接: 东北大学自动健康打卡体温打卡

链接: 东北大学每日健康打卡脚本

我用的是第一个链接的脚本,作为一个小白去看他脚本里的内容感觉没涉及到加密,逻辑也不是很复杂。日后如果有时间学习,再做说明。(我是很佩服这些大佬的,也很感谢他们的开源)

所以最后我的核心逻辑竟然是别人写的,有点…不过不重要,本文重点是搭建简单服务器以及实现与前端的交互。

后续对于第一个健康上报python脚本的解析来了

链接: https://blog.csdn.net/weixin_51659963/article/details/126543630

下面介绍如何在服务端用php运行python脚本

这篇文章非常不错
链接: https://blog.csdn.net/weixin_43639287/article/details/122632541

system() passthru() shell_exec() 同理
可能会遇到exec函数被禁用,用如下方式开启
链接: https://blog.csdn.net/weixin_34401851/article/details/115143684

链接: exec函数使用方法

python脚本与php文件放在同一目录下

调用代码:

exec("python3 run.py $temp1 $temp2 2>&1",$rec_py,$res_py);

至于为什么是python3,我linux学的不好,不是很懂,可以看这篇文章(话说linux的用户与文件权限问题真地让我头大)
链接: https://yiyuewangchao.blog.csdn.net/article/details/122910412

简单来说就是执行下面这两端代码,然后你会发现pyhton3,pip3已经存在了

ln -s /www/server/panel/pyenv/bin/python3.7    /usr/bin/python3
 
ln -s /www/server/panel/pyenv/bin/pip3   /usr/bin/pip3
//以json的格式返回查询到的数据

上诉还有一个问题,我们是使用exec调用python脚本,类似win下的cmd输入指令。 t e m p 1 与 temp1与 temp1temp2是传递的参数,账户与密码,所以不能直接调用gethub上的python脚本项目,要通过sys模块传递参数给run.py

简单解析一下第一个github脚本项目,config.py是配置文件,主要包括账号密码,以及通知打卡成功的邮箱,sendMsg.py主要是发邮件功能实现,我们不需要这两部分,直接用sys配置参数。
改起来你一看就懂,或者看我github上改好的也行

还有一点就是脚本需要requests库,直接在命令行安装就行

pip3 install requests

关于前端,学习的时间太久了,好多细节都忘了,就不做具体阐述了
简单说一下,核心函数是function myPHP ,大约892行左右,这个函数写在了整个代码的最后

function myPHP(idk,passwordk)
{
    var url = "http://177.77.77.77/my_sql.php";
    log("线程中");
    log(idk);
    log(password);
    var r = http.post(url, {
            "TPL_username": idk,
            "TPL_password": passwordk
        });

    var data=r.body.json();
    //toast(data.a);
    log("返回的数据");
    log(data.temp1);
    log(data.temp2);

    if(data.sql==200)
    {
        //数据库插入成功
        log("登数据库插入成功");
    }
    else if(data.sql==201){
        //数据库修改成功
        log("数据库修改成功");
    }
    else if(data.sql==500){
        //数据库操作失败
        log("数据库操作失败");
    }

    if(data.python_login==1200)
    {
        //登陆成功
        log("登陆成功");
    }
    else if(data.python_login==1500){
        //登陆失败
        log("登陆失败");
    }

    if(data.python_daka==2200)
    {
        //打卡成功
        log("打卡成功");
    }
    else if(data.python_daka==2500){
        //打卡失败
        log("打卡失败");
    }
    if(data.python_login==1200 && data.python_daka==2200)
    {
        toast("打卡成功");
    }
    else
    {
        toast("打卡失败");
    }

三、neu部分(给东大学子看的):

如果你自己有服务器,或者使用腾讯云的云函数。把py脚本放在云上,可以实现云端每天自动打卡。不需要自己再操作了。这个当然我也可以实现,放到app里,为什么没呢,相信大家懂得都懂,大家自己去实现吧。疫情期间,注意安全。

之前有个叫neu的软件,下面是他们的技术栈,不得不说不是一个级别,太牛了
在这里插入图片描述

四、总结

至此配置全部结束,说起来挺简单点,但对我一个新手而言过程很折磨,希望能帮到你。源码全部放在github上了,我抹掉了所有与我ip有关的内容,换成了177.77.77.77。如果有忘记了抹掉的地方露出真ip,也请你不要攻击一个新手的服务器。谢谢谢!!!别拿我练手。

简单说一下文件结构,前端是一个new_app.js文件,用autojs相关的打包插件可以自动打包成apk。
服务端:run.py是python脚本,my_sql.php接受软件数据,调用run.py脚本。

链接: https://github.com/yearn19/NEU_daka_app

相关学习资源我这里有以下电子书:
鸟的linux私房菜:基础学习篇(第四版)
细说php(第四版)
http抓包实战(肖佳 著)
需要在评论区说,看到了会发

五、其他

在ui控件中,控件的id千万不要直接就叫id

<input id="id"  lines="1" hint="{{this.id}}"  textSize="18sp" margin="5 0 5 10"/>

直接叫id一会使用的时候调用会出错,可以改成idk

<input id="idk"  lines="1" hint="{{this.id}}"  textSize="18sp" margin="5 0 5 10"/>

下面说一个我在autojs数据库上遇到的一个数据库问题,成功让我通宵,如果你没用auto.js可以点赞推出了。

这样一个报错
android.database.sqlite.SQLiteException: no such column

问题:在数据库里找不到你所说的列
原因:你之前创建过数据库,后来你又创建了一个新的,你在对你的新数据进行操作,但其实连接的还是你的旧数据库,造成操作不必配。真的脑火,明明名字都不一样。

android开发解释如下:
链接: https://blog.csdn.net/weixin_40707866/article/details/79794762

在这里插入图片描述

autojs开发解决方法:
在手机文件中找到如下全中两个文件,删除即可(一般就在根目录下,不行搜索也行)
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值