ts實例應用之通過城市的citycode獲取天氣數據(邏輯)

授人以魚不如授人以漁
這裏只講邏輯(僞代碼),不寫代碼。

需求:獲取天氣數據

//條件:
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)  
   }   
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章