ReadARKID.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package util
  2. import (
  3. "bytes"
  4. "fmt"
  5. "github.com/PuerkitoBio/goquery"
  6. "io/ioutil"
  7. "log"
  8. "net/http"
  9. "net/url"
  10. )
  11. var BaseHost = "https://arkids.net/items"
  12. const ProxyHost = "http://127.0.0.1:7890"
  13. var ArkItemIDs = make([]ArkItemID, 0)
  14. func GetArkIds(u string, page int) error {
  15. fmt.Println("page:", u)
  16. req, err := http.NewRequest("GET", u, nil)
  17. if err != nil {
  18. log.Fatalf("创建请求失败: %v", err)
  19. return err
  20. }
  21. proxy, err := url.Parse(ProxyHost)
  22. if err != nil {
  23. log.Fatalf("Failed to parse proxy URL: %v", err)
  24. return err
  25. }
  26. transport := &http.Transport{
  27. Proxy: http.ProxyURL(proxy),
  28. }
  29. client := &http.Client{Transport: transport}
  30. resp, err := client.Do(req)
  31. if err != nil {
  32. log.Fatalf("发送请求失败: %v", err)
  33. return err
  34. }
  35. defer resp.Body.Close()
  36. responseBody, err := ioutil.ReadAll(resp.Body)
  37. if err != nil {
  38. log.Fatalf("读取响应正文失败: %v", err)
  39. return err
  40. }
  41. // 使用 goquery 解析 HTML 内容
  42. doc, err := goquery.NewDocumentFromReader(bytes.NewReader(responseBody))
  43. if err != nil {
  44. log.Fatalf("解析 HTML 失败: %v", err)
  45. return err
  46. }
  47. var sign = 0
  48. // 查找所有 <h1> 标签并打印内容
  49. doc.Find("tr").Each(func(index int, item *goquery.Selection) {
  50. sign += 1
  51. aii := ArkItemID{}
  52. //ret, _ := item.Html()
  53. item.Find("img").Each(func(index int, img *goquery.Selection) {
  54. if img.AttrOr("data-src", "") != "" {
  55. aii.ImageURL = img.AttrOr("data-src", "")
  56. }
  57. })
  58. item.Find(".w-25 a").Each(func(index int, name *goquery.Selection) {
  59. aii.Name = name.Text()
  60. })
  61. item.Find(".ts.cbl").Each(func(index int, name *goquery.Selection) {
  62. aii.ID = name.Text()
  63. })
  64. item.Find(".cbl").Each(func(index int, name *goquery.Selection) {
  65. aii.Command = name.Text()
  66. })
  67. aii.Page = page
  68. ArkItemIDs = append(ArkItemIDs, aii)
  69. //fmt.Println(aii.String())
  70. })
  71. return nil
  72. }
  73. type ArkItemID struct {
  74. ID string `json:"id"` // id
  75. Name string `json:"name"` // 名称
  76. ImageURL string `json:"image_url"` // 图片地址
  77. Command string `json:"command"` // 命令
  78. Page int `json:"page"` // 页码
  79. }
  80. func (a ArkItemID) String() string {
  81. return fmt.Sprint("ID:", a.ID, " Name:", a.Name, " Img:", a.ImageURL, " Command:", a.Command, " Page:", a.Page)
  82. }