コード例 #1
0
        private static string userEmail = string.Empty; // 创建的随机邮箱

        /// <summary>
        /// 注册
        /// </summary>
        private void Register()
        {
            string inviteCode = "861666925";// string.Empty;

            using (var db = new ResumeRepairDBEntities())
            {
                var pin101 = db.Pin101.Where(w => w.IsEnable && w.IsActivation && !string.IsNullOrEmpty(w.InviteCode)).OrderBy(o => o.Integral).FirstOrDefault();

                if (pin101 != null)
                {
                    inviteCode = pin101.InviteCode;
                }
            }

            // GET 注册页面

            string password = DateTime.Now.ToString("yyyyMMddHHmmss");

            string username = password + Global.Email.Substring(Global.Email.IndexOf("@"));

            string url = "http://101pin.com/home/user/register";

            string param = $"username2={username}&password2={password}&showpassword=请设置密码&protocal2=on&reg_flag=2&invitecode={inviteCode}&invitefrom=1";

            // 发送注册请求

            var sources = RequestFactory.QueryRequest(url, param, RequestEnum.POST, cookie, referer: "http://101pin.com/Home/User/register/invite/" + inviteCode);

            if (!sources.Contains("激活邮件已发送至你的邮箱"))
            {
                throw new RequestException($"注册请求失败!响应数据:{sources}");
            }

            userEmail = username;

            using (var db = new ResumeRepairDBEntities())
            {
                db.Pin101.Add(new Pin101
                {
                    Email          = userEmail,
                    PassWord       = userEmail.Substring(0, 14),
                    CreateTime     = DateTime.UtcNow,
                    IsEnable       = true,
                    Integral       = 0,
                    IsActivation   = false,
                    IsVerification = false,
                    IsLocked       = false,
                    InviteCode     = ""
                });

                db.SaveChanges();
            }

            Pin101Scheduling.ssf.SetText(Pin101Scheduling.ssf.fjl_tbx_RegisterActivation, $"注册成功!邮箱:{userEmail}");
        }
コード例 #2
0
        /// <summary>
        /// 登录获取积分
        /// </summary>
        /// <returns></returns>
        private DataResult Login()
        {
            var dataResult = new DataResult();

            using (var db = new ResumeRepairDBEntities())
            {
                var dateTime = DateTime.UtcNow.Date;

                var users = db.FenJianLi.Where(w => w.IsActivation && (w.LastLoginTime == null || w.LastLoginTime < dateTime)).Take(3).ToList();

                foreach (var user in users)
                {
                    var param = $"username={user.Email}&password={user.PassWord}&rememberMe=1";

                    var sources = RequestFactory.QueryRequest("http://www.fenjianli.com/login/login.htm", param, RequestEnum.POST, cookie);

                    if (!sources.Contains("success"))
                    {
                        dataResult.IsSuccess = false;

                        dataResult.ErrorMsg += $"帐号:{user.Email} 登录失败!{Environment.NewLine}响应源:{sources}";

                        continue;
                    }

To:

                    Thread.Sleep(1000);

                    sources = RequestFactory.QueryRequest("http://www.fenjianli.com/search/home.htm", cookieContainer: cookie);

                    if (string.IsNullOrWhiteSpace(sources))
                    {
                        goto To;
                    }

                    var integralStr = Regex.Match(sources, ">.(\\d+)</a>个积分").Result("$1");

                    user.LastLoginTime = DateTime.UtcNow;

                    user.Integral = Convert.ToInt32(integralStr);

                    FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.fjl_tbx_LoginCheckIn, $"登录成功!账户:{user.Email},积分:{integralStr}");
                }

                db.SaveChanges();
            }

            //FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.fjl_tbx_LoginCheckIn, $"刷新积分成功!");

            return(new DataResult());
        }
コード例 #3
0
        /// <summary>
        /// 登录获取积分
        /// </summary>
        private DataResult Login()
        {
            var dataResult = new DataResult();

            using (var db = new ResumeRepairDBEntities())
            {
                var dateTime = DateTime.UtcNow.Date;

                var users = db.Pin101.Where(w => w.IsActivation && (w.LastLoginTime == null || w.LastLoginTime < dateTime)).Take(3).ToList();

                foreach (var user in users)
                {
                    cookie = Login(user.Email, user.PassWord);

To:

                    Thread.Sleep(1000);

                    var sources = RequestFactory.QueryRequest("http://www.101pin.com/home/score/invite", cookieContainer: cookie);

                    if (string.IsNullOrWhiteSpace(sources))
                    {
                        goto To;
                    }

                    var integralStr = Regex.Match(sources, "剩余下载数:<strong>(\\d+)</strong>")?.Result("$1");

                    if (string.IsNullOrWhiteSpace(integralStr))
                    {
                        dataResult.IsSuccess = false;

                        dataResult.ErrorMsg += $"帐号:{user.Email} 获取积分失败!{Environment.NewLine}";

                        continue;
                    }

                    var inviteStr = Regex.Match(sources, "/invite/(\\d+)").Result("$1");

                    user.LastLoginTime = DateTime.UtcNow;

                    user.InviteCode = inviteStr;

                    user.Integral = Convert.ToInt32(integralStr);

                    Pin101Scheduling.ssf.SetText(Pin101Scheduling.ssf.fjl_tbx_LoginCheckIn, $"登录成功!账户:{user.Email},积分:{integralStr},邀请码:{inviteStr}");
                }

                db.SaveChanges();
            }

            return(new DataResult());
        }
