自己完成的第一个实例,初学python,还有许多不懂的地方,望大佬们指正
获取和风天气的账号和key
这里就不多赘述了,网上教程也有
使用python中的openpyxl库对表格进行操作
首先尝试将python和excel表格结合,在其中输入第一行的标题,我还合并了一下第一列的单元格,方便统计地区,设置了单元格的长宽和字号大小
使用request库,与API相结合,获取地理位置和天气等信息
和风天气只能免费获取三天的天气预报,把武汉市三日天气预报直接获取并存入表格中,稍微难一点的地方就在于locationID的循环输出了,这里我把locationID的值单独写在了一个函数里,并存在列表里,给定一个返回值
enumerate() 用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标。这样的话,就获得了索引值下标和我需要的ID值了,索引下标用于循环,ID值传给location参数。
记得要给row也加个变量,不然会造成单元格写入的时候一直覆盖前三行,由于locid是下标索引值,所以直接+3*locid就可以了
输出成功!获取的是武汉市和武汉市包含的区的三日天气预报
写在最后
这个项目是我第一次做,然后也参考了一些别人的代码,有什么不对的地方还望大家多多包涵qwq
源码
from openpyxl import load_workbook
from openpyxl.styles import Font
import openpyxl
import requests
import numpy as np
def get_xlsx(xlsxname):
wb = load_workbook(xlsxname)
ws = wb.active # 激活 worksheet
# 设置字体为“宋体”,大小为11,bold为加粗,italic为斜体
font = Font(u'宋体', size=21, bold=True, italic=True, strike=False, )
ws["A1"].font = font
ws.merge_cells('A2:A4')
ws.merge_cells('A5:A7')
ws.merge_cells('A8:A10')
ws.merge_cells('A11:A13')
ws.merge_cells('A14:A16')
ws.merge_cells('A17:A19')
ws.merge_cells('A20:A22')
ws.merge_cells('A23:A25')
ws.merge_cells('A26:A28')
ws.merge_cells('A29:A31')
ws.merge_cells('A32:A34')
ws.merge_cells('A35:A37')
ws.merge_cells('A38:A40')
ws.merge_cells('A41:A43')
ws.column_dimensions['A'].width = 25 # 列宽
ws.column_dimensions['B'].width = 25
ws.column_dimensions['C'].width = 20
ws.column_dimensions['D'].width = 20
ws.column_dimensions['E'].width = 20
ws.column_dimensions['F'].width = 20
columnsHeader = ["当前地区", "当前日期", "天气", "最高温度", "最低温度", "风力"]
for i in range(6):
ws.cell(row=1, column=i + 1, value=columnsHeader[i]) # 写入列标题
wb.save(xlsxname)
def get_weather(url,key,xlsxname):
wb = load_workbook(xlsxname)
ws = wb.active # 激活 worksheet
locationlist = get_locdata("https://geoapi.qweather.com/v2/city/lookup?location=wuhan&number=15", 'key')
for locid,location in enumerate(locationlist,0):
params = {
'location': location,
'key': key,
'lang': 'zh'
}
res = requests.get(url=url, params=params)
jsondata = res.json()['daily']
print(locid)
for i in range(3):
ws.cell(row=2 + i+3*locid, column=2, value=jsondata[i]['fxDate'])
for j in range(3):
ws.cell(row=2 + j+3*locid, column=3, value=jsondata[j]['textDay'])
for k in range(3):
ws.cell(row=2 + k+3*locid, column=4, value=jsondata[k]['tempMax'])
for m in range(3):
ws.cell(row=2 + m+3*locid, column=5, value=jsondata[m]['tempMin'])
for n in range(3):
ws.cell(row=2 + n+3*locid, column=6, value=jsondata[n]['windDirDay'] + jsondata[n]['windScaleDay'] + '级')
wb.save(xlsxname) # 保存表格
def get_location(url,key,xlsxname):
wb = load_workbook(xlsxname)
ws = wb.active # 激活 worksheet
location = ''
params = {
#'location': location,
'key': key,
'lang': 'zh'
}
res = requests.get(url=url, params=params)
locdata = res.json()['location']
for i, j in zip(range(0, 40, 3), range(15)):
ws.cell(row=2 + i, column=1, value=locdata[j]['name'])
#print(i)
#print(locdata[j]['id'])
wb.save(xlsxname) # 保存表格
def get_locdata(url,key):
location = ''
params = {
'location': location,
'key': key,
'lang': 'zh'
}
res = requests.get(url=url, params=params)
locdata = res.json()['location']
locationid=list()
for i in range(14):
locationid.append(locdata[i]['id'])
return locationid
if __name__ == '__main__':
get_locdata("https://geoapi.qweather.com/v2/city/lookup?location=wuhan&number=15", 'key')
get_xlsx("天气.xlsx")
get_weather("https://devapi.qweather.com/v7/weather/3d?", 'key', "天气.xlsx")
get_location("https://geoapi.qweather.com/v2/city/lookup?location=wuhan&number=15",'key',"天气.xlsx")
print('ok')