package server import ( "fmt" "net/url" "strconv" "strings" "gitea.timerzz.com/kedaya_haitao/coach-spider/spider" "gitea.timerzz.com/kedaya_haitao/common/pkg/web" v2 "gitea.timerzz.com/kedaya_haitao/common/structs/v2" "github.com/gofiber/fiber/v3" ) type SpiderSvc struct { ctl *spider.Controller providerId v2.ProviderId } func NewSpiderSvc(ctl *spider.Controller, providerId v2.ProviderId) *SpiderSvc { return &SpiderSvc{ ctl: ctl, providerId: providerId, } } func (s *SpiderSvc) Registry(r fiber.Router) { api := r.Group(fmt.Sprintf("/api/v2/provider/%s", s.providerId)) api.Post("pull", s.Pull) api.Post("price/fetch/:id", s.FetchArticlePrice) api.Post("detail/fetch/:pid", s.FetchArticleDetail) api.Post("ats/fetch/:pid", s.FetchArticleAts) api.Get("ats/:pid", s.GetArticleAts) } func (s *SpiderSvc) Pull(ctx fiber.Ctx) error { // 接收到,就爬取数据 go s.ctl.Crawl() return ctx.JSON(web.NewResponse("ok", "ok")) } func (s *SpiderSvc) FetchArticlePrice(ctx fiber.Ctx) error { i := ctx.Params("id") id, _ := strconv.Atoi(i) if id == 0 { return fmt.Errorf("id is empty") } if err := s.ctl.FetchArticlePrice(ctx.Context(), uint(id)); err != nil { return err } return ctx.JSON(web.NewResponse("ok")) } func (s *SpiderSvc) FetchArticleDetail(ctx fiber.Ctx) error { pid, err := url.QueryUnescape(ctx.Params("pid")) if err != nil { return err } pid = strings.ReplaceAll(pid, " ", "-") pid = strings.ReplaceAll(pid, "+", "-") if err = s.ctl.FetchArticleDetail(ctx.Context(), pid); err != nil { return err } return ctx.JSON(web.NewResponse("ok")) } func (s *SpiderSvc) FetchArticleAts(ctx fiber.Ctx) error { pid, err := url.QueryUnescape(ctx.Params("pid")) if err != nil { return err } pid = strings.ReplaceAll(pid, " ", "-") pid = strings.ReplaceAll(pid, "+", "-") if err = s.ctl.FetchArticleAts(ctx.Context(), pid); err != nil { return err } return ctx.JSON(web.NewResponse("ok")) } func (s *SpiderSvc) GetArticleAts(ctx fiber.Ctx) error { pid, err := url.QueryUnescape(ctx.Params("pid")) if err != nil { return err } pid = strings.ReplaceAll(pid, " ", "-") pid = strings.ReplaceAll(pid, "+", "-") ats, err := s.ctl.GetArticleAts(ctx.Context(), pid) if err != nil { return err } return ctx.JSON(web.NewResponse(ats)) } //func (s *SpiderSvc) DelCalculate(ctx fiber.Ctx) error { // idStr := ctx.Params("id") // if idStr == "" { // return fiber.ErrBadRequest // } // id, _ := strconv.Atoi(idStr) // if err := s.ctl.DeleteCalculateProcess(uint(id)); err != nil { // return err // } // return nil //} // //func (s *SpiderSvc) UpsertCalculate(ctx fiber.Ctx) error { // var cs []productv1.CalculateProcess // if err := ctx.Bind().JSON(&cs); err != nil { // return err // } // if err := s.ctl.SaveCalculateProcess(cs); err != nil { // return err // } // return nil //}