package main import ( "fmt" "github.com/gin-gonic/gin" "github.com/google/uuid" "io" "log" "net/http" "os" "regexp" ) func getParams(regEx, url string) (paramsMap map[string]string) { var compRegEx = regexp.MustCompile(regEx) match := compRegEx.FindStringSubmatch(url) paramsMap = make(map[string]string) for i, name := range compRegEx.SubexpNames() { if i > 0 && i <= len(match) { paramsMap[name] = match[i] } } return paramsMap } func search(url string) map[string]string { r := "var msg_title = '(?P<title>.+)'.html\\(false\\);[\\s\\S]*var cdn_url_1_1 = \"(?P<cover>http.+)\"" res, err := http.Get(url) if err != nil { log.Fatal(err) } defer func(Body io.ReadCloser) { err := Body.Close() if err != nil { } }(res.Body) if res.StatusCode != 200 { log.Fatalf("status code error: %d %s", res.StatusCode, res.Status) } bodyBytes, err := io.ReadAll(res.Body) html := string(bodyBytes) params := getParams(r, html) fmt.Println(params) return params } func saveImage(imgUrl string, key string) { // Get the data resp, err := http.Get(imgUrl) if err != nil { panic(err) } defer resp.Body.Close() // 创建一个文件用于保存 out, err := os.Create("image/" + key + ".jpg") if err != nil { panic(err) } defer out.Close() // 然后将响应流和文件流对接起来 _, err = io.Copy(out, resp.Body) if err != nil { panic(err) } } func main() { r := gin.Default() r.Use(Cors()) r.StaticFS("/image", http.Dir("image")) r.GET("/fuck", func(c *gin.Context) { url := c.DefaultQuery("url", "url") uid := uuid.New() key := uid.String() m := search(url) saveImage(m["cover"], key) m["cover"] = "https://fuckweixin.songya.xyz/image/" + key + ".jpg" c.JSON(200, gin.H{ "message": "ok", "data": m, }) }) err := r.Run(":52447") if err != nil { return } } // Cors 开启跨域函数 func Cors() gin.HandlerFunc { return func(c *gin.Context) { c.Writer.Header().Set("Access-Control-Allow-Origin", "*") c.Writer.Header().Set("Access-Control-Expose-Headers", "Access-Control-Allow-Origin") c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT") if c.Request.Method == "OPTIONS" { c.AbortWithStatus(204) return } defer func() { if err := recover(); err != nil { } }() c.Next() } }
Go 批量下载微信文章中的图片
67 min read