您的位置:首页 > 其它

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

2017-09-29 11:09 633 查看
授人以鱼不如授人以渔

这里只讲逻辑(伪代码),不写代码。

需求:获取天气数据

//条件:
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)
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