一个查电费的小模块(SQU)

这个Python模块是我的Python课程设计的一小部分,今天在整理电脑文件时发现了它。经过稍微修改,然后分享给大家。这个模块是用来查询学校电费的,对于学校管理或者学生了解用电情况都是很有用的。希望有大佬能够让它更好地工作,也希望大家能够喜欢并从中受益!

这个代码是一个用于查询学校电费的Python程序。它通过HTTP请求与一个网络服务交互,以获取关于学校内不同房间或建筑物的电力消耗信息。

简单描述如下:

  1. 初始化: 程序初始化了一个名为Electricity的类,其中包含了用于发送HTTP请求到特定URL的方法,同时预定义了请求头和数据。
  2. 发送请求: send_request() 方法向指定的URL发送了一个HTTP POST请求,使用了预定义的请求头和数据。它期望一个JSON响应,然后解析并返回该响应。
  3. 更新数据: update() 方法根据输入参数更新数据负载中的特定字段。它根据输入参数修改了’bizcontent’字段。
  4. 显示结果: show_result() 方法构建了一个用于查询特定房间电力消耗的请求负载。它发送请求并解析响应以提取电力消耗数据。
  5. 用户输入处理: get() 函数处理用户输入,通常包括由“#”分隔的建筑物ID和房间ID。然后,它根据建筑物ID执行一些逻辑,以确定区域ID,并相应地调整请求。
  6. 结果呈现: 最后,程序打印结果,通常是指定房间或建筑物的电力消耗,单位为千瓦时。

这段代码提供了一种结构化的方式,通过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'])

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注