コード例 #4
0
        public override DataResult Init()
        {
            var dataResult = new DataResult();

            try
            {
                using (var db = new ResumeRepairDBEntities())
                {
                    var dateNow = DateTime.UtcNow.AddDays(-1);

                    if (isFirst)
                    {
                        if (actionBlock.InputCount == 0)
                        {
                            var resumes = db.ResumeRecord.Where(w => (w.PostBackStatus == 0 || w.PostBackStatus == 2) && w.Status == (short)ResumeRecordStatus.MatchSuccess).OrderByDescending(o => o.CreateTime).Take(50).ToList();

                            foreach (var item in resumes)
                            {
                                actionBlock.Post(item.MatchResumeId);
                            }
                        }

                        isFirst = false;
                    }

                    var users = db.FenJianLi.Where(w => w.IsEnable && w.IsActivation && w.IsVerification && w.Integral > 5 && (!w.IsLocked || w.LockedTime < dateNow)).OrderBy(o => o.VerificationAccount).ToList();
                    //var users = db.FenJianLi.Where(w => w.IsEnable && w.IsActivation && w.Integral > 5 && w.IsVerification && (!w.IsLocked || w.LockedTime < dateNow)).ToList();

                    if (users != null)
                    {
                        users.ForEach(f =>
                        {
                            f.IsLocked   = true;
                            f.LockedTime = DateTime.UtcNow;
                            queue.Enqueue(f);
                        });
                    }

                    db.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                dataResult.IsSuccess = false;

                dataResult.ErrorMsg = $"异常信息:{ex.Message},堆栈信息:{ex.StackTrace}";
            }

            return(dataResult);
        }
コード例 #5
0
        /// <summary>
        /// 下载简历
        /// </summary>
        /// <param name="ids"></param>
        /// <param name="folderCatalogId"></param>
        /// <returns></returns>
        private static int DownloadResume(string ids, string folderCatalogId, EntityFramework.FenJianLi user)
        {
            var cookie = Login(user.Email, user.PassWord);

            var param = $"ids={ids}&folderCatalogId={folderCatalogId}&folderCatalogType=Download&type=add&isResumeId=true&_random={new Random().NextDouble()}";

            string html = RequestFactory.QueryRequest("http://www.fenjianli.com/userResumeDetail/addToFolderCatalog.htm", param, RequestEnum.POST, cookie);

            if (string.IsNullOrEmpty(html))
            {
                throw new RequestException($"下载简历失败!响应为空!,帐号:{user.Email}");
            }

            if (html.Contains("用户可用下载点不足"))
            {
                return(1);
            }

            if (html.Contains("渠道账号"))
            {
                return(2);
            }

            if (!html.Contains("成功"))
            {
                throw new RequestException($"下载简历失败!响应:{html},帐号:{user.Email}");
            }

            using (var db = new ResumeRepairDBEntities())
            {
                var fenJianLi = db.FenJianLi.FirstOrDefault(f => f.Email == user.Email);

                if (fenJianLi != null)
                {
                    fenJianLi.Integral -= 3;
                }

                if (fenJianLi != null)
                {
                    fenJianLi.IsLocked = false;
                }

                db.SaveChanges();
            }

            return(0);
        }
コード例 #6
0
        /// <summary>
        /// 51 授权
        /// </summary>
        /// <param name="user"></param>
        /// <param name="cookie"></param>
        /// <param name="isFirst"></param>
        /// <param name="userName"></param>
        /// <returns></returns>
        public static bool Verification(EntityFramework.FenJianLi user, CookieContainer cookie, bool isFirst, string userName)
        {
            using (var db = new ResumeRepairDBEntities())
            {
                var account = db.AuthorizationAccount.FirstOrDefault(f => f.IsEnable);

                if (account == null)
                {
                    FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.system_tbx_Exception, "获取授权帐号失败!");

                    return(false);
                }

                var param = $"type=Job51&extendParam={account.ExtendParam}&username={userName}&password={account.PassWord}&_random={new Random().NextDouble()}";

                var sources = RequestFactory.QueryRequest("http://www.fenjianli.com/account/bindChannel.htm", param, RequestEnum.POST, cookie);

                if (!sources.Contains("已经绑定") && !sources.Contains("成功"))
                {
                    //FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.system_tbx_Exception, $"渠道授权失败!响应Json:{sources}");

                    return(false);
                }

                var fjlUser = db.FenJianLi.FirstOrDefault(f => f.Email == user.Email);

                if (isFirst)
                {
                    if (fjlUser != null)
                    {
                        fjlUser.Integral += 250;
                    }
                }

                if (fjlUser != null)
                {
                    fjlUser.IsVerification = true;

                    fjlUser.VerificationAccount = userName;
                }

                db.SaveChanges();

                return(true);
            }
        }
