package audiobookspider import ( "fmt" "time" "91porn-server/common/httputil" "91porn-server/common/log" "91porn-server/models/v/audioanchormod" "91porn-server/models/v/audiobookmod" "91porn-server/skd/skdg" ) func SyncDataFromSpider(data []AudioBook) error { dataLen := len(data) if dataLen == 0 { return nil } now := time.Now() la := make([]audiobookmod.AudioBookUpsertEdit, dataLen) laa := make([]audioanchormod.EditSelector, dataLen) for i := range data { temp := audiobookmod.AudioBookUpsertEdit{ Title: data[i].Title, Anchor: data[i].Announcer, Cover: data[i].Cover, FType: data[i].Category, Summary: data[i].Desc, Number: data[i].Id, UpdatedAt: now, } temp.TotalEpisode = len(data[i].EpisodeList) if data[i].Status == 1 { temp.IsActive = true } else { temp.IsActive = false } if data[i].Announcer == "" { temp.IsActive = false } temp.ContentSet = make([]audiobookmod.Content, len(data[i].EpisodeList)) for di := range data[i].EpisodeList { temp.ContentSet[di] = audiobookmod.Content{ EpisodeNumber: di + 1, ListenPermission: 0, Name: data[i].EpisodeList[di].Name, URL: data[i].EpisodeList[di].FileName, MediaSize: data[i].EpisodeList[di].Size, } } temp.TrialSet = make([]audiobookmod.Content, len(data[i].TrialEpisodeList)) for di := range data[i].TrialEpisodeList { temp.TrialSet[di] = audiobookmod.Content{ EpisodeNumber: di + 1, ListenPermission: 3, Name: data[i].TrialEpisodeList[di].Name, URL: data[i].TrialEpisodeList[di].FileName, MediaSize: data[i].TrialEpisodeList[di].Size, } } tempa := audioanchormod.EditSelector{ Name: data[i].Announcer, Avatar: data[i].AnnouncerCover, UpdatedAt: now} la[i] = temp laa[i] = tempa } log.Info("audiobook sync audiobookSpider data committing...") if err := audiobookmod.InsertBulket(la); err != nil { log.Info("audiobook sync audiobookSpider data commit failed.", log.E(err)) return err } if err := audioanchormod.InsertBulket(laa); err != nil { log.Info("audiobook sync audiobookSpider data commit failed.", log.E(err)) return err } log.Info("audiobook sync audiobookSpider data committed.") return nil } type Episode struct { Name string `json:"name" bson:"name" ` //集数名称 Size int64 `json:"size" bson:"size" ` //本集mp3文件大小 FileName string `json:"fileName" bson:"fileName"` //小说文件 } type AudioBook struct { Id int64 `json:"id" bson:"_id"` SpiderId int64 `json:"spiderId" bson:"spiderId"` //爬虫库的表Id Timestamp int64 `json:"timestamp" bson:"timestamp" ` //时间戳 Title string `json:"title" bson:"title"` //标题 Announcer string `json:"announcer" bson:"announcer"` //播音员 Category string `json:"category" bson:"category"` //分类 Desc string `json:"desc" bson:"desc"` //描述 Cover string `json:"cover" bson:"cover" ` //封面 AnnouncerCover string `json:"announcerCover"` //播音员封面 EpisodeList []Episode `json:"episodeList" bson:"episodeList" ` //集数列表 TrialEpisodeList []Episode `json:"trialEpisodeList" bson:"trialEpisodeList"` //试听集数列表 Status int `json:"status" bson:"status"` //状态 1:上架 2:下架 CreatedAt time.Time `json:"createdAt" bson:"createdAt" ` //创建时间 UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt" ` //更新时间 } // /api/stat/novel/audio/sync POST type SyncAudioBookReq struct { SyncSize int64 `json:"syncSize" binding:"required"` StartTime time.Time `json:"startTime" binding:"required"` } type SyncAudioBookResp struct { Data []AudioBook `json:"data"` } // todo skd // 获取ES同步数据 func GetListByUpdateTimeRange_net(start time.Time, end time.Time) (data []AudioBook, err error) { p := SyncAudioBookReq{ SyncSize: 10000, StartTime: start, } var msg struct { Code int `json:"code"` Data SyncAudioBookResp `json:"data"` } url := skdg.Conf.Url.SpiderDataURL + "/api/stat/novel/audio/sync" code, err := httputil.DefaultClientPostJsonWithResp(&msg, url, nil, p) if err != nil || code != 200 { log.Error(fmt.Sprintf("[METHOD-%s]==> %s fail error:%+v:", "GetListByUpdateTimeRange_net", "POSTJsonWithJResp", err), log.Any("start", start), log.Any("url", end), log.Any("code", code), ) return } if msg.Code != 200 { log.Error(fmt.Sprintf("[METHOD-%s]==> %s fail error:%+v:", "GetListByUpdateTimeRange_net", "GetWithJResp", err), log.Any("start", start), log.Any("url", end), log.Any("code", code), log.Any("msg", msg), ) return } data = msg.Data.Data return }