getInfo.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package utils
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "log"
  6. "strings"
  7. "time"
  8. )
  9. // DoGetInfo 获取民政部 行政区划
  10. func DoGetInfo() {
  11. var pInfos = []ProvinceInfo{}
  12. //暂不包含台湾省的数据
  13. provinces := []string{
  14. "北京市(京):110000",
  15. "天津市(津):120000",
  16. "河北省(冀):130000",
  17. "河北省(冀):130000",
  18. "山西省(晋):140000",
  19. "内蒙古自治区(内蒙古):150000",
  20. "辽宁省(辽):210000",
  21. "吉林省(吉):220000",
  22. "黑龙江省(黑):230000",
  23. "上海市(沪):310000",
  24. "江苏省(苏):320000",
  25. "浙江省(浙):330000",
  26. "安徽省(皖):340000",
  27. "福建省(闽):350000",
  28. "江西省(赣):360000",
  29. "山东省(鲁):370000",
  30. "河南省(豫):410000",
  31. "湖北省(鄂):420000",
  32. "湖南省(湘):430000",
  33. "广东省(粤):440000",
  34. "广西壮族自治区(桂):450000",
  35. "海南省(琼):460000",
  36. "重庆市(渝):500000",
  37. "四川省(川、蜀):510000",
  38. "贵州省(黔、贵):520000",
  39. "云南省(滇、云):530000",
  40. "西藏自治区(藏):540000",
  41. "陕西省(陕、秦):610000",
  42. "甘肃省(甘、陇):620000",
  43. "青海省(青):630000",
  44. "宁夏回族自治区(宁):640000",
  45. "新疆维吾尔自治区(新):650000",
  46. "香港特别行政区(港):810000",
  47. "澳门特别行政区(澳):820000",
  48. }
  49. //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", ",")
  50. //1.遍历省份,获取每个省份下的地级市
  51. for index, province := range provinces {
  52. provinceInfo := strings.Split(province, ":")
  53. var pInfo = ProvinceInfo{}
  54. pInfo.Name = provinceInfo[0]
  55. pInfo.Code = provinceInfo[1]
  56. fmt.Printf("进度: %d/%d 正在查询省份%s...\r\n", (index + 1), len(provinces), province)
  57. citys, err := getRegionInfo(provinceInfo[0], "")
  58. if err != nil {
  59. continue
  60. }
  61. //2. 遍历地级市,获取每个地级市下的区县
  62. //地级市编码
  63. getCitys(citys, provinceInfo[0], &pInfo)
  64. pInfos = append(pInfos, pInfo)
  65. time.Sleep(time.Second * 1)
  66. }
  67. //3. 输出json,csv
  68. //writeJsonFile(pInfos)
  69. writeCsvFile(pInfos)
  70. log.Println("查询完成,已输出json、csv文件到:", GetExeDir())
  71. }
  72. // 获取某个省份下所有城市
  73. func getCitys(citys []map[string]interface{}, province string, pInfo *ProvinceInfo) {
  74. for _, city := range citys {
  75. cName := city["diji"].(string)
  76. cCode := city["quHuaDaiMa"].(string)
  77. var cInfo = CityInfo{}
  78. cInfo.Name = cName
  79. cInfo.Code = cCode
  80. areas, err := getRegionInfo(province, cName)
  81. if err != nil {
  82. continue
  83. }
  84. getAreas(areas, &cInfo)
  85. pInfo.CityInfo = append(pInfo.CityInfo, cInfo)
  86. }
  87. }
  88. // 获取某个城市下所有的区县
  89. func getAreas(areas []map[string]interface{}, cInfo *CityInfo) {
  90. for _, area := range areas {
  91. aName := area["xianji"].(string)
  92. aCode := area["quHuaDaiMa"].(string)
  93. var aInfo = AreaInfo{}
  94. aInfo.Name = aName
  95. aInfo.Code = aCode
  96. cInfo.AreaInfo = append(cInfo.AreaInfo, aInfo)
  97. }
  98. }
  99. func getRegionInfo(province string, city string) (jsonArr []map[string]interface{}, err error) {
  100. url := "http://xzqh.mca.gov.cn/selectJson"
  101. pData := ""
  102. //var myMap map[string] string
  103. // var myMap = make(map[string]string)
  104. if province != "" {
  105. pData = "shengji=" + province
  106. }
  107. if city != "" {
  108. pData += "&diji=" + city
  109. }
  110. var headers = make(map[string]string)
  111. headers["Content-Type"] = "application/x-www-form-urlencoded; charset=utf-8"
  112. resp, err := Execute(url, "POST", ([]byte)(pData), headers)
  113. if err != nil {
  114. log.Println("Execute err>>", err.Error())
  115. return nil, err
  116. }
  117. json.Unmarshal(resp.([]byte), &jsonArr)
  118. //log.Println(jsonArr)
  119. return jsonArr, nil
  120. }