コード例 #7
0
        /// <summary>
        /// 过滤器
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        private static List <FilterResult> FilterExist(List <ResumeSearch> list)
        {
            var filterResult = new List <FilterResult>();

            filterResult.AddRange(list.Select(s => new FilterResult
            {
                ResumeId        = s.ResumeId,
                ResumeNumber    = s.ResumeNumber,
                UserMasterExtId = s.UserMasterExtId
            }));

            if (!isFirst)
            {
                using (var db = new ResumeRepairDBEntities())
                {
                    var filterResultArr = filterResult.Select(s => s.ResumeId).ToArray();

                    var resumeIdArr = db.ResumeRecord.Where(w => filterResultArr.Any(a => w.ResumeId == a)).Select(s => s.ResumeId).ToArray();

                    filterResult.RemoveAll(r => resumeIdArr.Any(a => r.ResumeId == a));

                    var resumeList = filterResult.Select(s => new ResumeRecord
                    {
                        LibraryExist   = 2,
                        ResumePlatform = 1,
                        ResumeId       = s.ResumeId,
                        Status         = (short)ResumeRecordStatus.WaitMatch,
                        PostBackStatus = 0
                    }).ToList();

                    db.ResumeRecord.AddRange(resumeList);

                    db.SaveChanges();

                    var query = from n in resumeList.AsQueryable()
                                join l in list.AsQueryable() on new { n.ResumeId } equals new { l.ResumeId }
                    select new MatchResumeSearch
                    {
                        LastCompany     = l.LastCompany,
                        Name            = l.Name,
                        ResumeId        = n.ResumeId,
                        ResumeNumber    = l.ResumeNumber,
                        University      = l.University,
                        UserMasterExtId = l.UserMasterExtId,
                        ResumeRecodeId  = n.Id
                    };

                    db.MatchResumeSearch.AddRange(query);

                    db.SaveChanges();
                }
            }

            isFirst = false;

To:

            var result = RequestFactory.QueryRequest(Global.FilterAuthUrl, "{\"Username\": \"longzhijie\",\"Password\": \"NuRQe6kC\"}", RequestEnum.POST, contentType: EnumFactory.Codes(ContentTypeEnum.Json));

            if (!string.IsNullOrWhiteSpace(result))
            {
                var jObject = JsonConvert.DeserializeObject(result) as JObject;

                if ((int)jObject["Code"] == 0)
                {
                    dynamic param = new
                    {
                        Username        = "******",
                        Signature       = (string)jObject["Signature"],
                        ResumeSummaries = new List <object>()
                    };

                    param.ResumeSummaries.AddRange(list.Select(s => new { ResumeNumber = s.ResumeNumber, UserMasterExtendId = s.UserMasterExtId, ResumeId = s.ResumeId }).ToList());

                    result = RequestFactory.QueryRequest(Global.FilterUrl, JsonConvert.SerializeObject(param), RequestEnum.POST, contentType: EnumFactory.Codes(ContentTypeEnum.Json));

                    if (!string.IsNullOrWhiteSpace(result))
                    {
                        jObject = JsonConvert.DeserializeObject(result) as JObject;

                        if ((int)jObject["Code"] == 3)
                        {
                            goto To;
                        }

                        if ((int)jObject["Code"] == 0)
                        {
                            using (var db = new ResumeRepairDBEntities())
                            {
                                var jArray = jObject["ResumeSummaries"] as JArray;

                                var isSuccessBack = true;

                                if (jArray.Count > 0)
                                {
                                    Global.TotalMatchSuccess += jArray.Count;

                                    Global.TotalDownload += jArray.Count;

                                    var matchedResult = jArray.Select(s => new ResumeMatchResult
                                    {
                                        Cellphone    = (string)s["Cellphone"],
                                        Email        = (string)s["Email"],
                                        ResumeNumber = ((string)s["ResumeNumber"]).Substring(0, 10),
                                        Status       = 2
                                    }).ToList();

                                    var data = RequestFactory.QueryRequest(Global.PostResumesUrl, JsonConvert.SerializeObject(matchedResult), RequestEnum.POST, contentType: "application/json");

                                    if (!data.Contains("成功"))
                                    {
                                        isSuccessBack = false;
                                    }
                                }

                                foreach (var item in jArray)
                                {
                                    var resumeId = (string)item["ResumeId"];

                                    var resume = db.ResumeRecord.FirstOrDefault(f => f.ResumeId == resumeId);

                                    filterResult.RemoveAll(f => f.ResumeNumber == (string)item["ResumeNumber"] && f.UserMasterExtId == (string)item["UserMasterExtendId"]);

                                    if (resume != null)
                                    {
                                        resume.LibraryExist   = 1;
                                        resume.Status         = (short)ResumeRecordStatus.DownLoadSuccess;
                                        resume.DownLoadTime   = DateTime.UtcNow;
                                        resume.Cellphone      = (string)item["Cellphone"];
                                        resume.Email          = (string)item["Email"];
                                        resume.PostBackStatus = isSuccessBack ? (short)1 : (short)2;
                                    }
                                }

                                db.SaveChanges();
                            }
                        }
                    }
                }
            }

            return(filterResult);
        }
コード例 #8
0
        /// <summary>
        /// 初始化启动
        /// </summary>
        public static void Start()
        {
            isStart = true;

            Task.Run(() =>
            {
                while (isStart)
                {
                    if (actionBlock.InputCount != 0)
                    {
                        Thread.Sleep(1000);

                        continue;
                    }

                    List <ResumeSearch> resumeSearch = new List <ResumeSearch>();

                    if (isFirst)
                    {
                        using (var db = new ResumeRepairDBEntities())
                        {
                            var resumeQuery = from r in db.ResumeRecord
                                              join m in db.MatchResumeSearch on r.Id equals m.ResumeRecodeId
                                              where r.Status == 1
                                              select m;
                            if (resumeQuery.Count() > 0)
                            {
                                resumeSearch = resumeQuery.Select(s => new ResumeSearch
                                {
                                    LastCompany     = s.LastCompany,
                                    Name            = s.Name,
                                    ResumeId        = s.ResumeId,
                                    ResumeNumber    = s.ResumeNumber,
                                    University      = s.University,
                                    UserMasterExtId = s.UserMasterExtId
                                }).ToList();
                            }
                            else
                            {
                                resumeSearch = PullResumes();

                                isFirst = false;
                            }
                        }
                    }
                    else
                    {
                        resumeSearch = PullResumes();
                    }

                    var pullResumes = resumeSearch;

                    if (pullResumes.Count == 0)
                    {
                        continue;
                    }

                    var filterResumes = FilterExist(pullResumes);

                    var query = from n in filterResumes.AsQueryable()
                                join l in pullResumes.AsQueryable() on new { n.ResumeId, n.ResumeNumber, n.UserMasterExtId } equals new { l.ResumeId, l.ResumeNumber, l.UserMasterExtId }
                    select new ResumeSearch
                    {
                        LastCompany     = l.LastCompany,
                        Name            = l.Name,
                        ResumeId        = n.ResumeId,
                        ResumeNumber    = n.ResumeNumber,
                        University      = l.University,
                        UserMasterExtId = l.UserMasterExtId
                    };

                    var matchList = query.Distinct().ToList();

                    if (matchList != null)
                    {
                        foreach (var item in matchList)
                        {
                            actionBlock.Post(item);
                        }
                    }
                }
            });
        }
