从零搭建一个django项目-1-第一个接口天气预报(上)

2022-06-13 13:09:23 浏览数 (1)

之前写postman演示的接口天气接口,这次django项目的第一个接口也选择天气预报吧。

使用模块:request

使用接口:高德地图开放平台

01

创建高德地图api的应用

因为我之前已经创建过了直接给大家看下编辑下面的东西。创建了一个叫天气预报的应用类型是天气,创建一个key选的是web服务,key的名字是自己起的天气查询。

具体可以查看高德地图的开放平台api文档:

天气查询-A‍PI文档-开发指南-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接口里。

0 人点赞