需要用到的模块
1.requests
2.matplotlib
API来源
阿里云API市场–>墨迹天气API
- 0元试用20次,8.9元可以用1W次
获取天气数据
墨迹天气这个API还是挺好用的,大部分天气数据在API可以获取到,由于是渣新刚学,所以就只用了未来15天的气温数据。
获取未来15天的天气数据,返回JSON数据。
def get_data():
url = "http://aliv18.data.moji.com/whapi/json/alicityweather/condition"
appcode = "你自己的CODE" # 阿里云appcode
post_data = {
'cityId': "650", # 城市ID,长沙市:650,广州:886,上海:39,北京:2
'token': 'API的token', # 每个API的token都不一样,具体看自己阿里云上的
}
headers = {
'Authorization': "APPCODE " + appcode, # APPCODE后面要留一个空格,否则会401
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', # Content-Type格式是固定的
}
res = requests.post(url, data=post_data, headers=headers) # 发送请求并爬取数据
str_json = res.content.decode("utf8") # 解析数据
json_data = json.loads(str_json) # API返回的json数据需要转换为dict数据,否则会认为是个str
return json_data
- 这里有个坑,请求头的“Authorization”:“APPCODE”后面要留一个空格,即“APPCODE ”,不然的话会报401。
返回数据:
从返回的数据可以看出,“data”是城市的信息,“forecast”是15天的天气信息。
从forecast得出“predictDate=日期”,“tempDay=日间温度”,“tempNight=夜间温度”,我要以“predictDate”作为图表的X轴,“tempDay”以及"tempNight"作为Y轴,因此需要将他们的数据都遍历出来。
class Graphing:
def __init__(self, data):
"""初始化并生成X、Y轴数据"""
self.json_data = data # # 获取数据
self.city_data = self.json_data['data']['city'] # 获取城市信息
self.temp_data = self.json_data['data']['forecast'] # 获取15天的天气信息
self.predictDateList = [date["predictDate"] for date in self.temp_data] # 以日期生成X轴数据
self.tempDayList = [temp["tempDay"] for temp in self.temp_data] # 日间温度
self.tempNightList = [temp["tempNight"] for temp in self.temp_data] # 晚间温度
self.tempDayList = list(map(int, self.tempDayList)) # 列表中的数据都是STR类型,因此都要转为int类型
self.tempNightList = list(map