コード例 #9
0
        /// <summary>
        /// 工作任务
        /// </summary>
        /// <param name="i"></param>
        private static void Work(ResumeSearch i)
        {
            var dataResult = resumeSpider.ResumeRepair(i); // 纷简历平台

            using (var db = new ResumeRepairDBEntities())
            {
                if (dataResult.IsSuccess)
                {
                    ContactInformationSpider.actionBlock.Post(dataResult.Data + "-" + i.ResumeNumber.Substring(0, 10));

                    var resume = db.ResumeRecord.FirstOrDefault(w => w.ResumePlatform == 1 && w.ResumeId == i.ResumeId);

                    if (resume != null)
                    {
                        resume.Status = (int)ResumeRecordStatus.MatchSuccess;

                        resume.MatchPlatform = 1;

                        resume.MatchResumeId = dataResult.Data + "-" + i.ResumeNumber.Substring(0, 10);

                        resume.MatchTime = DateTime.UtcNow;

                        FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.tbx_ResumeRepair, $"匹配成功!平台:纷简历,简历ID:{i.ResumeId}");

                        Interlocked.Add(ref Global.TotalMatchSuccess, 1);
                    }
                    else
                    {
                        FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.system_tbx_Exception, $"记录简历匹配结果失败!简历ID:{i.ResumeId},结果:匹配成功!");
                    }
                }
                else
                {
                    var resume = db.ResumeRecord.FirstOrDefault(w => w.ResumePlatform == 1 && w.ResumeId == i.ResumeId);

                    if (resume != null)
                    {
                        resume.Status = (int)ResumeRecordStatus.MatchFailure;

                        resume.MatchTime = DateTime.UtcNow;

                        FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.tbx_ResumeRepair, $"匹配失败!平台:纷简历,简历ID:{i.ResumeId}");
                    }
                    else
                    {
                        FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.system_tbx_Exception, $"记录简历匹配结果失败!简历ID:{i.ResumeId},结果:匹配失败!");
                    }

                    var requestParam = new List <ResumeMatchResult>
                    {
                        new ResumeMatchResult
                        {
                            ResumeNumber = i.ResumeNumber.Substring(0, 10),
                            Status       = 3
                        }
                    };

                    var data = RequestFactory.QueryRequest(Global.PostResumesUrl, JsonConvert.SerializeObject(requestParam), RequestEnum.POST, contentType: "application/json");

                    resume.PostBackStatus = data.Contains("成功") ? (short)1 : (short)2;
                }

                db.SaveChanges();
            }
        }
コード例 #10
0
        /// <summary>
        /// 补全信息
        /// </summary>
        /// <param name="resumeId"></param>
        /// <param name="user"></param>
        /// <param name="resumeNo"></param>
        private static void AdditionalInformation(string resumeId, EntityFramework.FenJianLi user, string resumeNo)
        {
            var cookie = Login(user.Email, user.PassWord);

            var id = resumeId.Substring(0, resumeId.IndexOf("/"));

            var param = $"id={id}&_random={new Random().NextDouble()}";

To:

            Thread.Sleep(500);

            string html = RequestFactory.QueryRequest("http://www.fenjianli.com/search/getDetail.htm", param, RequestEnum.POST, cookie, "http://www.fenjianli.com/search/detail.htm");

            if (string.IsNullOrWhiteSpace(html) || (html.Contains("非法") && html.Length < 20))
            {
                goto To;
            }

            var jObject = JsonConvert.DeserializeObject(html) as JObject;

            var email = (string)jObject["contact"]?["email"];

            var mobile = (string)jObject["contact"]?["mobile"];

            string path;

            if (id.Length > 4)
            {
                path = $"D:\\Resumes\\Complete\\{DateTime.Now:yyyy-MM-dd}\\{id.Remove(2)}\\{id.Substring(2, 2)}";
            }
            else
            {
                path = $"D:\\Resumes\\Complete\\{DateTime.Now:yyyy-MM-dd}\\other";
            }

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            try
            {
                File.WriteAllText($"{path}\\{id}.json", html);

                var requestParam = new List <ResumeMatchResult>
                {
                    new ResumeMatchResult
                    {
                        Cellphone    = mobile,
                        Email        = email,
                        ResumeNumber = resumeNo,
                        Status       = 2
                    }
                };

                var dataResult = RequestFactory.QueryRequest(Global.PostResumesUrl, JsonConvert.SerializeObject(requestParam), RequestEnum.POST, contentType: "application/json");

                using (var db = new ResumeRepairDBEntities())
                {
                    var matchResumeId = $"{resumeId}-{resumeNo}";

                    var record = db.ResumeRecord.FirstOrDefault(w => w.MatchPlatform == 1 && w.MatchResumeId == matchResumeId);

                    if (record != null)
                    {
                        record.Email          = email;
                        record.Cellphone      = mobile;
                        record.Status         = (int)ResumeRecordStatus.DownLoadSuccess;
                        record.PostBackStatus = dataResult.Contains("成功") ? (short)1 : (short)2;
                        record.DownLoadTime   = DateTime.UtcNow;
                        db.SaveChanges();
                    }
                    else
                    {
                        FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.system_tbx_Exception, $"更新补全简历信息失败!纷简历ID:{id}");
                    }
                }

                Interlocked.Add(ref count, 1);

                Interlocked.Add(ref Global.TotalDownload, 1);

                FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.fjl_tbx_RepairResume, $"补全简历成功!{user.Email} id:{id},补全简历份数:{count}");
            }
            catch (FileNotFoundException ex) { throw new RequestException($"找不到文件路径, 原因:{ex.Message},帐号:{user.Email}"); }
        }
