userHelper.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package utils
  2. import (
  3. "bytes"
  4. "encoding/csv"
  5. "encoding/json"
  6. "fmt"
  7. "log"
  8. "net/http"
  9. "os"
  10. "time"
  11. )
  12. var myClient *http.Client
  13. func Execute(url, method string, pData []byte, headers map[string]string) (result interface{}, err error) {
  14. request, err := http.NewRequest(method, url, bytes.NewBuffer(pData))
  15. if err != nil {
  16. return "NewRequest err>>", err
  17. }
  18. if len(headers) > 0 {
  19. for key, value := range headers {
  20. request.Header.Add(key, value)
  21. }
  22. }
  23. if myClient == nil {
  24. myClient = &http.Client{}
  25. }
  26. response, err := myClient.Do(request)
  27. if err != nil {
  28. return "client.Do err>>", err
  29. }
  30. defer response.Body.Close()
  31. //fmt.Println("response code>>", response.StatusCode)
  32. buff := &bytes.Buffer{}
  33. _, err = buff.ReadFrom(response.Body)
  34. if err != nil {
  35. return "readData err>>", err
  36. }
  37. return buff.Bytes(), nil
  38. }
  39. // 获取当前执行文件所在目录
  40. func GetExeDir() (path string) {
  41. //fPath, _ := os.Executable()
  42. //return filepath.Dir(fPath)
  43. fPath, _ := os.Getwd()
  44. return fPath
  45. }
  46. // 输出文件到根目录 json
  47. func writeJsonFile(pInfos []ProvinceInfo) {
  48. //写json
  49. buff, _ := json.Marshal(pInfos)
  50. fPath := fmt.Sprintf("%s\\json_%s.json", GetExeDir(), time.Now().Format("20060102150405"))
  51. os.WriteFile(fPath, buff, os.ModePerm)
  52. }
  53. // 输出文件到根目录 csv
  54. func writeCsvFile(pInfos []ProvinceInfo) {
  55. // Create a new CSV file
  56. fPath := fmt.Sprintf("%s_民政部统计数据.csv", time.Now().Format("20060102"))
  57. file, err := os.Create(fPath)
  58. if err != nil {
  59. log.Fatal(err)
  60. }
  61. defer file.Close()
  62. // Create a CSV writer
  63. writer := csv.NewWriter(file)
  64. defer writer.Flush()
  65. // Write the CSV header
  66. header := []string{"type", "Province Name", "Province Code", "City Name", "City Code", "Area Name", "Area Code"}
  67. if err := writer.Write(header); err != nil {
  68. log.Fatal(err)
  69. }
  70. // Write data to the CSV file
  71. for _, pInfo := range pInfos {
  72. provinceName := pInfo.Name
  73. provinceCode := pInfo.Code
  74. //province
  75. record := []string{"省份", provinceName, provinceCode}
  76. writer.Write(record)
  77. for _, cInfo := range pInfo.CityInfo {
  78. cityName := cInfo.Name
  79. cityCode := cInfo.Code
  80. record = []string{"城市", provinceName, provinceCode, cityName, cityCode}
  81. writer.Write(record)
  82. for _, aInfo := range cInfo.AreaInfo {
  83. areaName := aInfo.Name
  84. areaCode := aInfo.Code
  85. record = []string{"区县", provinceName, provinceCode, cityName, cityCode, areaName, areaCode}
  86. if err := writer.Write(record); err != nil {
  87. log.Fatal(err)
  88. }
  89. }
  90. }
  91. }
  92. log.Printf("CSV file saved to: %s\n", fPath)
  93. }