index.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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. provinces.forEach(function (p) {
  63. doc[p.name] = cities.filter(function (c) {
  64. return p.code === c.parent_code
  65. }).map(function (c) {
  66. return c.name
  67. })
  68. })
  69. return doc
  70. }
  71. /**
  72. * 获取省市区三级联动数据
  73. * @Author https://github.com/modood
  74. * @DateTime 2016-10-09 16:00
  75. */
  76. function getAddressPCA (provinces, cities, areas) {
  77. var doc = {}
  78. provinces.forEach(function (p) {
  79. doc[p.name] = {}
  80. cities.filter(function (c) {
  81. return p.code === c.parent_code
  82. }).forEach(function (c) {
  83. doc[p.name][c.name] = areas.filter(function (a) {
  84. return c.code === a.parent_code
  85. }).map(function (a) {
  86. return a.name
  87. })
  88. })
  89. })
  90. return doc
  91. }
  92. /**
  93. * 获取省市区镇四级联动数据
  94. * @Author https://github.com/modood
  95. * @DateTime 2016-10-09 16:09
  96. */
  97. function getAddressPCAS (provinces, cities, areas, streets) {
  98. var doc = {}
  99. provinces.forEach(function (p) {
  100. doc[p.name] = {}
  101. cities.filter(function (c) {
  102. return p.code === c.parent_code
  103. }).forEach(function (c) {
  104. doc[p.name][c.name] = {}
  105. areas.filter(function (a) {
  106. return c.code === a.parent_code
  107. }).forEach(function (a) {
  108. doc[p.name][c.name][a.name] = streets.filter(function (s) {
  109. return a.code === s.parent_code
  110. }).map(function (s) {
  111. return s.name
  112. })
  113. })
  114. })
  115. })
  116. return doc
  117. }
  118. /**
  119. * 输出 JSON 文件
  120. * @Author https://github.com/modood
  121. * @DateTime 2016-10-08 17:16
  122. */
  123. function outputFile (name, data) {
  124. var fileName = 'dist/' + name + '.json'
  125. fs.writeFileSync(path.resolve(__dirname, fileName), JSON.stringify(data))
  126. }