コード例 #11
0
        /// <summary>
        /// 工作单元
        /// </summary>
        /// <param name="resumeId"></param>
        /// <param name="resumeNo"></param>
        private static void Work(string resumeId, string resumeNo)
        {
            EntityFramework.FenJianLi user;

            var cookie = new CookieContainer();

Next:

            while (!queue.TryDequeue(out user))
            {
                Thread.Sleep(1000);
            }
            ;

            if (!user.IsVerification)
            {
                cookie = Login(user.Email, user.PassWord);

                var sources = RequestFactory.QueryRequest("http://192.168.1.100:15286/api/Fenjianli/GetAuthenticationAccount?token=g9Cp5O0l2ZENYI8J0PxMk7sZk624nkxY");

                string userName;

                if (Regex.IsMatch(sources, "\"(.+?)\"") && !sources.Contains("Cookie was invalid"))
                {
                    userName = Regex.Match(sources, "\"(.+?)\"").Result("$1");
                }
                else
                {
                    throw new RequestException($"解析51帐号失败!,返回信息:{sources}");
                }

                var tryCount = 0;

                while (!Verification(user, cookie, true, userName))
                {
                    if (tryCount > 1)
                    {
                        goto Next;
                    }

                    tryCount++;
                }
            }

            cookie = Login(user.Email, user.PassWord);

            var id = resumeId.Substring(0, resumeId.IndexOf("/"));

            var param = $"id={id}&_random={new Random().NextDouble()}";

            Thread.Sleep(500);

            var html = RequestFactory.QueryRequest("http://www.fenjianli.com/search/getDetail.htm", param, RequestEnum.POST, cookie, "http://www.fenjianli.com/search/detail.htm");

            if (string.IsNullOrWhiteSpace(html) || html.Contains("很抱歉,出错了"))
            {
                using (var db = new ResumeRepairDBEntities())
                {
                    var fjl = db.FenJianLi.FirstOrDefault(w => w.Id == user.Id);

                    if (fjl != null)
                    {
                        fjl.IsLocked = false;

                        db.SaveChanges();
                    }
                    else
                    {
                        FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.system_tbx_Exception, $"用户{user.Email}解锁失败!");
                    }
                }

                errorCount++;

                FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.system_tbx_Exception, $"找不到简历:简历id:{id} 用户{user.Email}! 数量:{errorCount}");

                return;
            }

            var folderCatalogId = GetFolderCatalogId(user);

            if (string.IsNullOrWhiteSpace(folderCatalogId))
            {
                throw new RequestException($"获取文件夹编号失败!,帐号:{user.Email}");
            }

Download:

            var result = DownloadResume(resumeId, folderCatalogId, user);

            if (result == 1)
            {
                using (var db = new ResumeRepairDBEntities())
                {
                    var fjl = db.FenJianLi.FirstOrDefault(w => w.Id == user.Id);

                    if (fjl != null)
                    {
                        fjl.IsLocked = false;

                        db.SaveChanges();
                    }
                    else
                    {
                        FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.system_tbx_Exception, $"用户{user.Email}解锁失败!");
                    }
                }

                while (!queue.TryDequeue(out user))
                {
                    Thread.Sleep(1000);
                }
                ;

                cookie = Login(user.Email, user.PassWord);

                goto Download;
            }

            if (result == 2)
            {
                var sources = RequestFactory.QueryRequest("http://192.168.1.100:15286/api/Fenjianli/GetAuthenticationAccount?token=g9Cp5O0l2ZENYI8J0PxMk7sZk624nkxY");

                string userName;

                if (Regex.IsMatch(sources, "\"(.+?)\""))
                {
                    userName = Regex.Match(sources, "\"(.+?)\"").Result("$1");
                }
                else
                {
                    throw new RequestException($"解析51帐号失败!,返回信息:{sources}");
                }

                var tryCount = 0;

                while (!Verification(user, cookie, false, userName))
                {
                    if (tryCount > 1)
                    {
                        goto Next;
                    }

                    tryCount++;
                }
            }

            AdditionalInformation(resumeId, user, resumeNo);
        }
