欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

天气预报的APL

程序员文章站 2022-05-29 21:59:04
...

天气API详情介绍 在 API 中心:http://www.sojson.com/api/weather.html ,下面只介绍下调用方式,然后 用 Java 语言调用演示一下。

API最新消息

最近 API 会变化,目前 API 从免费开放以来到现在,还是很稳定,最高一天达到1.4亿次调用,响应成功率达到98%。还是很赞的。
目前我新购置了集群服务器,把 API 独立出去,涉及到的变化,域名从(www.sojson.com)改成了(api.sojson.com),支持 HTTPS 调用,字段稍微有变化,另外开放了及时天气和15天天气详细数据,不过是收费的,毕竟我也需要维护成本,不过比聚合API肯定便宜。

接口为什么最近有缓存

因为免费接口触及到了部分商家的奶酪,接口基本每天都会被攻击。 下面是被攻击的截图。不得已开启缓存模式,另外,好消息是新的接口,这些问题都没有,不会有缓存,因为每个人的接口 URL 地址都是不一样的。
天气预报的APL
部分 CC 攻击识别是接口调用太频繁造成的,你说你们的对我的伤害基本是爆击。

天气接口免费额度

1.每天每个IP段拥有2000次免费额度,每次请求间隔为3秒一次,如果没有间隔3秒去请求,永远都不会通过,因为每次请求都是重新计时。

2.请求频繁或者日请求量过大,会直接停封,比如秒并发达到100,比如日请求到达几万,服务器会自动屏蔽。也是禁用IP段。

天气接口调用注意事项

忠告:别把免费资源不当资源,能不能自己稍微做下缓存,或者全局变量方式缓存,要这样的用量,90%以上是无用的请求,那我怎么坚持下去?敬请理解,如果确实需要这么大的量,先联系,说清楚。

天气预报 API 接口 JSON返回

public static void json() throws Exception{
    //参数url化
    String city = java.net.URLEncoder.encode("北京", "utf-8");

    //拼地址
    String apiUrl = String.format("http://www.sojson.com/open/api/weather/json.shtml?city=%s",city);
    //开始请求
    URL url= new URL(apiUrl);
    URLConnection open = url.openConnection();
    InputStream input = open.getInputStream();
    //这里转换为String,带上包名,怕你们引错包
    String result = org.apache.commons.io.IOUtils.toString(input,"utf-8");
    //输出
    System.out.println(result);
}

天气预报 JSON 返回值:

{
    "data": {
        "yesterday": {
            "date": "26日星期五",
            "high": "高温 31℃",
            "fx": "南风",
            "low": "低温 17℃",
            "fl": "微风",
            "type": "晴"
        },
        "city": "北京",
        "aqi": "83",
        "forecast": [
            {
                "date": "27日星期六",
                "high": "高温 34℃",
                "fengli": "微风级",
                "low": "低温 21℃",
                "fengxiang": "西南风",
                "type": "晴"
            },
            {
                "date": "28日星期天",
                "high": "高温 36℃",
                "fengli": "3-4级",
                "low": "低温 22℃",
                "fengxiang": "北风",
                "type": "多云"
            },
            {
                "date": "29日星期一",
                "high": "高温 29℃",
                "fengli": "微风级",
                "low": "低温 18℃",
                "fengxiang": "东风",
                "type": "阴"
            },
            {
                "date": "30日星期二",
                "high": "高温 30℃",
                "fengli": "微风级",
                "low": "低温 18℃",
                "fengxiang": "南风",
                "type": "阴"
            },
            {
                "date": "31日星期三",
                "high": "高温 32℃",
                "fengli": "3-4级",
                "low": "低温 20℃",
                "fengxiang": "南风",
                "type": "多云"
            }
        ],
        "ganmao": "各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。",
        "wendu": "27"
    },
    "status": 200,
    "message": "OK"
}

天气预报 API XML返回方式

public static void xml() throws Exception{
    //参数url化
    String city = java.net.URLEncoder.encode("北京", "utf-8");

    //拼地址
    String apiUrl = String.format("http://www.sojson.com/open/api/weather/xml.shtml?city=%s",city);
    //开始请求
    URL url= new URL(apiUrl);
    URLConnection open = url.openConnection();
    InputStream input = open.getInputStream();
    //这里转换为String,带上包名,怕你们引错包
    String result = org.apache.commons.io.IOUtils.toString(input,"utf-8");
    //输出
    System.out.println(result);
}

天气预报 XML返回值:

