123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- 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
- }
|