コード例 #12
0
        /// <summary>
        /// 激活
        /// </summary>
        /// <returns></returns>
        private DataResult Activation()
        {
            var dataResult = new DataResult();

            using (var db = new ResumeRepairDBEntities())
            {
                var list = db.FenJianLi.Where(w => !w.IsActivation).ToList();

                if (list.Count == 0)
                {
                    return(dataResult);
                }

                #region 获取未读邮件列表

                var seenUids = new List <string>();

                var messages = EmailFactory.FetchUnseenMessages("pop.exmail.qq.com", 995, true, Global.Email, Global.PassWord, seenUids);

                foreach (var userEmail in list)
                {
                    var message = messages.FirstOrDefault(f => f.message.Headers.To.FirstOrDefault()?.Address == userEmail.Email);

                    if (message == null)
                    {
                        //dataResult.IsSuccess = false;

                        //dataResult.ErrorMsg += $"获取激活邮件失败!,找不到邮件!邮箱地址:{userEmail.Email}";

                        continue;
                    }

                    var content = Encoding.Default.GetString(message.message.RawMessage);

                    var url = string.Empty;

                    if (Regex.IsMatch(content, "(?s)code=(.+?)</a>"))
                    {
                        url = "http://www.fenjianli.com/register/checkEmailOfCode.htm?code=" + Regex.Match(content, "(?s)code=(.+?)</a>").Result("$1").Substring(2);
                    }

                    var html = RequestFactory.QueryRequest(url);

                    if (!html.Contains("成功"))
                    {
                        dataResult.IsSuccess = false;

                        dataResult.ErrorMsg += $"激活失败!,邮箱地址:{userEmail.Email}{Environment.NewLine}";

                        continue;
                    }

                    userEmail.IsActivation = true;

                    FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.fjl_tbx_RegisterActivation, $"激活成功!邮箱:{userEmail.Email}");

                    if (!EmailFactory.DeleteMessageByMessageId("pop.exmail.qq.com", 995, true, Global.Email, Global.PassWord, message.message.Headers.MessageId))
                    {
                        FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.fjl_tbx_RegisterActivation, $"删除激活邮件失败,邮箱地址:{userEmail.Email}");
                    }
                }

                #endregion

                db.SaveChanges();
            }

            return(dataResult);
        }
コード例 #13
0
        private DataResult Activation()
        {
            var dataResult = new DataResult();

            using (var db = new ResumeRepairDBEntities())
            {
                var list = db.Pin101.Where(w => !w.IsActivation).ToList();

                if (list.Count == 0)
                {
                    return(dataResult);
                }

                #region 获取未读邮件列表

                var seenUids = new List <string>();

                var messages = EmailFactory.FetchUnseenMessages("pop.exmail.qq.com", 995, true, Global.Email, Global.PassWord, seenUids);

                foreach (var userEmail in list)
                {
                    var message = messages.FirstOrDefault(f => f.message.Headers.To.FirstOrDefault()?.Address == userEmail.Email);

                    if (message == null)
                    {
                        //dataResult.IsSuccess = false;

                        //dataResult.ErrorMsg += $"获取激活邮件失败!,找不到邮件!邮箱地址:{userEmail.Email}";

                        continue;
                    }

                    var content = Encoding.UTF8.GetString(message.message.FindFirstHtmlVersion().Body);

                    var url = string.Empty;
                    //var referer = string.Empty;

                    //if (Regex.IsMatch(content, "(?s)(http://sctrack.+?html)"))
                    //{
                    //    url = Regex.Match(content, "(?s)(http://sctrack.+?html)").Result("$1");
                    //}

                    if (Regex.IsMatch(content, "(?s)php\\?s=(.+?/istype/\\d+)"))
                    {
                        url = "http://www.101pin.com/index.php?s=" + Regex.Match(content, "(?s)php\\?s=(.+?/istype/\\d+)").Result("$1");
                    }

                    var html = RequestFactory.QueryRequest(url, accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");

                    if (!html.Contains("成功"))
                    {
                        dataResult.IsSuccess = false;

                        dataResult.ErrorMsg += $"激活失败!,邮箱地址:{userEmail.Email}{Environment.NewLine}";

                        continue;
                    }

                    userEmail.IsActivation = true;

                    Pin101Scheduling.ssf.SetText(Pin101Scheduling.ssf.fjl_tbx_RegisterActivation, $"激活成功!邮箱:{userEmail.Email}");

                    if (!EmailFactory.DeleteMessageByMessageId("pop.exmail.qq.com", 995, true, Global.Email, Global.PassWord, message.message.Headers.MessageId))
                    {
                        Pin101Scheduling.ssf.SetText(Pin101Scheduling.ssf.fjl_tbx_RegisterActivation, $"删除激活邮件失败,邮箱地址:{userEmail.Email}");
                    }
                }

                #endregion

                db.SaveChanges();
            }

            return(dataResult);
        }
コード例 #14
0
        private static string userEmail = string.Empty; // 创建的随机邮箱

        /// <summary>
        /// 注册
        /// </summary>
        private void Register()
        {
            // GET 注册页面

            string sources = RequestFactory.QueryRequest("http://www.fenjianli.com/register/toRegisterByEmail.htm", cookieContainer: cookie);

            string id = Regex.Match(sources, "validate-id.+?\"(\\d+)")?.Result("$1");

            if (id == null)
            {
                throw new RequestException("获取注册 ID 失败,失败原因:请求异常,导致解析HTML出错,源码:" + sources);
            }

            string password = DateTime.Now.ToString("yyyyMMddHHmmss");

            string username = password + Global.Email.Substring(Global.Email.IndexOf("@"));

            string url = "http://www.fenjianli.com/register/register.htm";

            #region 获取验证码

            var imgUrl = "http://www.fenjianli.com/register/getCheckCode.htm?" + new Random().NextDouble(); // 随机化图片验证码

            var loginRequest = (HttpWebRequest)WebRequest.Create(imgUrl);

            loginRequest.Accept = "image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5"; // 图片类型

            loginRequest.CookieContainer = cookie;

            using (var imgresponse = loginRequest.GetResponse())
            {
                using (var imgreader = imgresponse.GetResponseStream())
                {
                    var writer = new FileStream("D:\\pic.jpg", FileMode.OpenOrCreate, FileAccess.Write);

                    var buff = new byte[512];

                    int read;

                    while (imgreader != null && (read = imgreader.Read(buff, 0, buff.Length)) > 0)
                    {
                        writer.Write(buff, 0, read);
                    }

                    writer.Close();

                    writer.Dispose();
                }
            }

            StreamReader sr = new StreamReader("D:\\pic.jpg");

            FenJianLiScheduling.cnf.pbx_checkNumber.Image = Image.FromStream(sr.BaseStream);

            string checkCode = Interaction.InputBox("请输入验证码!", "验证码");

            sr.Close();
            sr.Dispose();

            //checkForm.Close();

            #endregion

            string param = $"id={id}&regType=email&username={username}&password={password}&confirmPassword={password}&checkCode={checkCode}&agree=1&_random={new Random().NextDouble()}";

            // 发送注册请求

            sources = RequestFactory.QueryRequest(url, param, RequestEnum.POST, cookie);

            if (!sources.Contains("成功"))
            {
                throw new RequestException($"注册请求失败!响应数据:{sources}");
            }

            userEmail = username;

            using (var db = new ResumeRepairDBEntities())
            {
                db.FenJianLi.Add(new EntityFramework.FenJianLi
                {
                    Email          = userEmail,
                    PassWord       = userEmail.Substring(0, 14),
                    CreateTime     = DateTime.UtcNow,
                    IsEnable       = true,
                    Integral       = 255,
                    IsActivation   = false,
                    IsVerification = false,
                    IsLocked       = false
                });

                db.SaveChanges();
            }

            FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.fjl_tbx_RegisterActivation, $"注册成功!邮箱:{userEmail}");

            url = "http://www.fenjianli.com/register/sendCheckEmail.htm";

            param = $"id={id}&checkSource={username}&_random={new Random().NextDouble()}";

            sources = RequestFactory.QueryRequest(url, param, RequestEnum.POST, cookie);

            // 发送激活邮件请求

            if (!sources.Contains("成功"))
            {
                throw new RequestException($"发送激活邮件请求失败!响应数据:{sources}");
            }

            FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.fjl_tbx_RegisterActivation, $"发送激活邮件成功!邮箱:{userEmail}");
        }
