所有文章 > API开发 > python实现全国油价查询

python实现全国油价查询

 现在的油价跌宕起伏很不稳定,那么有没有什么办法可以查询油价呢?于是我突发奇想想到使用python实现全国油价查询,可以一键查询你要查询的地方的油价,方便快捷。

设计思路:

  • 1.导入模块:
  • 2.定义获取油价函数:
  • 3.创建主窗口和框架:
  • 4.创建省份选择组合框和查询按钮:
  • 5.创建数据显示标签和错误消息标签:
  • 6.运行主事件循环:
  • 7.完整代码:

接口来源:api大全

其实这个网站也有好多免费的API地址,大家可以去使用它,大部分都是 1000次/天,这个调用次数基本上是够用了。

最近几年这个油价也是越来越高了,然后呢为了能够实时了解当前的一个油价范围呢,我就趁着周末的时候写了些利用第三放api接口写了一个实时显示的油价查询页面,一个是网页版的,另一个是Python编写的。

这个网页版是基于PHP+Boostrap 直接进入正题吧。

正题: python 调用三方API实现实时查询油价查询窗口(GUI)

1.导入模块:

import tkinter as tk
from tkinter import ttk
import requests
from datetime import datetime
  • tkinter 和 ttk 用于创建 GUI 界面。
  • requests 用于进行 HTTP 请求,从 API 获取数据。
  • datetime 用于处理日期时间。

2.定义获取油价函数:

def fetch_oil_price():
selected_province = province_var.get()
uid = ''
appkey = ''
url = 'http://oil.ylapi.cn/todayoil/info.u'
params = {
'uid': uid,
'appkey': appkey,
'prov': selected_province
}
response = requests.post(url, data=params)
print(response.text) # 打印响应内容

data = response.json()
if 'code' in data:
if data['code'] == '1000':
oil_prices = data['data']
update_time_str = oil_prices['ct']
update_time = datetime.strptime(update_time_str, '%Y-%m-%d %H:%M:%S.%f')
update_time_formatted = update_time.strftime('%Y-%m-%d')

update_time_label.config(text=f"数据更新时间:{update_time_formatted}")

for widget in oil_price_frame.winfo_children():
widget.destroy()

ttk.Label(oil_price_frame, text="类型").grid(row=0, column=0)
ttk.Label(oil_price_frame, text="油价(元/升)").grid(row=0, column=1)

