这个Python模块是我的Python课程设计的一小部分,今天在整理电脑文件时发现了它。经过稍微修改,然后分享给大家。这个模块是用来查询学校电费的,对于学校管理或者学生了解用电情况都是很有用的。希望有大佬能够让它更好地工作,也希望大家能够喜欢并从中受益!
这个代码是一个用于查询学校电费的Python程序。它通过HTTP请求与一个网络服务交互,以获取关于学校内不同房间或建筑物的电力消耗信息。
简单描述如下:
- 初始化: 程序初始化了一个名为Electricity的类,其中包含了用于发送HTTP请求到特定URL的方法,同时预定义了请求头和数据。
- 发送请求:
send_request()
方法向指定的URL发送了一个HTTP POST请求,使用了预定义的请求头和数据。它期望一个JSON响应,然后解析并返回该响应。 - 更新数据:
update()
方法根据输入参数更新数据负载中的特定字段。它根据输入参数修改了’bizcontent’字段。 - 显示结果:
show_result()
方法构建了一个用于查询特定房间电力消耗的请求负载。它发送请求并解析响应以提取电力消耗数据。 - 用户输入处理:
get()
函数处理用户输入,通常包括由“#”分隔的建筑物ID和房间ID。然后,它根据建筑物ID执行一些逻辑,以确定区域ID,并相应地调整请求。 - 结果呈现: 最后,程序打印结果,通常是指定房间或建筑物的电力消耗,单位为千瓦时。
这段代码提供了一种结构化的方式,通过HTTP请求与学校的电力消耗数据进行交互,并可以集成到更大的应用程序或脚本中,用于监视或分析。
注:你可能需要 pip install requests
用法:编写text.py代码如下
import squelectricity
str = '28#410'
squelectricity.get(str)
# print(squdf.get(str))
输出如下:
PS C:\vscode> python -u "c:\vscode\py\电费测试\text.py"
查询结果 :46.9度
模块详细代码:
# 将以下代码保存至squelectricity.py
import requests
import json
from tkinter import messagebox
import time
from tkinter import simpledialog
class Electricity:
url = 'https://cloudpaygateway.59wanmei.com/paygateway/smallpaygateway/trade'
headers = {
"Origin": "https://cloudpaygateway.59wanmei.com:8087",
"Cookie": "SERVERID=802e3a1a39e6af84fbe289d1ffa98282|1684495673|1684495659",
"Accept": "application/json, text/plain, */*",
"X-Requested-With": "com.eg.android.AlipayGphone",
"User-Agent": "Mozilla/5.0 (Linux; U; Android 10; zh-CN; IN2010 Build/QKQ1.190716.003) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 UWS/3.22.2.57 Mobile Safari/537.36 UCBS/3.22.2.57_221124174238 NebulaSDK/1.8.100112 Nebula AlipayDefined(nt:4G,ws:455|0|2.375,ac:sp) AliApp(AP/10.3.50.8100) AlipayClient/10.3.50.8100 Language/zh-Hans useStatusBar/true isConcaveScreen/true Region/CNAriver/1.0.0 MiniProgram APXWebView",
"Referer": "https://cloudpaygateway.59wanmei.com:8087/pay/index.html?token=bdf29e7d-dfcb-468e-97a0-5fd668db5089&_timestamp=1684495657609&customerId=1402",
"x-mass-tappid": "2019030163398604",
"Accept-Encoding": "gzip",
"Accept-Language": "zh-CN,en-US;q=0.9",
"Content-Type": "application/json;charset=UTF-8",
"Content-Length": "229",
"Host": "cloudpaygateway.59wanmei.com:8087",
"Connection": "Keep-Alive"
}
def __init__(self):
self.data = {
"timestamp": "2023-12-02 21:46:05",
"method": "samllProgramGetRoom",
"bizcontent": "{\"schoolno\":\"1402\",\"optype\":\"1\",\"payproid\":953,\"areaid\":\"0\",\"buildid\":\"0\",\"unitid\":\"0\",\"levelid\":\"0\",\"businesstype\":\"2\",\"idserial\":\"2111010316\"}",
"sourceId": 1
}
def update(self, x, y, z):
bizcontent_dict = json.loads(self.data["bizcontent"])
bizcontent_dict[x] = y
bizcontent_dict['optype'] = z
self.data["bizcontent"] = json.dumps(bizcontent_dict)
def send_request(self):
json_data = json.dumps(self.data)
response = requests.post(self.url, headers=self.headers, data=json_data)
if response.status_code == 200:
result = json.loads(response.text)
return result
#print(result)
else:
print(f'Request failed with status code: {response.status_code}')
def show_result(self, room_id):
data1 = {
"timestamp": "2023-05-19 22:33:39",
"method": "samllProgramGetRoomState",
"bizcontent": "{\"payproid\":953,\"schoolcode\":\"1402\",\"roomverify\":\"1-274--278-102780005\",\"businesstype\":2,\"idserial\":\"2111010331\"}",
"sourceId": 1
}
bizcontent_dict = json.loads(data1["bizcontent"])
bizcontent_dict['roomverify'] = room_id
data1["bizcontent"] = json.dumps(bizcontent_dict)
json_data = json.dumps(data1)
response = requests.post(self.url, headers=self.headers, data=json_data)
if response.status_code == 200:
result = json.loads(response.text)
#result = str(result)
return result
else:
print(f'Request failed with status code: {response.status_code}')
def get(user_input:str):
electricity = Electricity()
electricity.send_request()
buildid = user_input.split('#')[0]# 分割字符串
roomid = user_input.split('#')[-1]
int_buildid=int (buildid)
int_roomid=int(roomid)
a=1
# 判断楼范围
if(int_buildid>10 and int_buildid<30):
input_id='1'
electricity.update('areaid', input_id, '2')
electricity.send_request()
elif(int_buildid in [7,8,9,10,30,31,32,33]):
input_id='2'
electricity.update('areaid', input_id, '2')
electricity.send_request()
else:
input_id='3'
electricity.update('areaid', input_id, '2')
electricity.send_request()
if(int_buildid in [18]):
input_id='3'
electricity.update('areaid', input_id, '2')
electricity.send_request()
bid=electricity.send_request()
if(input_id=='1' or input_id=='3'):
buildid=buildid + '号楼'
elif(input_id=='2'):
buildid='#'+buildid + '公寓'
a=input_id
for item in bid['businessData']:
if item['name'] == buildid:
matching_id = item['id']
break # 找到匹配项后退出循环
input_id=matching_id
electricity.update('buildid', input_id, '3')
cid=electricity.send_request()
if(a=='1'):
ceng=roomid[0]+'层'
elif(a=='2'):
ceng=roomid[0]
if (a!='3'):
for item in cid['businessData']:
if item['name'] == ceng:
matching_id = item['id']
# print(matching_id)
break # 找到匹配项后退出循环
input_id= matching_id
if(a=='3'):
input_id='-1'
electricity.update('levelid', input_id, '4')
if(a=='3'):
roomid=str(int_buildid)+'-'+roomid+'空调'
if(int_buildid==7):
roomid=str(int_buildid)+roomid
#print(roomid)
room=electricity.send_request()
for item in room['businessData']:
if item['name'] == roomid:
matching_id = item['id']
break # 找到匹配项后退出循环
input_id=matching_id
result=electricity.show_result(input_id)
result1=str(float(result['businessData']['quantity']))
print("查询结果", ":" + result1 + "度")
return float(result['businessData']['quantity'])