package utils import ( "encoding/json" "fmt" "log" "strings" "time" ) // DoGetInfo 获取民政部 行政区划 func DoGetInfo() { var pInfos = []ProvinceInfo{} //暂不包含台湾省的数据 provinces := []string{ "北京市(京):110000", "天津市(津):120000", "河北省(冀):130000", "河北省(冀):130000", "山西省(晋):140000", "内蒙古自治区(内蒙古):150000", "辽宁省(辽):210000", "吉林省(吉):220000", "黑龙江省(黑):230000", "上海市(沪):310000", "江苏省(苏):320000", "浙江省(浙):330000", "安徽省(皖):340000", "福建省(闽):350000", "江西省(赣):360000", "山东省(鲁):370000", "河南省(豫):410000", "湖北省(鄂):420000", "湖南省(湘):430000", "广东省(粤):440000", "广西壮族自治区(桂):450000", "海南省(琼):460000", "重庆市(渝):500000", "四川省(川、蜀):510000", "贵州省(黔、贵):520000", "云南省(滇、云):530000", "西藏自治区(藏):540000", "陕西省(陕、秦):610000", "甘肃省(甘、陇):620000", "青海省(青):630000", "宁夏回族自治区(宁):640000", "新疆维吾尔自治区(新):650000", "香港特别行政区(港):810000", "澳门特别行政区(澳):820000", } //provinces := strings.Split("北京市(京):110000,天津市(津):120000,天津市(津):120000,上海市(沪):310000,江苏省(苏):320000,浙江省(浙):330000,安徽省(皖):340000,福建省(闽):350000,江西省(赣):360000,山东省(鲁):370000,河南省(豫):410000,湖北省(鄂):420000,湖南省(湘):430000,广东省(粤):440000,广西壮族自治区(桂):450000,海南省(琼):460000,重庆市(渝):500000,四川省(川、蜀):510000,贵州省(黔、贵):520000,云南省(滇、云):530000,西藏自治区(藏):540000,陕西省(陕、秦):610000,甘肃省(甘、陇):620000,青海省(青):630000,宁夏回族自治区(宁):640000,新疆维吾尔自治区(新):650000,香港特别行政区(港):810000,澳门特别行政区(澳):820000", ",") //1.遍历省份,获取每个省份下的地级市 for index, province := range provinces { provinceInfo := strings.Split(province, ":") var pInfo = ProvinceInfo{} pInfo.Name = provinceInfo[0] pInfo.Code = provinceInfo[1] fmt.Printf("进度: %d/%d 正在查询省份%s...\r\n", (index + 1), len(provinces), province) citys, err := getRegionInfo(provinceInfo[0], "") if err != nil { continue } //2. 遍历地级市,获取每个地级市下的区县 //地级市编码 getCitys(citys, provinceInfo[0], &pInfo) pInfos = append(pInfos, pInfo) time.Sleep(time.Second * 1) } //3. 输出json,csv //writeJsonFile(pInfos) writeCsvFile(pInfos) log.Println("查询完成,已输出json、csv文件到:", GetExeDir()) } // 获取某个省份下所有城市 func getCitys(citys []map[string]interface{}, province string, pInfo *ProvinceInfo) { for _, city := range citys { cName := city["diji"].(string) cCode := city["quHuaDaiMa"].(string) var cInfo = CityInfo{} cInfo.Name = cName cInfo.Code = cCode areas, err := getRegionInfo(province, cName) if err != nil { continue } getAreas(areas, &cInfo) pInfo.CityInfo = append(pInfo.CityInfo, cInfo) } } // 获取某个城市下所有的区县 func getAreas(areas []map[string]interface{}, cInfo *CityInfo) { for _, area := range areas { aName := area["xianji"].(string) aCode := area["quHuaDaiMa"].(string) var aInfo = AreaInfo{} aInfo.Name = aName aInfo.Code = aCode cInfo.AreaInfo = append(cInfo.AreaInfo, aInfo) } } func getRegionInfo(province string, city string) (jsonArr []map[string]interface{}, err error) { url := "http://xzqh.mca.gov.cn/selectJson" pData := "" //var myMap map[string] string // var myMap = make(map[string]string) if province != "" { pData = "shengji=" + province } if city != "" { pData += "&diji=" + city } var headers = make(map[string]string) headers["Content-Type"] = "application/x-www-form-urlencoded; charset=utf-8" resp, err := Execute(url, "POST", ([]byte)(pData), headers) if err != nil { log.Println("Execute err>>", err.Error()) return nil, err } json.Unmarshal(resp.([]byte), &jsonArr) //log.Println(jsonArr) return jsonArr, nil }