row_num = 1
for key, value in oil_prices.items():
if key.startswith('p'):
type_name = key.replace('p', '') + "号" + ("柴油" if key == 'p0' else "汽油")
ttk.Label(oil_price_frame, text=type_name).grid(row=row_num, column=0)
ttk.Label(oil_price_frame, text=value).grid(row=row_num, column=1)
row_num += 1
else:
error_label.config(text=f"获取油价失败:{data['msg']}")
else:
error_label.config(text="获取油价失败:未收到有效的响应。")
  • `fetch_oil_price() 函数用于从 API 获取油价数据,并更新 GUI 界面。
  • 首先,获取用户选择的省份,并构建请求参数。
  • 发送 POST 请求到 API,并获取响应内容。
  • 解析 JSON 格式的响应数据。
  • 如果响应数据中包含 'code' 键,判断是否为成功状态码 '1000'
  • 如果成功,则解析油价数据并更新 GUI 界面。
  • 如果失败,则显示错误消息。

3.创建主窗口和框架:

root = tk.Tk()
root.title("今日油价查询")

main_frame = ttk.Frame(root)
main_frame.pack(padx=20, pady=20)
  • 创建主窗口和一个 ttk 框架。

4.创建省份选择组合框和查询按钮:

province_label = ttk.Label(main_frame, text="选择省份:")
province_label.grid(row=0, column=0, padx=10, pady=10)

provinces = [
"北京", "天津", "河北", "山西", "内蒙古", "辽宁", "吉林", "黑龙江",
"上海", "江苏", "浙江", "安徽", "福建", "江西", "山东", "河南",
"湖北", "湖南", "广东", "广西", "海南", "重庆", "四川", "贵州",
"云南", "西藏", "陕西", "甘肃", "青海", "宁夏", "新疆", "台湾",
"香港", "澳门"
]
province_var = tk.StringVar()
province_combobox = ttk.Combobox(main_frame, textvariable=province_var, values=provinces)
province_combobox.grid(row=0, column=1, padx=10, pady=10)
province_combobox.current(0)

fetch_button = ttk.Button(main_frame, text="查询", command=fetch_oil_price)
fetch_button.grid(row=0, column=2, padx=10, pady=10)
  • 创建一个标签、一个组合框和一个按钮,用于选择省份和触发查询操作。

5.创建数据显示标签和错误消息标签:

update_time_label = ttk.Label(main_frame, text="")
update_time_label.grid(row=1, column=0, columnspan=3)

oil_price_frame = ttk.Frame(main_frame)
oil_price_frame.grid(row=2, column=0, columnspan=3, padx=10, pady=10)

error_label = ttk.Label(main_frame, text="")
error_label.grid(row=3, column=0, columnspan=3)
  • 创建一个标签,用于显示数据更新时间。
  • 创建一个框架,用于显示油价数据。
  • 创建一个标签,用于显示错误消息。

6.运行主事件循环:

root.mainloop()
  • 启动 Tkinter 主事件循环,监听用户操作并响应。

7.完整代码:

import tkinter as tk
from tkinter import ttk
import requests
from datetime import datetime

def fetch_oil_price():
selected_province = province_var.get()
uid = ''
appkey = ''
url = 'http://oil.ylapi.cn/todayoil/info.u'
params = {
'uid': uid,
'appkey': appkey,
'prov': selected_province
}
response = requests.post(url, data=params)
print(response.text) # 打印响应内容

data = response.json()
if 'code' in data:
if data['code'] == '1000':
oil_prices = data['data']
update_time_str = oil_prices['ct']
update_time = datetime.strptime(update_time_str, '%Y-%m-%d %H:%M:%S.%f')
update_time_formatted = update_time.strftime('%Y-%m-%d')

update_time_label.config(text=f"数据更新时间:{update_time_formatted}")

for widget in oil_price_frame.winfo_children():
widget.destroy()

ttk.Label(oil_price_frame, text="类型").grid(row=0, column=0)
ttk.Label(oil_price_frame, text="油价(元/升)").grid(row=0, column=1)

row_num = 1
for key, value in oil_prices.items():
if key.startswith('p'):
type_name = key.replace('p', '') + "号" + ("柴油" if key == 'p0' else "汽油")
ttk.Label(oil_price_frame, text=type_name).grid(row=row_num, column=0)
ttk.Label(oil_price_frame, text=value).grid(row=row_num, column=1)
row_num += 1
else:
error_label.config(text=f"获取油价失败:{data['msg']}")
else:
error_label.config(text="获取油价失败:未收到有效的响应。")

root = tk.Tk()
root.title("今日油价查询")

main_frame = ttk.Frame(root)
main_frame.pack(padx=20, pady=20)

province_label = ttk.Label(main_frame, text="选择省份:")
province_label.grid(row=0, column=0, padx=10, pady=10)

provinces = [
"北京", "天津", "河北", "山西", "内蒙古", "辽宁", "吉林", "黑龙江",
"上海", "江苏", "浙江", "安徽", "福建", "江西", "山东", "河南",
"湖北", "湖南", "广东", "广西", "海南", "重庆", "四川", "贵州",
"云南", "西藏", "陕西", "甘肃", "青海", "宁夏", "新疆", "台湾",
"香港", "澳门"
]
province_var = tk.StringVar()
province_combobox = ttk.Combobox(main_frame, textvariable=province_var, values=provinces)
province_combobox.grid(row=0, column=1, padx=10, pady=10)
province_combobox.current(0)

fetch_button = ttk.Button(main_frame, text="查询", command=fetch_oil_price)
fetch_button.grid(row=0, column=2, padx=10, pady=10)

update_time_label = ttk.Label(main_frame, text="")
update_time_label.grid(row=1, column=0, columnspan=3)

oil_price_frame = ttk.Frame(main_frame)
oil_price_frame.grid(row=2, column=0, columnspan=3, padx=10, pady=10)

error_label = ttk.Label(main_frame, text="")
error_label.grid(row=3, column=0, columnspan=3)

root.mainloop()

最后可以使用 pip3 install pyinstaller 打包成exe格式.

使用 Oilprice API 和 Python,我们可以轻松地获取实时和历史油价数据。这些数据对于金融分析师、投资者以及其他需要实时油价信息的人士来说是非常宝贵的资源。通过简单的脚本,你可以快速整合这些数据到你的项目中。

#你可能也喜欢这些API文章!