ts实例应用之通过城市的citycode获取天气数据(逻辑)

本文介绍了一种通过API获取特定城市天气数据的方法。首先获取所有地区信息,然后根据上级ID获取下级地区列表,接着根据城市名称找到对应的城市编码,最后构造正确的URL并调用API获取天气数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

授人以鱼不如授人以渔
这里只讲逻辑(伪代码),不写代码。

需求:获取天气数据

//条件:
var appkey='xxxxxx';
var url='https://way.jd.com/jisuapi/weather?city=xxx&cityid=xxxx&citycode=xx&appkey=appkey';

则需要:city cityid citycode

第一步:获取所有的地区信息,这样就可以城市级联了

var url='https://way.jd.com/jisuapi/weather1?appkey=9b066f875202e509f662b86efdc990d8';

//将获取到的信息存到一个districts变量里面
var districts=http.get(url);

//通常一个城市对象的数据结构是这样的
district={
    citycode:'101010100',
    city:'北京',
    cityid:'1',
    parentid:'0'
}

citycode:城市编号,如果是省份则该属性为空;
city:城市的名称;
cityid:城市id
parentid:表示它的上一级的cityid,为0,则代表没有上一级,则是直辖市或者省份;

若一个地区对象恰好citycode为空,且parentid为0,则该对象一定是省份
例如:

province={                   city={           
    "citycode":"",           "citycode":"101220601"   
    "city":"安徽",                "city":"安庆", 
    "cityid":"2",                "cityid":"35",
    "parentid":"0"               "parentid":"2"
},                           }

安徽是省所以citycode为空;安庆是安徽的市,所以安庆的parentid是安徽的cityid。

第二步:通过传入parentid获取所有parentid相同的地区信息

传入parenid=0,则是获取所有的省份、直辖市
传入parentid为81,即获取cityid=81(惠州),所有的县、区
getSubdistricts(districtid: string): Promise<Array<DistrictInfo>> {
    return new Promise((resolve, reject) => {
        this.getDistrictInfos()
        .then(() => {
         this.wxDistrictInfos.forEach(
               districtinfo => {
                   if (districtinfo.parentid === districtid) {
                        subdistricts.push(districtinfo);
                    }
                });
            resolve(subdistricts);
        })
        .catch(() => reject()
    );
});

第三步:通过城市名获取citycode

getCityObj(cityName){
    //....
    var obj={
        "citycode":"xxx",
        "city":"xxx", 
        "cityid":"xxx", 
        "parentid":"xxx"
    }
    return obj;
}

第四步:返回正确格式的url

getUrl( cityObj ){
        return 'https://way.jd.com/jisuapi/weather?
        + 'city=' + district.city
        + '&cityid=' + district.cityid
        + '&citycode=' + district.citycode
        + '&appkey=9b066f875202e509f662b86efdc990d8';
}

第五步:通过城市对象获取天气数据

getWeather( cityObj){
   this.get( getUrl (cityObj).then(res=>{ 
       console.log( res)  
   }   
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值