之前写postman演示的接口天气接口,这次django项目的第一个接口也选择天气预报吧。
使用模块:request
使用接口:高德地图开放平台
01
—
创建高德地图api的应用
因为我之前已经创建过了直接给大家看下编辑下面的东西。创建了一个叫天气预报的应用类型是天气,创建一个key选的是web服务,key的名字是自己起的天气查询。
具体可以查看高德地图的开放平台api文档:
天气查询-API文档-开发指南-Web服务 API|高德地图API (amap.com)
02
—
编写天气类
在myapp文件夹下新建一个utils文件夹。并在下面创建weatherInfo_utils.py文件。
使用到的模块:
代码语言:javascript复制import json
import requests
我们先看下全部的代码和运行效果:
代码语言:javascript复制#-*- codeing = utf-8 -*-
#@Time: 2022/5/21 21:54
#@Author: 怪盗LLYL
#@File: weatherInfo_utils.py
#@Software: PyCharm
import json
import requests
class Gaode_tianqi(object):
def __init__(self,address):
self.__address = address
url = f"https://restapi.amap.com/v3/geocode/geo?address={self.__address}&output=JSON&key=你的key"
payload = {}
headers = {}
response = requests.request("GET", url, headers=headers, data=payload)
adcode = json.loads(response.text)["geocodes"][0]["adcode"]
self.__adcode = adcode
basejson = self.get_weatherinfo_base()
self.__city = basejson["lives"][0]["city"] #城市名称
self.__weather = basejson["lives"][0]["weather"] #天气现象(汉字描述)
self.__temperature = basejson["lives"][0]["temperature"] #实时气温,单位:摄氏度
self.__winddirection = basejson["lives"][0]["winddirection"] #风向描述
self.__windpower = basejson["lives"][0]["windpower"] #风力级别,单位:级
self.__humidity = basejson["lives"][0]["humidity"] #空气湿度
self.__reporttime = basejson["lives"][0]["reporttime"] #数据发布的时间
self.__forecastlist = self.get_weatherinfo_all()["forecasts"][0]["casts"]
def __str__(self):
str = "未来天气:rn"
for i in self.__forecastlist:
str = str f" 日期:{i['date']} 星期{i['week']} 白:{i['dayweather']} {i['daytemp']}℃ 风向:{i['daywind']} 风力:{i['daypower']} 夜:{i['nightweather']} {i['nighttemp']}℃ 风向:{i['nightwind']} 风力:{i['nightpower']}rn"
return f"城市:{self.__city} 当前温度:{self.__temperature}℃ 天气:{self.__weather} 风向:{self.__winddirection} 湿度:{self.__humidity} 发布时间:{self.__reporttime}n{str}"
@property
def forecastlist(self):
return (self.__forecastlist)
@property
def reporttime(self):
return (self.__reporttime)
@property
def windpower(self):
return (self.__windpower)
@property
def humidity(self):
return (self.__humidity)
@property
def city(self):
return (self.__city)
@property
def winddirection(self):
return (self.__winddirection)
@property
def temperature(self):
return (self.__temperature)
@property
def weather(self):
return (self.__weather)
@property
def address(self):
return (self.__address)
@property
def adcode(self):
return self.__adcode
def get_weatherinfo_base(self):
import requests
url = f"https://restapi.amap.com/v3/weather/weatherInfo?key=你的key&city={self.__adcode}&extensions=base&output=JSON"
payload = {}
headers = {}
response = requests.request("GET", url, headers=headers, data=payload)
return json.loads(response.text)
def get_weatherinfo_all(self):
import requests
url = f"https://restapi.amap.com/v3/weather/weatherInfo?key=你的key&city={self.__adcode}&extensions=all&output=JSON"
payload = {}
headers = {}
response = requests.request("GET", url, headers=headers, data=payload)
return json.loads(response.text)
if __name__ == '__main__':
listcity = ["北京","营口","上海","无锡","宁波","扬州"]
for i in listcity:
tianqi = Gaode_tianqi(i)
print(tianqi)
运行效果:
03
—
解读天气类
首先看下获取天气的两个类:
代码语言:javascript复制 def get_weatherinfo_base(self):
import requests
url = f"https://restapi.amap.com/v3/weather/weatherInfo?key=你的key&city={self.__adcode}&extensions=base&output=JSON"
payload = {}
headers = {}
response = requests.request("GET", url, headers=headers, data=payload)
return json.loads(response.text)
def get_weatherinfo_all(self):
import requests
url = f"https://restapi.amap.com/v3/weather/weatherInfo?key=你的key&city={self.__adcode}&extensions=all&output=JSON"
payload = {}
headers = {}
response = requests.request("GET", url, headers=headers, data=payload)
return json.loads(response.text)
请求使用了request,get方法参数写在了url里,其中key为之前申请的key,天气类型分别是base实况天气以及all预报天气,city为高德地图定义的城市编码。
因为接口里面传的城市是高德自定义的编码,而我们传入的是中文的城市那么怎么对应呢,这里高德给我们提供了一个查询接口:
代码语言:javascript复制https://restapi.amap.com/v3/geocode/geo
我将获取城市编码的调用写在了初始化函数内,这样每次初始化天气类都可以获取到新的城市编码,并调用get_weatherinfo_base和get_weatherinfo_all两个方法。
代码语言:javascript复制 def __init__(self,address):
self.__address = address
url = f"https://restapi.amap.com/v3/geocode/geo?address={self.__address}&output=JSON&key=你的key"
payload = {}
headers = {}
response = requests.request("GET", url, headers=headers, data=payload)
adcode = json.loads(response.text)["geocodes"][0]["adcode"]
self.__adcode = adcode
basejson = self.get_weatherinfo_base()
self.__city = basejson["lives"][0]["city"] #城市名称
self.__weather = basejson["lives"][0]["weather"] #天气现象(汉字描述)
self.__temperature = basejson["lives"][0]["temperature"] #实时气温,单位:摄氏度
self.__winddirection = basejson["lives"][0]["winddirection"] #风向描述
self.__windpower = basejson["lives"][0]["windpower"] #风力级别,单位:级
self.__humidity = basejson["lives"][0]["humidity"] #空气湿度
self.__reporttime = basejson["lives"][0]["reporttime"] #数据发布的时间
self.__forecastlist = self.get_weatherinfo_all()["forecasts"][0]["casts"]
基本的天气接口写完了,下一章我们将集成到django接口里。