天气查询

国内率先完整提供 Demo 代码示例及数据专业且全面的 API 查询接口。
打造精品数据 API 品质,腾讯云提供计算服务及亿百天技术提供技术支持。
注册本站会员,即可免费使用!

天气查询(仅支持国内城市)

接口使用

我要查询

提示:请在下面的 Demo 中输入您要查询的数据,点击查询即可。

天气查询


查询说明

目前支持中国大陆三级地区及港澳台地区的天气查询。

接口描述

功能描述

获取城市/地区的天气信息,比如:天气情况、温度、风向、风力、空气湿度等天气信息。

URL 示例

POST 方式请求:

1)http 协议:

http://cha.ebaitian.cn/api/json?appid=xxx&module=getWeatherInfo&city=xxx&sign=xxx

GET 方式请求:

http://cha.ebaitian.cn/api/json?type=get&appid=xxx&module=getWeatherInfo&city=xxx&sign=xxx

2)https 协议:

https://cha.ebaitian.cn/api/json?appid=xxx&module=getWeatherInfo&city=xxx&sign=xxx

GET 方式请求:

https://cha.ebaitian.cn/api/json?type=get&appid=xxx&module=getWeatherInfo&city=xxx&sign=xxx

请求参数

数据包体

{
    "type": "get",
    "appid": "1000xxxx",
    "module": "getWeatherInfo",
    "city": "北京",
    "sign": "ecab4881ee80ad3d76bb1da68387428ca752eb885e52621a3129dcf4d9bc4fd4"
}

参数说明

参数 必选 类型 描述
type string 授权接口的请求方式
appid string 授权接口的 AppID,请填写您在我要查官网上申请到的 AppID
module string 目标请求的数据模块,查询手机号码归属地为:getWeatherInfo
city string 目标要查询的城市/地区名称,支持中国大陆三级地区及港澳台地区的天气查询
sign string 请求凭证,具体计算方式见下面的其他说明

其他说明

1)type:可选值 get,如果赋值 get,则以 get 方式提交数据;默认以 post 方式提交数据;
2)sign:签名校验,根据公式 $sign=sha256(appid=$appid&module=getWeatherInfo&city=$city&appkey=$appkey) 生成;其中:appkey 为授权接口的 AppKey,请填写您在我要查官网上申请到的 AppKey 。

构造伪代码如下:

string type = "get"; //请求方式,可以赋值为:post
string appid = "1000xxxx"; //sdkappid 对应的 appid,需要业务方高度保密
string module = "getWeatherInfo"; //请求的数据模块,此处赋值:getWeatherInfo
string city = "北京"; //要查询的城市/地区名称
string sign = sha256(appid=1000xxxx&module=getWeatherInfo&city=北京&appkey=56cf61af4b7897e704f67deb88ae8f24);

响应参数

数据包体

{
    "result":1,
    "description":"TRUE",
    "flag":"NULL",
    "weatherInfo":{
        "city":"北京",
        "cityid":"101010100",
        "temp1":"18℃",
        "temp2":"31℃",
        "weather":"多云转阴",
        "img1":"n1.gif",
        "img2":"d2.gif",
        "ptime":"18:00",
        "weatherInfoNow":{
            "city":"北京",
            "cityid":"101010100",
            "temp":"27.9",
            "WD":"南风",
            "WS":"小于3级",
            "SD":"28%",
            "WSE":"<3",
            "time":"17:55",
            "isRadar":"1",
            "Radar":"JC_RADAR_AZ9010_JB"
        }
    }
}

参数说明

参数 必选 类型 描述
result string 接口响应结果:0-失败;1-成功
description string 接口响应描述:一般为 TURE(result=1) 与 FALSE(result=0),或者返回错误信息
flag string 错误说明,没有错误则返回空
weatherInfo object 返回天气信息

weatherInfo 参数说明:

参数 必选 类型 描述
city string 城市名称
cityid string 城市编号
temp1 string 最高气温
temp2 string 最低气温
weather string 天气
img1 string 天气
img2 string 夜间图标
ptime string 发布时间
weatherInfoNow object 返回即时天气信息

weatherInfoNow 参数说明:

参数 必选 类型 描述
city string 城市名称
cityid string 城市编号
temp string 当前风向
WD string 当前风向
WS string 当前风速
SD string 当前湿度
WSE string 当前风力
time string 更新时间
isRadar string 是否有雷达图
Radar string 雷达图地址

SDK 及代码示例

PHP SDK

