main.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package main
  2. import (
  3. "ARKItems/util"
  4. "encoding/json"
  5. "fmt"
  6. "io/ioutil"
  7. "os"
  8. "os/exec"
  9. "strconv"
  10. "strings"
  11. "time"
  12. )
  13. func main() {
  14. BatchDownloadImage()
  15. }
  16. func Test() {
  17. //读取内容
  18. readFile, err := ioutil.ReadFile("arkids.json")
  19. if err != nil {
  20. panic(err)
  21. }
  22. arr := make([]util.ArkItemID, 0)
  23. json.Unmarshal(readFile, &arr)
  24. m := make(map[int]int)
  25. for i := range arr {
  26. _, ok := m[arr[i].Page]
  27. if ok {
  28. m[arr[i].Page] += 1
  29. } else {
  30. m[arr[i].Page] = 1
  31. }
  32. }
  33. for i := range m {
  34. fmt.Println("page:", i, " size:", m[i])
  35. }
  36. }
  37. func GetArkIds() {
  38. for i := 0; i < 42; i++ {
  39. var err error
  40. var sign = true
  41. for sign || err != nil {
  42. sign = false
  43. if i == 0 {
  44. err = util.GetArkIds(util.BaseHost, i+1)
  45. } else {
  46. err = util.GetArkIds(util.BaseHost+"/page/"+strconv.FormatInt(int64(i+1), 10), i+1)
  47. }
  48. }
  49. }
  50. file, err := os.OpenFile("arkids.json", os.O_CREATE|os.O_WRONLY, 0666)
  51. if err != nil {
  52. panic(err)
  53. }
  54. defer file.Close()
  55. marshal, err := json.Marshal(util.ArkItemIDs)
  56. if err != nil {
  57. panic(err)
  58. }
  59. file.Write(marshal)
  60. }
  61. var sign = make(chan int)
  62. // BatchDownloadImage 批量下载网络图片
  63. func BatchDownloadImage() {
  64. //读取内容
  65. readFile, err := ioutil.ReadFile("arkids.json")
  66. if err != nil {
  67. panic(err)
  68. }
  69. arr := make([]util.ArkItemID, 0)
  70. json.Unmarshal(readFile, &arr)
  71. for i := range arr {
  72. var item = arr[i]
  73. index := strings.LastIndex(item.ImageURL, "/")
  74. name := item.ImageURL[index+1:]
  75. url := "https://arkids.net" + item.ImageURL
  76. go DownloadImage(url, name)
  77. }
  78. for {
  79. time.Sleep(time.Millisecond * 10)
  80. num := <-sign
  81. if num == len(arr) {
  82. fmt.Println("所有图片下载指令执行完成")
  83. time.Sleep(time.Second * 5)
  84. break
  85. }
  86. }
  87. }
  88. func DownloadImage(url, name string) {
  89. file, err2 := os.OpenFile("file/"+name, os.O_RDONLY, 0666)
  90. if err2 == nil {
  91. file.Close()
  92. //判断文件大小
  93. bytes := make([]byte, 0)
  94. file.Read(bytes)
  95. if len(bytes) == 170 {
  96. fmt.Println("失败的图片:", name, "下载失败")
  97. } else {
  98. num := <-sign
  99. sign <- num + 1
  100. return
  101. }
  102. }
  103. fmt.Println("调用指令", "curl", " -x", " http://127.0.0.1:7890/", " -o", " file/"+name, " ", url)
  104. //调用指令
  105. cmd := exec.Command("curl", "-x", "http://127.0.0.1:7890/", "-o", "file/"+name, url)
  106. // 执行命令
  107. err := cmd.Run()
  108. if err != nil {
  109. fmt.Printf("Error executing curl command: %v\n", err)
  110. return
  111. }
  112. fmt.Println("文件", name, "下载完成")
  113. num := <-sign
  114. sign <- num + 1
  115. }