分类: Python

  • 关于宿舍洗衣机的折腾

    好久没管这个小破网站了,因为实在是太忙也没有什么有意思的东西可以写,刚好无聊折腾一下宿舍楼下的洗衣机


    写在前面

    原因

    宿舍楼下的洗衣机原本是有预约功能的,可能是男生宿舍的洗衣机少(一整栋楼7台),然后就把预约关了,从此只能下到一楼(我住5楼)碰运气看看有没有空的洗衣机。

    描述

    我们宿舍的洗衣机就是级身上有一个二维码,通过APP和二维码付款使用,APP名称叫U净,如果有相同的可以试下。不用多说,方法肯定是抓包。

    解决方法 1.0

    Alt text

    这个方法确实好用,是上个学期我已经在用的,那么就是把洗衣机上的二维码全部拍下来放到宿舍,就能远程预约了。我的大概长这样:

    但是使用中还是有一些问题:

    • 喵喵机打印用的是热敏纸,会掉色
    • 作为一个懒人,睡上铺的怎么会下床做这种事呢

    所以我是不可能就这样罢休的:

    解决方法 2.0(正在使用)

    话不多说,上软件,抓包:

    Alt text
    Alt text

    不难找到,我们需要的就是这一个:

    找一个模拟HTTP请求

    填上地址和header,就得到了下面这玩意:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    {
    “errorCode”: 0,
    “result”: {
    “no”: “63”,
    “sn”: “0000DB11138108443188111110040000”,
    “qrCode”: “http://app.littleswan.com/u_download.html?type=Ujing&uuid=0000000000000A0007604201806230011246”,
    “deviceModel”: “0000.db.27974”,
    “alipayOnly”: 2,
    “registerType”: 0,
    “brand”: 1,
    “readableName”: “校园机MG80-GF03DW 一代”,
    “status”: “1”,
    “online”: true,
    “statusAll”: “{\”switch\”:1,\”wash\”:1,\”wash_mode\”:1,\”time_remaining\”:14,\”fault_warn\”:\”0\”}”,
    “remainTime”: 14,
    “statusUpdateTime”: “2019-09-29T13:15:52.000Z”,
    “virtualId”: “53876069890835”,
    “errorCode”: “E30”,
    “scanSelfClean”: null,
    “errorTime”: “2019-09-24T15:00:15.000Z”,
    “endWorkTime”: null,
    “shutDownTime”: null,
    “offlineTime”: “2019-09-17T10:28:13.000Z”,
    “addTime”: “2018-10-04T09:30:22.000Z”,
    “isRemoved”: false,
    “hasAutoLaunchDevice”: false,
    “autoLaunchDeviceOutOfStock”: null,
    “washTemperatureIsEnable”: false,
    “isSlotMachine”: false,
    “moduleType”: 0,
    “isForceDelete”: null,
    “usedCounts”: null,
    “isBindToAlipay”: true,
    “bindToAlipayTime”: “2018-10-15T09:19:47.000Z”,
    “washCounts”: 0,
    “washCoins”: 0,
    “bleVersion”: null,
    “firstBindTime”: “2018-10-04T09:30:26.000Z”,
    “nbSignal”: null,
    “macAddress”: null,
    “deviceId2G”: null,
    “bleBindStatus”: null,
    “runTimes”: 31,
    “deviceTypeId”: 2,
    “errorCodeId”: null,
    “franchiseeId”: 355,
    “applyFranchiseeId”: null,
    “orderId”: 142085187,
    “serviceSubjectId”: 8880,
    “storeId”: “5bb0c9e85ae9d5634c00000e”,
    “boxTypeId”: null,
    “store”: {
    “id”: “5bb0c9e85ae9d5634c00000e”,
    “mobile”: “4006185141”,
    “enable”: true,
    “isRemoved”: false
    },
    “currentOrder”: {
    “status”: “40”,
    “statusUpdateTime”: “2019-09-29T14:01:47.000Z”,
    “remainTime”: 840,
    “id”: 142085187
    }
    }
    }

    通过换一台机的sn对比发现,没有在使用的机子是没有currentOrder的,所以就比较明了了,至少可以知道哪台机可以直接用了。

    所以,上Python

    Alt text

    发现是可以正常判断的,而且不难看出,currentOrder里面的remainTime就是剩余时间的秒数,所以我们把所有机子都放进去:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    import requests
    import json

    ls = [
    ‘0000000000000A0007604201806230007999’,
    ‘0000000000000A0007604201806230010337’,
    ‘0000000000000A0007604201806230011227’,
    ‘0000000000000A0007604201806230011842’,
    ‘0000000000000A0007604201806230010248’,
    ‘0000000000000A0007604201806230011549’,
    ‘0000000000000A0007604201806230011246’
    ]
    url_f = ‘https://u.zhinengxiyifang.cn/api/LbUsers/3901151/getDeviceByQRCode?qrCode=http:%2F%2Fapp.littleswan.com%2Fu_download.html%3Ftype%3DUjing%26uuid%3D’

    headers = {
    ‘Host’: ‘u.zhinengxiyifang.cn’,
    ‘Accept’: ‘application/json, text/plain, */*’,
    ‘Connection’: ‘keep-alive’,
    ‘Cookie’: ‘acw_tc=76b20fe315672388832663385e351b31cb24d8e23fe7a2cf1765458201c140’,
    ‘User-Agent’: ‘Mozilla/5.0 (iPhone; CPU iPhone OS 13_1_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 (4321215856)’,
    ‘Authorization’: ‘9CT3qmPW2yhEGNtfmT1cJdy2LKwOOQ87bt7f0J45Lo65plvOJAkYWmPKniMOFvnH’
    }

    for i in ls:
    url = url_f + i
    r = requests.get(url, headers=headers)
    rs = json.loads(r.text)

    if rs[‘result’][‘currentOrder’]:
    print(‘{}号机不可用({}分钟)’.format(rs[‘result’][‘no’],int(int(rs[‘result’][‘currentOrder’][‘remainTime’])/60)))
    else:
    print(‘{}号机可用’.format(rs[‘result’][‘no’]))
    Alt text

    这样就算是在算法上完成了,具体放到网站上可以用PHP之类的,还有一些小的细节我在这里并没有涉及到,比如说0分钟为刚付完款未开始之类的,这里只是大致演示一下原理,然后我也不是特别熟悉Python,若有不足之处欢迎指出。

  • Bilibili直播点歌台

    Bilibili直播点歌台

    上一篇文章有说到,瞎整个程序重装系统装错机了,整的就是这个程序——Bilibili直播点歌台。
    现在就来说说我是怎么瞎整的。

    我也是觉得无聊才发现有这么一个程序,所以就想玩一玩。但是GitHub上的这个项目,只不过是运行在树莓派上的,我当时也没想到要运行在云服务器上是多么困难。


    正文之前

    下面才是正文,如果懒得看正文的,直接上GayHub GitHub链接吧:
    github.com/yfme01/Music-Live-on-Bilibili
    里面有使用方法和使用需注意的地方。

    这里是预览:
    https://live.bilibili.com/8712608


    正文

    这里的东西主要是我记录整这玩意的过程用的,没有图片没什么可看性,有兴趣的可以当小说看看。

    先是走流程

    重装系统 -> 走教程安装依赖 -> git -> 配置 -> 运行

    然后就是发现问题与解决问题

    先是运行不起来,过了一会,有画面了,但是一直没有弹幕监控。然后呢,查看当前的screen发现弹幕也没有在运行,所以就找到弹幕监控的运行文件单独运行。终于有报错了,但是报错的出现只是一瞬间,所以我要把握好时间截图。几十次截图出来,就看到了好像是什么aiohttp出了啥问题。发现aiohttp是人家教程里的一个拓展库,于是又装了一次这个拓展库。结果还是有这么一个报错,后面就只好看看哪里有用到这个拓展库,发现用到的那个拓展库已经被注释掉了。。

    删掉那个拓展库的引用后,能正常运行了。

    强迫症的我看到了这个程序里的文件乱七八糟的,自然看不下去,于是我又找到了一个原版的重制版,只不过没有原版的新特性,而且还有一些Bug,先是修Bug,一些小小的修修补补就以为Bug修完了。

    运行了一天,到了晚上又发现一个致命Bug。就是说配置文件里面有个设置夜间模式不能点歌之类的东西,但是我明明设置关掉了,但是还是会有这个夜间模式。。

    于是我想把这个问题解决。

    因为本人没学过Python,所以看不出什么头绪,只能希望原版的没有问题。。

    所以我就开始了移植原版的功能文件,正好跟进以下新功能。先是把文件目录都改了。然后根据自己的习惯把画面中显示的专辑封面去掉了。果然就发现Bug了,送过的礼物读取不到、夜间模式还是存在、点歌会报错。

    只好分部来修复

    • 礼物读取不到:
      里面经常用到一个../xx/xx的目录格式,我又想到配置文件里面有个"path" : "xx/xx/xx",既然有这么个配置干嘛还要这么写,全部改成了paht相关的之后,发现能读取礼物了。
    • 夜间模式:
      夜间模式感觉我自己绝对不会使用的,所以判断是否为夜间的函数直接return False
    • 点歌会报错:
      前面有说,我把专辑封面图去掉了,也把获取封面图的接收变量去掉了。然后就会有一种情况:一个变量名去接收两个变量,所以把接收图片链接的变量还回去也解决了。

    这样就完美了,改了下ass生成的样式就算大功告成了。

    总结

    这就是元旦假期整的东西,看上去挺快的,但是实际上通了一宵,花了两个白天才弄完这些,我挺享受这个过程的,只是画的时间有点长了,还是因为自己能力不足,不过以后会在这些折腾中吸收经验的。