方法一:以 POST 方式请求数据

//接口参数
$api_url='http://cha.ebaitian.cn/api/json';
$api_appid='1000xxxx';
$api_appkey='56cf61af4b7897e704f67deb88ae8f24';

//函数,以POST方式提交数据,PHP需要开启CURL函数;数据传输安全,建议使用
function getWeatherInfo($city){
    global $api_url,$api_appid,$api_appkey;
    $posturl=$api_url;
    $data='appid='.$api_appid.'&module=getWeatherInfo&city='.$city;
    $sign=hash("sha256",$data.'&appkey='.$api_appkey);
    $postdata=array("appid"=>$api_appid,"appkey"=>$api_appkey,"module"=>"getWeatherInfo","city"=>$city,'sign'=>$sign);
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $posturl);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
    $output = curl_exec($curl);
    curl_close($curl);
    $obj=json_decode($output);
    $result=$obj->result;
    if($result==1){
        $value=$obj->weatherInfo->city;
        $value.=','.$obj->weatherInfo->temp1;
        $value.=','.$obj->weatherInfo->temp2;
        $value.=','.$obj->weatherInfo->weather;
    }else{
        $value=$obj->flag;
    }
    return $value;
}
//调用函数
$city='北京';
echo getWeatherInfo($city);
exit;

方法二:以 GET 方式请求数据

//接口参数
$api_url='http://cha.ebaitian.cn/api/json';
$api_appid='1000xxxx';
$api_appkey='56cf61af4b7897e704f67deb88ae8f24';

//函数,以GET方式提交数据
function getWeatherInfo($city){
    global $api_url,$api_appid,$api_appkey;
    $data='appid='.$api_appid.'&module=getWeatherInfo&city='.$city;
    $sign=hash("sha256",$data.'&appkey='.$api_appkey);
    $info_get=file_get_contents($api_url.'?type=get&'.$data.'&sign='.$sign);
    $info_json=json_decode($info_get, true);
    $result=$info_json['result'];
    if($result==1){
        $value=$info_json['weatherInfo']['city'];
        $value.=','.$info_json['weatherInfo']['temp1'];
        $value.=','.$info_json['weatherInfo']['temp2'];
        $value.=','.$info_json['weatherInfo']['weather'];
    }else{
        $value=$info_json['flag'];
    }
    return $value;
}
//调用函数
$city='北京';
echo getWeatherInfo($city);
exit;

Java SDK

//以下示例是以 GET 方式请求数据
public class QueryHelper {
	
    public static String apiurl="http://cha.ebaitian.cn/api/json";
    public static String appid="1000xxxx";
    public static String appkey="56cf61af4b7897e704f67deb88ae8f24";
    public static String module="getWeatherInfo";
    
