【Python】用python高效查询gptkey的额度(封装pytqt5版本)


前言

昨天发了python查询gpt-key剩余额度和近10天使用额度查询情况的源码,有伙伴反馈很实用,但是如果能封装UI版就更好了
那徐浪老师今天就给大家做一个封装吧!

一、源码

话不多说,直接上源码

import datetime
import requests
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QTextEdit, QPlainTextEdit, QPushButton


class OpenAIUsageMonitor(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('徐浪gpt_key额度查询器')

        # 创建输入框和标签
        self.key_input_label = QLabel("请输入要查询的API Keys:")
        self.key_input = QPlainTextEdit()
        self.key_input.setPlaceholderText("这里输入key,一行一个,不要有其他不必要的符号")

        # 创建输出文本框
        self.output_text = QTextEdit()
        self.output_text.setReadOnly(True)
        self.output_text.setPlaceholderText("#### 监控key为:#### #### #### #### #### \n" 
               "#### 总额:############\n"
               "#### 已用:############\n"
               "#### 剩余:############\n"
                )

        # 创建运行按钮
        self.run_button = QPushButton("点击查询")
        self.run_button.clicked.connect(self.run_monitor)

        # 创建垂直布局
        layout = QVBoxLayout()
        layout.addWidget(self.key_input_label)
        layout.addWidget(self.key_input)
        layout.addWidget(self.run_button)
        layout.addWidget(self.output_text)

        # 设置窗口布局
        self.setLayout(layout)
        self.show()

    def run_monitor(self):
        self.output_text.clear()
        api_keys = self.key_input.toPlainText().strip().split('\n')
        for i, api_key in enumerate(api_keys):
            api_key = api_key.strip()
            if not api_key:
                continue

            usage_info = self.get_key(api_key)
            self.output_text.append(f"#### 第 {i + 1}个key的查询数据\n{usage_info}")


    def get_key(self, api_key):
        subscription_url = "https://api.openai.com/v1/dashboard/billing/subscription"
        headers = {"Authorization": "Bearer " + api_key,
                   "Content-Type": "application/json"}

        subscription_response = requests.get(subscription_url, headers=headers)
        if subscription_response.status_code == 200:
            data = subscription_response.json()
            total = data.get("hard_limit_usd")
        else:
            return subscription_response.text

        start_date = (datetime.datetime.now() - datetime.timedelta(days=99)).strftime("%Y-%m-%d")
        end_date = (datetime.datetime.now() + datetime.timedelta(days=1)).strftime("%Y-%m-%d")
        billing_url = f"https://api.openai.com/v1/dashboard/billing/usage?start_date={start_date}&end_date={end_date}"
        billing_response = requests.get(billing_url, headers=headers)
        if billing_response.status_code == 200:
            data = billing_response.json()
            total_usage = data.get("total_usage") / 100
            daily_costs = data.get("daily_costs")
            days = min(10, len(daily_costs))
            recent = f"##### 最近{days}天使用情况  \n"
            for i in range(days):
                cur = daily_costs[-i - 1]
                date = datetime.datetime.fromtimestamp(cur.get("timestamp")).strftime("%Y-%m-%d")
                line_items = cur.get("line_items")
                cost = 0
                for item in line_items:
                    cost += item.get("cost")
                recent += f"\t{date}\t{(cost / 100):.2f} \n"
        else:
            return billing_response.text

        return f"\n#### 监控key为:{api_key[:-25] + '*' * 25}\n" \
               f"#### 总额:\t{total:.2f}  \n" \
               f"#### 已用:\t{total_usage:.2f}  \n" \
               f"#### 剩余:\t{total - total_usage:.2f}  \n" \
               f"\n" + recent


if __name__ == '__main__':
    app = QApplication(sys.argv)
    monitor = OpenAIUsageMonitor()
    sys.exit(app.exec_())

二、运行效果展示

在这里插入图片描述
在这里插入图片描述

总结

喜欢的伙伴自行使用,欢迎一键三连关注徐浪老师

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐浪老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值