index.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. 'use strict'
  2. var fs = require('fs')
  3. var path = require('path')
  4. var spider = require('./spider')
  5. /**
  6. * 输出 JSON 数据
  7. * @Author https://github.com/modood
  8. * @DateTime 2016-10-08 17:16
  9. */
  10. module.exports = {
  11. outputJSON: outputJSON,
  12. provinces: require(path.resolve(__dirname, 'dist/provinces.json')),
  13. cities: require(path.resolve(__dirname, 'dist/cities.json')),
  14. areas: require(path.resolve(__dirname, 'dist/areas.json')),
  15. streets: require(path.resolve(__dirname, 'dist/streets.json')),
  16. address2: require(path.resolve(__dirname, 'dist/address2.json')),
  17. address3: require(path.resolve(__dirname, 'dist/address3.json')),
  18. address4: require(path.resolve(__dirname, 'dist/address4.json'))
  19. }
  20. /**
  21. * 输出 JSON 数据到 dist 目录下
  22. * @author modood <https://github.com/modood>
  23. * @datetime 2016-12-19 16:45
  24. */
  25. function outputJSON () {
  26. spider.getData(function (err, result) {
  27. if (err) return console.log(err)
  28. var provinces = result.provinces
  29. var cities = result.cities
  30. var areas = result.areas
  31. var streets = result.streets
  32. console.log('[1/3] 正在生成 “省份、城市” 二级联动数据...')
  33. var pc = getAddressPC(provinces, cities)
  34. console.log('[2/3] 正在生成 “省份、城市、区县” 三级联动数据...')
  35. var pca = getAddressPCA(provinces, cities, areas)
  36. console.log('[3/3] 正在生成 “省份、城市、区县、乡镇” 四级联动数据...')
  37. var pcas = getAddressPCAS(provinces, cities, areas, streets)
  38. console.log('[1/7] 正在导出 “省份” JSON 数据...')
  39. outputFile('provinces', provinces)
  40. console.log('[2/7] 正在导出 “城市” JSON 数据...')
  41. outputFile('cities', cities)
  42. console.log('[3/7] 正在导出 “区县” JSON 数据...')
  43. outputFile('areas', areas)
  44. console.log('[4/7] 正在导出 “乡镇” JSON 数据...')
  45. outputFile('streets', streets)
  46. console.log('[5/7] 正在导出 “省份、城市”二级联动 JSON 数据...')
  47. outputFile('address2', pc)
  48. console.log('[6/7] 正在导出 “省份、城市、区县”三级联动 JSON 数据...')
  49. outputFile('address3', pca)
  50. console.log('[7/7] 正在导出 “省份、城市、区县、乡镇” 四级联动 JSON 数据...')
  51. outputFile('address4', pcas)
  52. console.log('数据更新完成!')
  53. })
  54. }
  55. /**
  56. * 获取省市二级联动数据
  57. * @Author https://github.com/modood
  58. * @DateTime 2016-10-09 15:25
  59. */
  60. function getAddressPC (provinces, cities) {
  61. var doc = {}
  62. // 过滤三级联动时才有效的名称
  63. var filterName = ['市辖区', '县', '省直辖县级行政区划', '自治区直辖县级行政区划'];
  64. provinces.forEach(function (p) {
  65. doc[p.name] = cities.filter(function (c) {
  66. return p.code === c.parent_code && filterName.every(function(filterName) {
  67. return c.name != filterName;
  68. })
  69. }).map(function (c) {
  70. return c.name
  71. })
  72. })
  73. return doc
  74. }
  75. /**
  76. * 获取省市区三级联动数据
  77. * @Author https://github.com/modood
  78. * @DateTime 2016-10-09 16:00
  79. */
  80. function getAddressPCA (provinces, cities, areas) {
  81. var doc = {}
  82. provinces.forEach(function (p) {
  83. doc[p.name] = {}
  84. cities.filter(function (c) {
  85. return p.code === c.parent_code
  86. }).forEach(function (c) {
  87. doc[p.name][c.name] = areas.filter(function (a) {
  88. return c.code === a.parent_code
  89. }).map(function (a) {
  90. return a.name
  91. })
  92. })
  93. })
  94. return doc
  95. }
  96. /**
  97. * 获取省市区镇四级联动数据
  98. * @Author https://github.com/modood
  99. * @DateTime 2016-10-09 16:09
  100. */
  101. function getAddressPCAS (provinces, cities, areas, streets) {
  102. var doc = {}
  103. provinces.forEach(function (p) {
  104. doc[p.name] = {}
  105. cities.filter(function (c) {
  106. return p.code === c.parent_code
  107. }).forEach(function (c) {
  108. doc[p.name][c.name] = {}
  109. areas.filter(function (a) {
  110. return c.code === a.parent_code
  111. }).forEach(function (a) {
  112. doc[p.name][c.name][a.name] = streets.filter(function (s) {
  113. return a.code === s.parent_code
  114. }).map(function (s) {
  115. return s.name
  116. })
  117. })
  118. })
  119. })
  120. return doc
  121. }
  122. /**
  123. * 输出 JSON 文件
  124. * @Author https://github.com/modood
  125. * @DateTime 2016-10-08 17:16
  126. */
  127. function outputFile (name, data) {
  128. var fileName = 'dist/' + name + '.json'
  129. fs.writeFileSync(path.resolve(__dirname, fileName), JSON.stringify(data))
  130. }