/// <summary> /// 添加新衣物 /// </summary> /// <param name="clothesPic">新衣物照片</param> /// <param name="wardrobeID">衣物所属衣橱ID</param> /// <param name="name">新衣物名称</param> /// <param name="type">新衣物类型</param> /// <param name="thickness">新衣物厚度指数</param> /// <returns></returns> public static bool add(IFormFile clothesPic, int wardrobeID, string name, ClothesType type, int thickness) { //确保衣橱存在 if (!WardrobeManager.exist(wardrobeID)) { return(false); } Clothes clothes = new Clothes(wardrobeID, name, type, thickness); clothes.id = clothesDb.InsertReturnIdentity(clothes); savePic(clothesPic, clothes); TaobaoItem taobaoItem = TaobaoApi.getTaobaoItem(clothes.picPath); //处理购衣推荐 if (taobaoItem != null) { Thread setCommendThread = new Thread(new ParameterizedThreadStart(UserManager.setRecommend_thread)); setCommendThread.Start(new SetRecommendInfo(UserManager.similarUsers(WardrobeManager.user(wardrobeID)), taobaoItem)); //已改为多线程执行 //UserManager.setRecommend(userID,taobaoItem); } return(true); }
protected override async Task <List <TaskData> > ExecuteAsyncInternal(TaobaoGetItemTaskData taskData) { var client = await GetHttpClient(); var url = string.Format(Options.UrlTemplate, taskData.ItemId); var html = await client.GetStringAsync(url); var cq = new CQ(html); var title = cq["#J_Title h3"].Attr("data-title").Trim(); //china url var match = Regex.Match(html, @"descUrl\s*\:\slocation.*(?<url>\/\/.*?)',").Groups["url"]; //world url if (!match.Success) { match = Regex.Match(html, "descUrlSSL\\s*\\:\\s*\"(?<url>\\/\\/.*?)\".*").Groups["url"]; } var descUrl = match.Value; if (descUrl.StartsWith("//")) { descUrl = $"https:{descUrl}"; } var descJsonp = await client.GetStringAsync(descUrl); var descHtml = Regex.Match(descJsonp, @"var\s*desc\s*=\s*'\s*(?<html>[\s\S]*)\s*'\s*;") .Groups["html"].Value; var descCq = new CQ(descHtml); var images = (await Options.GetImageTaskDataFunc(title, descCq)).Cast <TaskData>().ToList(); if (Options.CrawlRecordDbFunc != null) { var db = Options.CrawlRecordDbFunc(); var record = await db.TaobaoItems.FirstOrDefaultAsync(t => t.ItemId == taskData.ItemId); if (record == null) { record = new TaobaoItem { ItemId = taskData.ItemId }; db.Add(record); } record.LastCheckDt = DateTime.Now; await db.SaveChangesAsync(); } return(images); }
protected override async Task HandleInternalUnstatable(TaobaoGetItemTaskData taskData, CancellationToken ct) { var client = await GetHttpClient(); var url = string.Format(Options.Value.UrlTemplate, taskData.ItemId); var html = await client.GetStringAsync(url); var cq = new CQ(html); var title = cq["#J_Title h3"].Attr("data-title").Trim(); //china url var match = Regex.Match(html, @"descUrl\s*\:\slocation.*(?<url>\/\/.*?)',").Groups["url"]; //world url if (!match.Success) { match = Regex.Match(html, "descUrlSSL\\s*\\:\\s*\"(?<url>\\/\\/.*?)\".*").Groups["url"]; } var descUrl = match.Value; if (descUrl.StartsWith("//")) { descUrl = $"https:{descUrl}"; } var descJsonp = await client.GetStringAsync(descUrl); var descHtml = Regex.Match(descJsonp, @"var\s*desc\s*=\s*'\s*(?<html>[\s\S]*)\s*'\s*;") .Groups["html"].Value; var descCq = new CQ(descHtml); var urlList = await ImageUrlListExtractor.ExtractImageUrlList(descCq); var index = 0; var newTaskData = urlList.Select(t => { var filename = $"{index++}_{t.Substring(t.LastIndexOf('/') + 1)}"; if (filename.Contains("?")) { filename = filename.Substring(0, filename.IndexOf('?')); } var data = new DownloadTaskData { RelativeFilename = $"{title}/{filename}", Url = t }; return(data); }).ToList(); if (DbContextProvider != null) { var db = await DbContextProvider.Get(); var record = await db.TaobaoItems.FirstOrDefaultAsync(t => t.ItemId == taskData.ItemId, ct); if (record == null) { record = new TaobaoItem { ItemId = taskData.ItemId }; db.Add(record); } record.LastCheckDt = DateTime.Now; await db.SaveChangesAsync(ct); } await TaskDistributor.Distribute(newTaskData); }