コード例 #15
0
        private static void FilterExist()
        {
            int total = 0;

            int filter = 0;

            int success = 0;

            using (var db = new ResumeRepairDBEntities())
            {
                var resumeQuery = from r in db.ResumeRecord.AsNoTracking()
                                  join m in db.MatchResumeSearch.AsNoTracking() on r.ResumeId equals m.ResumeId
                                  where r.Status == 2 orderby r.Id
                                  select new { r, m };

                var count = 8526;

                // var count = db.Database.SqlQuery<int>("SELECT count(*) FROM \"ResumeRecord\" AS R INNER JOIN  \"MatchResumeSearch\" AS M ON R.\"ResumeId\" = M.\"ResumeId\"  WHERE r.\"Status\" = 3");

                total = count;

To:

                var result = RequestFactory.QueryRequest("http://192.168.1.100:15286/api/queryresume/login", "{\"Username\": \"longzhijie\",\"Password\": \"NuRQe6kC\"}", RequestEnum.POST, contentType: "application/json");

                if (!string.IsNullOrWhiteSpace(result))
                {
                    var jObject = JsonConvert.DeserializeObject(result) as JObject;

                    if ((int)jObject["Code"] == 3)
                    {
                        goto To;
                    }

                    if ((int)jObject["Code"] == 0)
                    {
                        var signature = (string)jObject["Signature"];

                        var index = 0;

                        NpgsqlConnection conn = new NpgsqlConnection("Server=localhost;Database=ResumeRepairDB;Uid=postgres;Pwd=a123456;");

                        conn.Open();

                        while (true)
                        {
                            if (index > 8526)
                            {
                                break;
                            }

                            dynamic param = new
                            {
                                Username        = "******",
                                Signature       = signature,
                                ResumeSummaries = new List <object>()
                            };

                            NpgsqlDataAdapter ndap = new NpgsqlDataAdapter($"SELECT M.* FROM \"ResumeRecord\" AS R INNER JOIN \"MatchResumeSearch\" AS M ON R.\"ResumeId\" = M.\"ResumeId\" WHERE r.\"Status\" = 2 LIMIT 20 OFFSET {index}", conn);

                            DataSet ds = new DataSet();

                            ndap.Fill(ds);

                            var tab = ds.Tables[0];

                            //var list = resumeQuery.Skip(index).Take(20).ToList();

                            foreach (DataRow item in tab.Rows)
                            {
                                param.ResumeSummaries.Add(new { ResumeNumber = (string)item["ResumeNumber"], UserMasterExtendId = (string)item["UserMasterExtId"], ResumeId = (string)item["ResumeId"] });
                            }

                            index += 20;

                            //if (list == null || list.Count == 0) break;

                            filter += 20;

                            //param.ResumeSummaries.AddRange(list.Select(s => new { ResumeNumber = s.m.ResumeNumber, UserMasterExtendId = s.m.UserMasterExtId, ResumeId = s.m.ResumeId }).ToList());

                            result = RequestFactory.QueryRequest("http://192.168.1.100:15286/api/queryresume/query", JsonConvert.SerializeObject(param), RequestEnum.POST, contentType: "application/json");

                            if (!string.IsNullOrWhiteSpace(result))
                            {
                                jObject = JsonConvert.DeserializeObject(result) as JObject;

                                if ((int)jObject["Code"] == 0)
                                {
                                    var jArray = jObject["ResumeSummaries"] as JArray;

                                    var isSuccessBack = true;

                                    if (jArray.Count > 0)
                                    {
                                        var matchedResult = jArray.Select(s => new
                                        {
                                            Cellphone    = (string)s["Cellphone"],
                                            Email        = (string)s["Email"],
                                            ResumeNumber = ((string)s["ResumeNumber"]).Substring(0, 10),
                                            Status       = 2
                                        }).ToList();

                                        var data = RequestFactory.QueryRequest("http://192.168.1.38:8085/splider/Resume/ModifyContact", JsonConvert.SerializeObject(matchedResult), RequestEnum.POST, contentType: "application/json");

                                        if (!data.Contains("成功"))
                                        {
                                            isSuccessBack = false;
                                        }
                                    }

                                    foreach (var item in jArray)
                                    {
                                        var resumeId = (string)item["ResumeId"];

                                        var resume = db.ResumeRecord.FirstOrDefault(f => f.ResumeId == resumeId);

                                        if (resume != null)
                                        {
                                            resume.LibraryExist   = 1;
                                            resume.Status         = 4;
                                            resume.DownLoadTime   = DateTime.UtcNow;
                                            resume.Cellphone      = (string)item["Cellphone"];
                                            resume.Email          = (string)item["Email"];
                                            resume.PostBackStatus = isSuccessBack ? (short)1 : (short)2;
                                        }
                                    }



                                    success += jArray.Count;
                                }
                            }

                            Console.WriteLine($"共 {total} 条,已过滤 {filter} 条,匹配成功 {success} 条, 命中率 {Math.Round((decimal)success / filter, 2) * 100}%  进度 {Math.Round((decimal)filter / total,2) * 100}%");
                        }

                        db.SaveChanges();

                        conn.Close();
                    }
                }
            }
        }
