/// <summary> /// 下载简历 /// </summary> /// <param name="host"></param> /// <param name="data"></param> /// <returns></returns> private static bool DownloadResume(string host, ResumeComplete data) { var dataResult = new DataResult(); MessageSubjectEnum messageSubjectEnum = 0; if (data.MatchPlatform == (short)MatchPlatform.FenJianLi) { messageSubjectEnum = MessageSubjectEnum.FenJianLi; dataResult = Platform.FenJianLi.DownloadResumeSpider.DownloadResume(data, host); } if (data.MatchPlatform == (short)MatchPlatform.ZhaoPinGou) { messageSubjectEnum = MessageSubjectEnum.ZhaoPinGou; dataResult = Platform.ZhaoPinGou.DownloadResumeSpider.DownloadResume(data, host); } if (dataResult == null) { return(false); } if (!dataResult.IsSuccess) { switch (dataResult.Code) { case ResultCodeEnum.ProxyDisable: LogFactory.Info($"Host:{host} 代理失效!", messageSubjectEnum); return(false); case ResultCodeEnum.NoUsers: LogFactory.Info($"Host:{host} 对应的Host没有可用用户用于下载简历!{dataResult.ErrorMsg}", messageSubjectEnum); return(false); case ResultCodeEnum.WebNoConnection: LogFactory.Warn("网站无法建立链接!", MessageSubjectEnum.FenJianLi); return(true); default: LogFactory.Warn($"下载简历异常!异常消息:{dataResult.ErrorMsg} ", messageSubjectEnum); return(false); } } LogFactory.Info($"简历补全成功!ResumeId:{data.ResumeId}", messageSubjectEnum); return(true); }
/// <summary> /// 招聘狗旧库过滤 /// </summary> /// <param name="resume"></param> /// <returns></returns> private static bool Filer(ResumeComplete resume) { var resumes = new List <ResumeComplete>(); resumes.Add(resume); resumes = ResumeFiler.ZhaoPinGou(resumes); // 过滤已有的招聘狗简历 if (!resumes.Any()) { return(true); } return(false); }
public static DataResult DownloadResume(ResumeComplete data, string host) { var dataResult = new DataResult <string>(); dataResult.IsSuccess = false; CookieContainer cookie; Next: var result = GetUser(userDictionary, host, false, MatchPlatform.FenJianLi, Login, out cookie); if (!result.IsSuccess) { dataResult.IsSuccess = false; dataResult.Code = result.Code; dataResult.ErrorMsg = result.ErrorMsg; return(dataResult); } var user = result.Data; if (string.IsNullOrWhiteSpace(user.FolderCode)) { dataResult = GetFolderId(cookie, host); if (!dataResult.IsSuccess) { return(dataResult); } user.FolderCode = dataResult.Data; } var unLockResult = UnLockResume(cookie, user, data.MatchResumeId, host, user.FolderCode); using (var db = new ResumeMatchDBEntities()) { var resumeEntity = db.ResumeComplete.FirstOrDefault(f => f.Id == data.Id); if (resumeEntity == null) { LogFactory.Warn($"找不到简历!Id:{data.Id}", MessageSubjectEnum.FenJianLi); return(dataResult); } var userEntity = db.User.FirstOrDefault(f => f.Id == user.Id); if (userEntity == null) { LogFactory.Warn($"找不到用户!用户:{user.Email}", MessageSubjectEnum.FenJianLi); db.TransactionSaveChanges(); return(dataResult); } userEntity.FolderCode = user.FolderCode; if (!unLockResult.IsSuccess) { resumeEntity.Status = 5; if (unLockResult.Code == ResultCodeEnum.NoDownloadNumber) { user.DownloadNumber = 0; userEntity.DownloadNumber = 0; resumeEntity.Status = 2; user.LastLoginTime = DateTime.UtcNow; userEntity.LastLoginTime = DateTime.UtcNow; db.TransactionSaveChanges(); goto Next; } db.TransactionSaveChanges(); return(unLockResult); } resumeEntity.DownloadTime = DateTime.UtcNow; resumeEntity.Status = 4; resumeEntity.UserId = user.Id; user.DownloadNumber--; if (user.DownloadNumber == 0) { userEntity.LastLoginTime = DateTime.UtcNow; } userEntity.DownloadNumber = user.DownloadNumber; var id = data.MatchResumeId.Substring(0, data.MatchResumeId.IndexOf("/", StringComparison.Ordinal)); dataResult = ResumeDetailSpider(id, cookie, host); if (!dataResult.IsSuccess) { resumeEntity.Status = 7; dataResult.ErrorMsg = "获取简历详情异常!"; dataResult.IsSuccess = false; db.TransactionSaveChanges(); return(dataResult); } var jObject = JsonConvert.DeserializeObject(dataResult.Data) as JObject; if (jObject == null) { resumeEntity.Status = 7; dataResult.ErrorMsg = "简历反序列化异常!"; dataResult.IsSuccess = false; SaveFile(id, dataResult.Data, user.Email); db.TransactionSaveChanges(); return(dataResult); } var email = (string)jObject["contact"]?["email"]; var cellphone = (string)jObject["contact"]?["mobile"]; if (cellphone == null) { resumeEntity.Status = 7; LogFactory.Warn($"补全简历异常!电话为空,ResumeId:{data.ResumeId}", MessageSubjectEnum.FenJianLi); SaveFile(id, dataResult.Data, user.Email); db.TransactionSaveChanges(); dataResult.IsSuccess = false; return(dataResult); } resumeEntity.PostBackStatus = 2; resumeEntity.Status = 6; var matchedResult = new List <ResumeMatchResult> { new ResumeMatchResult { ResumeNumber = data.ResumeNumber, Cellphone = cellphone, Email = email, Status = 2 } }; SaveFile(id, dataResult.Data, user.Email); if (ApiBase.PostResumes(matchedResult)) { resumeEntity.PostBackStatus = 1; } resumeEntity.Email = email; resumeEntity.Cellphone = cellphone; db.TransactionSaveChanges(); dataResult.IsSuccess = true; } return(dataResult); }
public static DataResult DownloadResume(ResumeComplete data, string host) { if (Filer(data)) { return(new DataResult()); } var dataResult = new DataResult <string>(); dataResult.IsSuccess = false; CookieContainer cookie; Next: var result = GetUser(userDictionary, host, false, MatchPlatform.ZhaoPinGou, Login, out cookie); if (!result.IsSuccess) { dataResult.IsSuccess = false; dataResult.Code = result.Code; dataResult.ErrorMsg = result.ErrorMsg; return(dataResult); } var user = result.Data; var userToken = cookie.GetCookies(new Uri("http://qiye.zhaopingou.com/"))["hrkeepToken"]; if (string.IsNullOrWhiteSpace(user.FolderCode)) { dataResult = GetFolderId(cookie, user, userToken?.Value, data.MatchResumeId, host); if (!dataResult.IsSuccess) { return(dataResult); } user.FolderCode = dataResult.Data; } var unLockResult = UnLockResume(cookie, user, userToken?.Value, data.MatchResumeId, host, user.FolderCode); using (var db = new ResumeMatchDBEntities()) { var resumeEntity = db.ResumeComplete.FirstOrDefault(f => f.Id == data.Id); if (resumeEntity == null) { LogFactory.Warn($"找不到简历!Id:{data.Id}", MessageSubjectEnum.ZhaoPinGou); return(dataResult); } var userEntity = db.User.FirstOrDefault(f => f.Id == user.Id); if (userEntity == null) { LogFactory.Warn($"找不到用户!用户:{user.Email}", MessageSubjectEnum.ZhaoPinGou); db.TransactionSaveChanges(); return(dataResult); } userEntity.FolderCode = user.FolderCode; if (!unLockResult.IsSuccess) { resumeEntity.Status = 5; if (unLockResult.Code == ResultCodeEnum.NoDownloadNumber) { var userTemp = user; var users = userDictionary.Keys.Where(f => f.Email == userTemp.Email); foreach (var item in users) { userDictionary.TryRemove(item, out cookie); } user.DownloadNumber = 0; userEntity.DownloadNumber = 0; resumeEntity.Status = 2; user.LastLoginTime = DateTime.UtcNow; userEntity.LastLoginTime = DateTime.UtcNow; db.TransactionSaveChanges(); goto Next; } db.TransactionSaveChanges(); return(unLockResult); } resumeEntity.DownloadTime = DateTime.UtcNow; resumeEntity.Status = 4; resumeEntity.UserId = user.Id; user.DownloadNumber--; if (user.DownloadNumber == 0) { userEntity.LastLoginTime = DateTime.UtcNow; } userEntity.DownloadNumber = user.DownloadNumber; dataResult = ResumeDetailSpider(data.MatchResumeId, cookie, host, userToken?.Value); if (!dataResult.IsSuccess) { resumeEntity.Status = 7; db.TransactionSaveChanges(); return(dataResult); } var resumeHtml = dataResult.Data; var cellphone = Regex.IsMatch(resumeHtml, "(?s)电话:</label>(\\d+)</p>") ? Regex.Match(resumeHtml, "(?s)电话:</label>(\\d+)</p>").Result("$1") : null; if (cellphone == null) { resumeEntity.Status = 7; LogFactory.Warn($"补全简历异常!电话为空,ResumeId:{data.ResumeId}", MessageSubjectEnum.ZhaoPinGou); db.TransactionSaveChanges(); return(dataResult); } var email = Regex.IsMatch(resumeHtml, "(?s)邮箱:</label>(.+?)</p>") ? Regex.Match(resumeHtml, "(?s)邮箱:</label>(.+?)</p>").Result("$1") : null; var name = Regex.IsMatch(resumeHtml, "(?s)'resumeb-head-top'><h2>(.+?)</h2><p>") ? Regex.Match(resumeHtml, "(?s)'resumeb-head-top'><h2>(.+?)</h2><p>").Result("$1") : null; resumeEntity.PostBackStatus = 2; resumeEntity.Status = 6; if (resumeEntity.Name.Trim() == name?.Trim()) { var matchedResult = new List <ResumeMatchResult>(); matchedResult.Add(new ResumeMatchResult { ResumeNumber = data.ResumeNumber, Cellphone = cellphone, Email = email, Status = 2 }); if (ApiBase.PostResumes(matchedResult)) { resumeEntity.PostBackStatus = 1; } } else { LogFactory.Warn($"姓名校验异常!库中简历姓名:{resumeEntity.Name},下载简历姓名:{name}"); resumeEntity.Name += $"_{name}"; resumeEntity.PostBackStatus = 0; resumeEntity.Status = 8; } resumeEntity.Email = email; resumeEntity.Cellphone = cellphone; db.TransactionSaveChanges(); dataResult.IsSuccess = true; } return(dataResult); }