<?xml version="1.0" encoding="UTF-8"?>
<resp>
    <city>北京</city>
    <updatetime>13:45</updatetime>
    <wendu>27</wendu>
    <fengli>3级</fengli>
    <shidu>38%</shidu>
    <fengxiang>东风</fengxiang>
    <sunrise_1>04:51</sunrise_1>
    <sunset_1>19:33</sunset_1>
    <sunrise_2></sunrise_2>
    <sunset_2></sunset_2>
    <environment>
        <aqi>83</aqi>
        <pm25>61</pm25>
        <suggest>极少数敏感人群应减少户外活动</suggest>
        <quality></quality>
        <MajorPollutants>颗粒物(PM2.5)</MajorPollutants>
        <o3>148</o3>
        <co>1</co>
        <pm10>106</pm10>
        <so2>27</so2>
        <no2>47</no2>
        <time>13:00:00</time>
    </environment>
    <yesterday>
        <date_1>26日星期五</date_1>
        <high_1>高温 31℃</high_1>
        <low_1>低温 17℃</low_1>
        <day_1>
            <type_1></type_1>
            <fx_1>南风</fx_1>
            <fl_1>微风</fl_1>
        </day_1>
        <night_1>
            <type_1></type_1>
            <fx_1>北风</fx_1>
            <fl_1>微风</fl_1>
        </night_1>
    </yesterday>
    <forecast>
        <weather>
            <date>27日星期六</date>
            <high>高温 34℃</high>
            <low>低温 21℃</low>
            <day>
                <type></type>
                <fengxiang>西南风</fengxiang>
                <fengli>微风级</fengli>
            </day>
            <night>
                <type></type>
                <fengxiang>北风</fengxiang>
                <fengli>微风级</fengli>
            </night>
        </weather>
        <weather>
            <date>28日星期天</date>
            <high>高温 36℃</high>
            <low>低温 22℃</low>
            <day>
                <type>多云</type>
                <fengxiang>北风</fengxiang>
                <fengli>3-4级</fengli>
            </day>
            <night>
                <type></type>
                <fengxiang>东北风</fengxiang>
                <fengli>微风级</fengli>
            </night>
        </weather>
        <weather>
            <date>29日星期一</date>
            <high>高温 29℃</high>
            <low>低温 18℃</low>
            <day>
                <type></type>
                <fengxiang>东风</fengxiang>
                <fengli>微风级</fengli>
            </day>
            <night>
                <type>阵雨</type>
                <fengxiang>南风</fengxiang>
                <fengli>微风级</fengli>
            </night>
        </weather>
        <weather>
            <date>30日星期二</date>
            <high>高温 30℃</high>
            <low>低温 18℃</low>
            <day>
                <type></type>
                <fengxiang>南风</fengxiang>
                <fengli>微风级</fengli>
            </day>
            <night>
                <type>多云</type>
                <fengxiang>北风</fengxiang>
                <fengli>微风级</fengli>
            </night>
        </weather>
        <weather>
            <date>31日星期三</date>
            <high>高温 32℃</high>
            <low>低温 20℃</low>
            <day>
                <type>多云</type>
                <fengxiang>南风</fengxiang>
                <fengli>3-4级</fengli>
            </day>
            <night>
                <type>多云</type>
                <fengxiang>南风</fengxiang>
                <fengli>3-4级</fengli>
            </night>
        </weather>
    </forecast>
    <zhishus>
        <zhishu>
            <name>晨练指数</name>
            <value>适宜</value>
            <detail>天气不错,空气清新,是您晨练的大好时机,建议不同年龄段的人们积极参加户外健身活动。</detail>
        </zhishu>
        <zhishu>
            <name>舒适度</name>
            <value>很不舒适</value>
            <detail>白天天气晴好,但烈日炎炎会使您会感到很热,很不舒适。</detail>
        </zhishu>
        <zhishu>
            <name>穿衣指数</name>
            <value>炎热</value>
            <detail>天气炎热,建议着短衫、短裙、短裤、薄型T恤衫等清凉夏季服装。</detail>
        </zhishu>
        <zhishu>
            <name>感冒指数</name>
            <value>少发</value>
            <detail>各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。</detail>
        </zhishu>
        <zhishu>
            <name>晾晒指数</name>
            <value>极适宜</value>
            <detail>天气不错,极适宜晾晒。抓紧时机把久未见阳光的衣物搬出来晒晒太阳吧!</detail>
        </zhishu>
        <zhishu>
            <name>旅游指数</name>
            <value>较适宜</value>
            <detail>天气较好,感觉有点热,不过有微风伴您一路同行,还是较适宜旅游的,外出请注意防晒哦!</detail>
        </zhishu>
        <zhishu>
            <name>紫外线强度</name>
            <value>很强</value>
            <detail>紫外线辐射极强,建议涂擦SPF20以上、PA++的防晒护肤品,尽量避免暴露于日光下。</detail>
        </zhishu>
        <zhishu>
            <name>洗车指数</name>
            <value>较适宜</value>
            <detail>较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。</detail>
        </zhishu>
        <zhishu>
            <name>运动指数</name>
            <value>较适宜</value>
            <detail>天气较好,户外运动请注意防晒。推荐您进行室内运动。</detail>
        </zhishu>
        <zhishu>
            <name>约会指数</name>
            <value>较不适宜</value>
            <detail>天气较热,建议尽量不要去室外约会,如果外出,请您挑选荫凉的地点。</detail>
        </zhishu>
        <zhishu>
            <name>雨伞指数</name>
            <value>不带伞</value>
            <detail>天气较好,您在出门的时候无须带雨伞。</detail>
        </zhishu>
    </zhishus>
</resp>
<!-- 10.10.162.42(10.10.162.42):38553 ; 10.10.156.163:8080 -->

注意的一点就是,参数中文要转码。要url转码。 Java 如下:

//参数url化

String city = java.net.URLEncoder.encode("北京", "utf-8");

还有一点就是,编码为UTF-8

本站使用的Demo,是在万年历功能使用,下面是截图。

万年历:http://www.sojson.com/time/wannianli.html

如果需要元素图片,也就是对应天气的素材图片,请加QQ群(259217951),然后回复 “天气图片”,会有机器人回复您,给你图片的下载地址,以及图片的对应含义。 JSON 格式的。

相关标签: 天气预报APi