コード例 #16
0
        /// <summary>
        /// 检查命中率
        /// </summary>
        private static void Check()
        {
            using (var db = new ResumeRepairDBEntities())
            {
                var successList = new List <string>();

                var deSuccessList = new List <string>();

                var jbs = new JiebaSegmenter();

                var list = db.ResumeRecord.Where(w => w.PostBackStatus == 1 && w.Status != 3).ToList();

                var fileList = new DirectoryAllFiles().GetAllFiles(new DirectoryInfo("D:\\Resumes\\Complete\\"));

                var count = 0d;

                var success = 0d;

                var countNull = 0;

                foreach (var item in list)
                {
                    count++;

                    var resumeNumber = item.MatchResumeId.Substring(item.MatchResumeId.IndexOf("-") + 1);

                    var resumeJson = RequestFactory.QueryRequest("http://192.168.1.38:8085/splider/Resume/GetResumeByNumber?resumenumber=" + resumeNumber);

                    if (string.IsNullOrWhiteSpace(resumeJson) || resumeJson.Contains("null"))
                    {
                        Console.WriteLine("请求响应为空!resumenumber:" + resumeNumber);

                        count--;

                        countNull++;

                        continue;
                    }

                    var fileName = item.MatchResumeId.Substring(0, item.MatchResumeId.IndexOf("/")) + ".json";

                    var file = fileList.FirstOrDefault(f => f.FileName == fileName);

                    try
                    {
                        var json = File.ReadAllText(file.FilePath);

                        var jObjectA = JsonConvert.DeserializeObject(resumeJson) as JObject;

                        var jObjectB = JsonConvert.DeserializeObject(json) as JObject;

                        var evaluation = ((JArray)jObjectA["Resumes"])[0]["Intention"]["Evaluation"].ToString();

                        if (string.IsNullOrWhiteSpace(evaluation))
                        {
                            Console.WriteLine("自我介绍为空!简历ID:" + resumeNumber);

                            count--;

                            continue;
                        }

                        var arrSelf = ((JArray)jObjectB["selfIntroduction"]);

                        if (arrSelf.Count == 0)
                        {
                            Console.WriteLine("自我介绍为空!Path:" + file.FilePath);

                            count--;

                            continue;
                        }

                        var selfIntroduction = arrSelf[0]?["content"].ToString();

                        if (string.IsNullOrWhiteSpace(selfIntroduction))
                        {
                            Console.WriteLine("自我介绍为空!Path:" + file.FilePath);

                            count--;

                            continue;
                        }

                        var arrList = jbs.Cut(selfIntroduction).Where(w => w.Length > 1).Take(3);

                        if (arrList.All(a => evaluation.Contains(a)))
                        {
                            success++;

                            successList.Add($"{resumeJson}{Environment.NewLine}--------------------------------{json}");

                            Console.WriteLine($"命中成功!命中率:{Math.Round(success / count, 3) * 100}%");
                        }
                        else
                        {
                            deSuccessList.Add($"{resumeJson}{Environment.NewLine}--------------------------------{json}");
                        }
                    }
                    catch (FileNotFoundException)
                    {
                        Console.WriteLine("找不到文件!Path:" + file.FilePath);

                        continue;
                    }
                }
            }

            Console.WriteLine("End");
        }