    public static String getSHA256Str(String str){
        MessageDigest messageDigest;
        String encdeStr = "";
        try {
            messageDigest = MessageDigest.getInstance("SHA-256");
            byte[] hash = messageDigest.digest(str.getBytes("UTF-8"));
            encdeStr = Hex.encodeHexString(hash);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return encdeStr;
    }
    
    public static String get(String urlString) {
        try {
            URL url = new URL(urlString);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5 * 1000);
            conn.setReadTimeout(5 * 1000);
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            conn.setInstanceFollowRedirects(false);
            conn.setRequestMethod("GET"); 
            int responseCode = conn.getResponseCode();
            if (responseCode == 200) {
                StringBuilder builder = new StringBuilder();
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(conn.getInputStream(),"utf-8"));
                for (String s = br.readLine(); s != null; s = br.readLine()) {
                    builder.append(s);
                }
                br.close();
                return builder.toString();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    public static String queryWeather(String city){
        String sign=getSHA256Str("appid="+appid+"&module="+module+"&city="+city+"&appkey="+appkey);
        String url=apiurl+"?type=get&appid="+appid+"&module="+module+"&city="+city+"&sign="+sign;
        return get(url);
    }
}

//使用示例
QueryHelper.queryWeather("北京");

Python SDK

#!/usr/bin/python
# -*- coding: utf-8 -*-
import httplib2
import hashlib
from urllib.parse import urlencode #python3
#from urllib import urlencode #python2

apiurl='http://cha.ebaitian.cn/api/json'
appid='1000xxxx'
appkey='56cf61af4b7897e704f67deb88ae8f24'
module='getWeatherInfo'
city='北京'
data='appid='+appid+'&module='+module+'&city='+city
sign_data=data+'&appkey='+appkey

# from Crypto.Cipher import AES
# from Crypto.Hash import SHA256
# 256
hash_256 = hashlib.sha256()
hash_256.update(sign_data.encode('utf-8'))
sign = hash_256.hexdigest()

postdata = urlencode({'appid':appid,'module':module,'city':city,'sign':sign})
url = apiurl+'?type=get&'+postdata
http = httplib2.Http()
response, content = http.request(url,'GET')
print(content.decode("utf-8"))

Node.js SDK

方法一:以 POST 方式请求数据

//以 POST 方式提交
var http = require('http');  

var querystring = require('querystring');  

//参数设置
var appid = '1000xxxx';
var appkey = '56cf61af4b7897e704f67deb88ae8f24';
var module = 'getWeatherInfo';

//目标查询城市/地区名称
var city='北京';

//签名,SHA256 不可直接调用;函数参考下载地址:https://github.com/alexweber/jquery.sha256
var sign = SHA256('appid='+appid+'&module='+module+'&city='+city+'&appkey='+appkey);

//这是需要提交的数据
var post_data = {
    appid: appid,  
    module: module,
    city: city,
    sign: sign
};  

var content = querystring.stringify(post_data);  

var options = {  
    hostname: 'cha.ebaitian.cn',  
    port: 80,  
    path: '/api/json',  
    method: 'POST',  
    headers: {  
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'  
    }  
};  

var req = http.request(options, function (res) {  
    console.log('STATUS: ' + res.statusCode);  
    console.log('HEADERS: ' + JSON.stringify(res.headers));  
    res.setEncoding('utf8');  
    res.on('data', function (chunk) {  
        console.log('BODY: ' + chunk);  
    //JSON.parse(chunk)
    });  
});  

req.on('error', function (e) {  
    console.log('problem with request: ' + e.message);  
});  

// write data to request body  
req.write(content);  

req.end();  

方法二:以 GET 方式请求数据

//以 GET 方式提交
var http = require('http');  

var querystring = require('querystring');  

//参数设置
var appid = '1000xxxx';
var appkey = '56cf61af4b7897e704f67deb88ae8f24';
var module = 'getWeatherInfo';

//目标查询城市/地区名称
var city='北京';

//签名,SHA256 不可直接调用;函数参考下载地址:https://github.com/alexweber/jquery.sha256
var sign = SHA256('appid='+appid+'&module='+module+'&city='+city+'&appkey='+appkey);

//这是需要提交的数据
var data = {
    appid: appid, 
    module: module,
    city: city,
    sign: sign
};

var content = querystring.stringify(data);  

var options = {  
    hostname: 'cha.ebaitian.cn',  
    port: 80,  
    path: '/api/json?' + content,  
    method: 'GET'  
};  

var req = http.request(options, function (res) {  
    console.log('STATUS: ' + res.statusCode);  
    console.log('HEADERS: ' + JSON.stringify(res.headers));  
    res.setEncoding('utf8');  
    res.on('data', function (chunk) {  
        console.log('BODY: ' + chunk);
    });  
});  

req.on('error', function (e) {  
    console.log('problem with request: ' + e.message);  
});  

req.end();  

C# SDK

using System;
using System.Collections.Generic;
using System.Web;
using System.Net;
using System.Text;

public class getWeatherInfo{
    public static string getInfo(string appid, string appkey, string module, string city){
        string url = string.Format("http://cha.ebaitian.cn/api/json?type=get&appid={0}&module={1}&city={2}&sgin={3}", appid, module, city, sgin);
        using (WebClient client = new WebClient()){
            client.Encoding = Encoding.UTF8;
            return client.DownloadString(url);
        }
    }
}

string weatherInfo = getWeatherInfo.getInfo("1000xxxx", "getWeatherInfo", "北京", "ecab4881ee80ad3d76bb1da68387428ca752eb885e52621a3129dcf4d9bc4fd4", Request.UserHostAddress);
Console.WriteLine(weatherInfo);
Response.Write(weatherInfo);

JavaScript SDK

方法一:以 POST 方式请求数据

//使用 JQuery 请先加载最新的 JQuery 插件
//参数设置
var apiurl = 'http://cha.ebaitian.cn/api/json';
var appid = '1000xxxx';
var appkey = '56cf61af4b7897e704f67deb88ae8f24';
var module = 'getWeatherInfo';

//目标查询城市/地区名称
var city='北京';

//签名,SHA256 不可直接调用;函数参考下载地址:https://github.com/alexweber/jquery.sha256
var sign = SHA256('appid='+appid+'&module='+module+'&city='+city+'&appkey='+appkey);

//提交数据
$.ajax({
    url:apiurl,
    type:'post',
    dataType:'json',
    data:{
        appid:appid,
        module:module,
        city:city,
        sign:sign
    },
    success:function(res){
        console.log(res);
    }
});

方法二:以 GET 方式请求数据

//使用 JQuery 请先加载最新的 JQuery 插件
//参数设置
var apiurl = 'http://cha.ebaitian.cn/api/json';
var appid = '1000xxxx';
var appkey = '56cf61af4b7897e704f67deb88ae8f24';
var module = 'getWeatherInfo';

//目标查询城市/地区名称
var city='北京';

//签名,SHA256 不可直接调用;函数参考下载地址:https://github.com/alexweber/jquery.sha256
var sign = SHA256('appid='+appid+'&module='+module+'&city='+city+'&appkey='+appkey);

//提交数据
$.ajax({
    url:apiurl,
    type:'post',
    dataType:'json',
    data:{
        appid:appid,
        module:module,
        city:city,
        sign:sign
    },
    success:function(res){
        console.log(res);
    }
});

ASP SDK

'设置参数
dim apiurl, appid, appkey, module, city, sign
apiurl="http://cha.ebaitian.cn/api/json"
appid="1000xxxx'
appkey="56cf61af4b7897e704f67deb88ae8f24"
module="getWeatherInfo"
city="北京"

'签名,SHA256 不可直接调用;函数参考地址:https://blog.csdn.net/yesoce/article/details/128546
sgin=SHA256("appid=&appid&"&module="&module&"&city="&city&"&appkey="&appkey)

'异步提交数据
function PostHTTPPage(url,data)
    dim Http 
    set Http=server.createobject("MSXML2.SERVERXMLHTTP.3.0")
    Http.open "POST",url,false
    Http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    Http.send(data) 
    if Http.readystate<>4 then 
    exit function 
    End if
    PostHTTPPage=bytesToBSTR(Http.responseBody,"UTF-8")
    set http=nothing 
    if err.number<>0 then err.Clear 
End function

'提交数据
dim postdata, strTest
postdata="appid=&appid&"&module="&module&"&city="&city&"&sign="&sign
strTest=PostHTTPPage(apiurl,postdata)

'返回结果
response.write(strTest)
response.end

常见问题

API 接口参数为空

此错误返回 JSON 数据如下:

{
    "result":0,
    "description":"API接口参数为空",
    "flag":"appid:sign"
}

解决方法:
1)请检查 appid 及 sign 是否为空;
2)确保 appid 是从官网获取到正确的接口授权;
3)确保 sign 计算生成是正确的。

