极乌客

一个个人的小博客。

关于宿舍洗衣机的折腾

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


写在前面

原因

宿舍楼下的洗衣机原本是有预约功能的,可能是男生宿舍的洗衣机少(一整栋楼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直播点歌台

上一篇

C++多项式相加 & 括号匹配

下一篇
评论
发表评论 说点什么
还没有评论
1308
2