Article Directory
foreword
Yesterday, I posted the source code of python querying the remaining quota of gpt-key and querying the usage quota in the past 10 days. It is very useful to have feedback from partners, but it would be better if the UI version can be packaged. Teacher Xu Lang will make a package for you today
!
1. Source code
Not much to say, go directly to the source code
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_())
2. Operation effect display
Summarize
Friends who like it can use it by themselves, welcome to pay attention to Teacher Xu Lang with one click and three times