API 接口参数无效

此错误返回 JSON 数据如下:

{
    "result":0,
    "description":"API接口参数无效",
    "flag":"appid"
}

解决方法:
1)请检查 appid 是否正确;
2)确保 appid 是从官网获取到正确的接口授权。

API 接口授权已到期

此错误返回 JSON 数据如下:

{
    "result":0,
    "description":"API接口授权已到期",
    "flag":"end:2018-12-31 23:59:59"
}

解决方法:
1)请检查 appid 对应接口授权的期限是否过期;
2)如果接口授权过期,请到官网更新(免费用户直接更新,无需续费)或续费(针对商业付费用户)。

签名错误

此错误返回 JSON 数据如下:

{
    "result":0,
    "description":"签名错误",
    "flag":"getWeatherInfo->sign"
}

解决方法:
1)请检查 sign 签名计算是否正确;
2)签名 sign 根据公式 $sign=sha256(appid=$appid&module=getWeatherInfo&city=$city&appkey=$appkey) 生成;其中:appkey 为授权接口的 AppKey,请填写您在我要查官网上申请到的 AppKey 。

请求受限

此错误返回 JSON 数据如下:

{
    "result":0,
    "description":"请求受限",
    "flag":"getWeatherInfo->daylimit"
}

解决方法:
1)授权接口已超出当前接口产品请求的最大限制;
2)请根据实际使用需求升级您的接口产品。

其他问题

如果您遇到其他的问题,请用以下方式联系我们,我们将为您提供 API 技术对接帮助。

请直接添加 QQ 技术交流群寻求我们帮助。
我要查API技术对接群①:
群号:821884327
扫码加入我要查API技术对接群①: