// 로그인 public virtual bool Login() { LQStructures.LQCrawlerInfo pCrawler = CrawlerManager.Instance.GetCrawlerInfo(); cookie_ = new CookieContainer(); try { string loginurl = pCrawler.LoginUrl_; string loginstring = pCrawler.LoginParam_.Replace("{LoginID}", pCrawler.LoginID_); loginstring = loginstring.Replace("{LoginPW}", pCrawler.LoginPW_); byte[] sendData = UTF8Encoding.UTF8.GetBytes(loginstring); HttpWebResponse pResponse = HKHttpWebRequest.ReqHttpRequest(pCrawler.LoginMethod_, loginurl, loginstring, cookie_); TextReader r = (TextReader) new StreamReader(pResponse.GetResponseStream()); string htmlBuffer = r.ReadToEnd(); if (htmlBuffer.IndexOf(pCrawler.LoginCheck_) < 0) { return(false); } } catch (System.Exception ex) { LogManager.Instance.Log(ex.Message); return(false); } return(true); }
public override void MakeDBData(tblOrderData pExcelData) { Dictionary <string, tblOrderData> pOrderList = OrderManager.Instance.GetOrderList(); LQStructures.LQCrawlerInfo pCrawler = CrawlerManager.Instance.GetCrawlerInfo(); // DB에 저장되어 있던 값이 아니면 들어온 값이라면 if (pOrderList.ContainsKey(pExcelData.channelOrderCode_) == false) { pExcelData.State_ = DealStateManager.Instance.StateString_[(Int32)DealStateEnum.FINISH_BUY]; // 신규 데이터라면 일단 DB에 넣는다. pExcelData.NeedDBProc_ = tblOrderData.NeedDBProc.Insert; pOrderList.Add(pExcelData.channelOrderCode_, pExcelData); } else { tblOrderData pDBData = pOrderList[pExcelData.channelOrderCode_]; if (pDBData.State_ == DealStateManager.Instance.StateString_[(Int32)DealStateEnum.FINISH_BUY]) { } else if (pDBData.State_ == DealStateManager.Instance.StateString_[(Int32)DealStateEnum.USED]) { // 사용 처리된 상태인데, 뭔가 해줘야 할게 있는가? } } }
public override bool Login() { LQStructures.LQCrawlerInfo pCrawler = CrawlerManager.Instance.GetCrawlerInfo(); cookie_ = new CookieContainer(); // 1차 쿠키 받아오는곳 try { string loginurl = "https://partneradmin.ezwel.com/cpadm/login/loginForm.ez"; HttpWebResponse pResponse = HKHttpWebRequest.ReqHttpRequest("GET", loginurl, "", cookie_); TextReader r = (TextReader) new StreamReader(pResponse.GetResponseStream(), Encoding.GetEncoding("EUC-KR")); string htmlBuffer = r.ReadToEnd(); } catch (System.Exception ex) { LogManager.Instance.Log(ex.Message); } // 2차 로그인 처리 try { string loginurl = "https://partneradmin.ezwel.com/cpadm/login/newLoginCheckAction.ez"; string loginparameter = "&userId={0}&password={1}"; loginparameter = string.Format(loginparameter, pCrawler.LoginID_, pCrawler.LoginPW_); HttpWebResponse pResponse = HKHttpWebRequest.ReqHttpRequest("POST", loginurl, loginparameter, cookie_); TextReader r = (TextReader) new StreamReader(pResponse.GetResponseStream(), Encoding.GetEncoding("EUC-KR")); string htmlBuffer = r.ReadToEnd(); } catch (System.Exception ex) { LogManager.Instance.Log(ex.Message); } // 실제 로그인 try { string loginurl = pCrawler.LoginUrl_; string loginstring = pCrawler.LoginParam_.Replace("{LoginID}", pCrawler.LoginID_); loginstring = loginstring.Replace("{LoginPW}", pCrawler.LoginPW_); //byte[] sendData = UTF8Encoding.UTF8.GetBytes(loginstring); HttpWebResponse pResponse = HKHttpWebRequest.ReqHttpRequest(pCrawler.LoginMethod_, loginurl, loginstring, cookie_); TextReader r = (TextReader) new StreamReader(pResponse.GetResponseStream()); string htmlBuffer = r.ReadToEnd(); //if (htmlBuffer.IndexOf(pCrawler.LoginCheck_) < 0) // return false; } catch (System.Exception ex) { LogManager.Instance.Log(ex.Message); return(false); } return(true); }
void SetChannelName() { LQStructures.LQCrawlerInfo pCrawler = CrawlerManager.Instance.GetCrawlerInfo(); if (pCrawler == null) { label_ChannelName.Text = "-"; } else { label_ChannelName.Text = pCrawler.ChannelName_; } }
public override void MakeDBData(tblOrderData pExcelData) { Dictionary <string, tblOrderData> pOrderList = OrderManager.Instance.GetOrderList(); LQStructures.LQCrawlerInfo pCrawler = CrawlerManager.Instance.GetCrawlerInfo(); // DB에 저장되어 있던 값이 아니면 들어온 값이라면 if (pOrderList.ContainsKey(pExcelData.channelOrderCode_) == false) { //if (pExcelData.ExData_Use_ == pCrawler.ExData_UseCheck_) //{ // pExcelData.State_ = DealStateManager.Instance.StateString_[(Int32)DealStateEnum.USED]; //} //else if (pExcelData.ExData_Cancel_ == pCrawler.ExData_CancelCheck_) //{ // pExcelData.State_ = DealStateManager.Instance.StateString_[(Int32)DealStateEnum.CANCEL]; //} //else //{ //} pExcelData.State_ = DealStateManager.Instance.StateString_[(Int32)DealStateEnum.FINISH_BUY]; // 신규 데이터라면 일단 DB에 넣는다. pExcelData.NeedDBProc_ = tblOrderData.NeedDBProc.Insert; pExcelData.bFindInExcel_ = true; pExcelData.bProcessed_ = true; pOrderList.Add(pExcelData.channelOrderCode_, pExcelData); } else { tblOrderData pDBData = pOrderList[pExcelData.channelOrderCode_]; if (pExcelData.State_ == pDBData.State_) { return; } pDBData.bFindInExcel_ = true; pDBData.bProcessed_ = true; } }
// 크롤링까지 남은 시간 표시 void SetNextCrawlingLeftTime() { if (LastCrawlingTick_ == 0) { label_NextCrawling.Text = "-"; } else { LQStructures.LQCrawlerInfo pCrawler = CrawlerManager.Instance.GetCrawlerInfo(); Int32 nNextTick = LastCrawlingTick_ + CrawlerInfoManager.Instance.crawlingtick_; Int32 nCurrent = Environment.TickCount; Int32 nLeftTime = nNextTick - nCurrent; nLeftTime /= 1000; if (nLeftTime > 0) { label_NextCrawling.Text = string.Format("{0} 초 후", nLeftTime); } } }
public override bool LoadExcelAndInsertList(string filepath, Int32 GoodsAttrType, bool bFixedType, string goodsname) { LQStructures.LQCrawlerInfo pCrawlerInfo = CrawlerManager.Instance.GetCrawlerInfo(); Microsoft.Office.Interop.Excel.Application ap = null; Workbook wb = null; Worksheet ws = null; HKExcelHelper.GetWorkSheet(filepath, ref ap, ref wb, ref ws); Range tRange = null; string tempString = ""; string comparesitename = ""; Int32 nCurrentRow = 0; Int32 ExData_Option = 0; Int32 ExData_Coupncode = 0; Int32 ExData_Buyer = 0; Int32 ExData_Cancel = 0; Int32 ExData_Use = 0; Int32 ExData_Buyphone = 0; Int32 ExData_Price = 0; Int32 ExData_BuyDate = 0; Int32 ExData_BuyCount = 0; if (bFixedType == true) {// 레저큐 양식일때는 고정값으로 nCurrentRow = 2; ExData_Option = 4; ExData_Coupncode = 3; ExData_Buyer = 1; ExData_Cancel = 6; ExData_Use = 6; ExData_Buyphone = 2; ExData_Price = 5; ExData_BuyDate = 7; ExData_BuyCount = 8; } else { nCurrentRow = pCrawlerInfo.ExData_Start_; ExData_Option = pCrawlerInfo.ExData_Option_; ExData_Coupncode = pCrawlerInfo.ExData_Coupncode_; ExData_Buyer = pCrawlerInfo.ExData_Buyer_; ExData_Cancel = pCrawlerInfo.ExData_Cancel_; ExData_Use = pCrawlerInfo.ExData_Use_; ExData_Buyphone = pCrawlerInfo.ExData_Buyphone_; ExData_Price = pCrawlerInfo.ExData_Price_; ExData_BuyDate = pCrawlerInfo.ExData_Buydate_; ExData_BuyCount = pCrawlerInfo.ExData_Count_; // 티몬을 위한 변경 if (GoodsAttrType == 1) { nCurrentRow = 3; ExData_Option = 6; ExData_Coupncode = 3; ExData_Buyer = 1; ExData_Cancel = 8; ExData_Use = 8; ExData_Buyphone = 2; ExData_Price = 7; ExData_BuyDate = 9; } } while (true) { try { tRange = ws.Cells[nCurrentRow, 1]; comparesitename = Convert.ToString(tRange.Value2); tRange = ws.Cells[nCurrentRow, ExData_Option]; if (tRange == null) { break; } tempString = tRange.Value2; if (tempString == null) { break; } Int32 tempgoodSeq = -1; tblOrderData pExcelData = new tblOrderData(); pExcelData.channelSeq_ = pCrawlerInfo.Channel_Idx_; pExcelData.authoritySeq_ = pCrawlerInfo.AuthoritySeq_; //pExcelData.goodsCode_ = pGoodInfo.Goods_Code_; pExcelData.goodsSeq_ = tempgoodSeq; pExcelData.ExData_Option_ = tempString; pExcelData.ExData_OptionOriginal_ = tempString; if (string.IsNullOrEmpty(goodsname) == false) { pExcelData.ExData_GoodsName_ = goodsname; } tRange = ws.Cells[nCurrentRow, ExData_Coupncode]; if (tRange == null) { break; } pExcelData.channelOrderCode_ = Convert.ToString(tRange.Value2); if (pExcelData.channelOrderCode_ == null) { break; } pExcelData.channelOrderCode_ = pExcelData.channelOrderCode_.Replace("'", ""); pExcelData.channelOrderCode_ = pExcelData.channelOrderCode_.Trim(); // 공백 제거 tRange = ws.Cells[nCurrentRow, ExData_Buyer]; pExcelData.orderName_ = Convert.ToString(tRange.Value2); if (pExcelData.orderName_ == null) { pExcelData.orderName_ = ""; } tRange = ws.Cells[nCurrentRow, ExData_Cancel]; pExcelData.ExData_Cancel_ = tRange.Value2; if (pExcelData.ExData_Cancel_ == null) { pExcelData.ExData_Cancel_ = ""; } tRange = ws.Cells[nCurrentRow, ExData_Use]; pExcelData.ExData_Use_ = tRange.Value2; if (pExcelData.ExData_Use_ == null) { pExcelData.ExData_Use_ = ""; } tRange = ws.Cells[nCurrentRow, ExData_Buyphone]; pExcelData.orderPhone_ = Convert.ToString(tRange.Value2); if (pExcelData.orderPhone_ == null || pExcelData.orderPhone_ == "") { tRange = ws.Cells[nCurrentRow, 15]; pExcelData.orderPhone_ = Convert.ToString(tRange.Value2); } pExcelData.orderPhone_ = pExcelData.orderPhone_.Replace("'", ""); if (ExData_Price != 0) { tRange = ws.Cells[nCurrentRow, ExData_Price]; if (tRange.Value2 != null) {// 돈에 , 가 있으면 제거하자. tempString = Convert.ToString(tRange.Value2); tempString = tempString.Replace(",", ""); pExcelData.orderSettlePrice_ = Convert.ToInt32(tempString); } } tRange = ws.Cells[nCurrentRow, ExData_BuyDate]; if (pCrawlerInfo.Channel_Idx_ == 9 || pCrawlerInfo.Channel_Idx_ == 14 || pCrawlerInfo.Channel_Idx_ == 15 || pCrawlerInfo.Channel_Idx_ == 18) { double temp = Convert.ToDouble(tRange.Value2); DateTime dta = DateTime.FromOADate(temp); pExcelData.BuyDate_ = dta.ToString("u"); pExcelData.BuyDate_ = pExcelData.BuyDate_.Replace("Z", ""); } else if (pCrawlerInfo.Channel_Idx_ == 22 || pCrawlerInfo.Channel_Idx_ == 23) { pExcelData.BuyDate_ = Convert.ToString(tRange.Value2); pExcelData.BuyDate_ = pExcelData.BuyDate_ + " 00:00:00"; } else { pExcelData.BuyDate_ = Convert.ToString(tRange.Value2); } pExcelData.BuyDate_ = pExcelData.BuyDate_.Replace('.', '-'); if (ExData_BuyCount != 0)// 구매갯수를 따로 뽑아야 하는 채널에서만 { tRange = ws.Cells[nCurrentRow, ExData_BuyCount]; pExcelData.BuyCount_ = Convert.ToInt32(tRange.Value2); } SplitDealAndInsertExcelData(pExcelData, comparesitename); } catch (System.Exception ex) { LogManager.Instance.Log(string.Format("엑셀 파싱 에러 : {0}", ex.Message)); nCurrentRow++; continue; } nCurrentRow++; } wb.Close(false, Type.Missing, Type.Missing); ap.Quit(); Marshal.FinalReleaseComObject(ws); Marshal.FinalReleaseComObject(wb); Marshal.FinalReleaseComObject(ap); ws = null; wb = null; ap = null; GC.Collect(); return(true); }
// 크롤링 정보 로드 하기 public static bool GetCrawlerInfo(SqlHelper dbHelper, Int32 nChannelIdx, Int32 PartnerIdx, ref LQCrawlerInfo pLQCrawlerInfo) { bool bResult = false; try { Dictionary<string, object> argdic = new Dictionary<string, object>(); argdic.Add("xChannelIdx", nChannelIdx.ToString()); argdic.Add("xPartnerIdx", PartnerIdx.ToString()); MySqlDataReader datareader = dbHelper.call_proc("sp_select_Crawler_Info", argdic); while (datareader.Read()) { bResult = true; pLQCrawlerInfo = new LQCrawlerInfo(); pLQCrawlerInfo.nIdx_ = Convert.ToInt32(datareader["idx"]); pLQCrawlerInfo.Channel_Idx_ = Convert.ToInt32(datareader["Channel_Idx"]); pLQCrawlerInfo.ChannelName_ = Convert.ToString(datareader["AuthorityName"]); pLQCrawlerInfo.PartnerSeq_ = Convert.ToInt32(datareader["PartnerSeq"]); pLQCrawlerInfo.PartnerName_ = Convert.ToString(datareader["PartnerName"]); pLQCrawlerInfo.MainUrl_ = Convert.ToString(datareader["MainUrl"]); // 메인 URL pLQCrawlerInfo.LoginIDTAG_ = Convert.ToString(datareader["LoginIDTAG"]); pLQCrawlerInfo.LoginPWTAG_ = Convert.ToString(datareader["LoginPWTAG"]); pLQCrawlerInfo.LoginUrl_ = Convert.ToString(datareader["LoginUrl"]); pLQCrawlerInfo.LoginParam_ = Convert.ToString(datareader["LoginParam"]); // 로그인 셋팅값 pLQCrawlerInfo.LoginID_ = Convert.ToString(datareader["LoginID"]); // 로그인 아이디 pLQCrawlerInfo.LoginPW_ = Convert.ToString(datareader["LoginPW"]); // 로그인 암호 pLQCrawlerInfo.LoginMethod_ = Convert.ToString(datareader["LoginMethod"]); // 로그인 방식 pLQCrawlerInfo.LoginEvent_ = Convert.ToString(datareader["LoginEvent"]); // 로그인 버튼 이벤트 pLQCrawlerInfo.LoginCheck_ = Convert.ToString(datareader["LoginCheck"]); pLQCrawlerInfo.LoginType_ = Convert.ToChar(datareader["LoginType"]); pLQCrawlerInfo.ExcelDownUrl_ = Convert.ToString(datareader["ExcelDownUrl"]); // 엑셀 다운로드 URL pLQCrawlerInfo.ExcelDownParameter_ = Convert.ToString(datareader["ExcelDownParameter"]); pLQCrawlerInfo.ExcelDownMethod_ = Convert.ToString(datareader["ExcelDownMethod"]); // 엑셀 다운로드 방식 pLQCrawlerInfo.ExcelDownRule_ = Convert.ToString(datareader["ExcelDownRule"]); pLQCrawlerInfo.UseGoodsUrl_ = Convert.ToString(datareader["UseGoodsUrl"]); pLQCrawlerInfo.UseGoodsParam_ = Convert.ToString(datareader["UseGoodsParam"]); pLQCrawlerInfo.UseGoodsCheck_ = Convert.ToString(datareader["UseGoodsCheck"]); pLQCrawlerInfo.UseGoodsRule_ = Convert.ToString(datareader["UseGoodsRule"]); pLQCrawlerInfo.UseUserUrl_ = Convert.ToString(datareader["UseUserUrl"]); pLQCrawlerInfo.UseUserParam_ = Convert.ToString(datareader["UseUserParam"]); pLQCrawlerInfo.UseUserCheck_ = Convert.ToString(datareader["UseUserCheck"]); pLQCrawlerInfo.NUseGoodsUrl_ = Convert.ToString(datareader["NUseGoodsUrl"]); pLQCrawlerInfo.NUseGoodsParam_ = Convert.ToString(datareader["NUseGoodsParam"]); pLQCrawlerInfo.NUseGoodsCheck_ = Convert.ToString(datareader["NUseGoodsCheck"]); pLQCrawlerInfo.NUseGoodsRule_ = Convert.ToString(datareader["NUseGoodsRule"]); pLQCrawlerInfo.NUseUserUrl_ = Convert.ToString(datareader["NUseUserUrl"]); pLQCrawlerInfo.NUseUserParam_ = Convert.ToString(datareader["NUseUserParam"]); pLQCrawlerInfo.NUseUserCheck_ = Convert.ToString(datareader["NUseUserCheck"]); pLQCrawlerInfo.RUseUserUrl_ = Convert.ToString(datareader["RUseUserUrl"]); pLQCrawlerInfo.RUseUserParam_ = Convert.ToString(datareader["RUseUserParam"]); pLQCrawlerInfo.RUseUserCheck_ = Convert.ToString(datareader["RUseUserCheck"]); pLQCrawlerInfo.ExData_Start_ = Convert.ToInt32(datareader["ExData_Start"]); pLQCrawlerInfo.ExData_Coupncode_ = Convert.ToInt32(datareader["ExData_Coupncode"]); pLQCrawlerInfo.ExData_Buydate_ = Convert.ToInt32(datareader["ExData_Buydate"]); pLQCrawlerInfo.ExData_Option_ = Convert.ToInt32(datareader["ExData_Option"]); pLQCrawlerInfo.ExData_Cancel_ = Convert.ToInt32(datareader["ExData_Cancel"]); pLQCrawlerInfo.ExData_Count_ = Convert.ToInt32(datareader["ExData_Count"]); pLQCrawlerInfo.ExData_Use_ = Convert.ToInt32(datareader["ExData_Use"]); pLQCrawlerInfo.ExData_Buyer_ = Convert.ToInt32(datareader["ExData_Buyer"]); pLQCrawlerInfo.ExData_Buyphone_ = Convert.ToInt32(datareader["ExData_Buyphone"]); pLQCrawlerInfo.ExData_Price_ = Convert.ToInt32(datareader["ExData_Price"]); pLQCrawlerInfo.ExData_UseCheck_ = Convert.ToString(datareader["ExData_UseCheck"]); pLQCrawlerInfo.ExData_CancelCheck_ = Convert.ToString(datareader["ExData_CancelCheck"]); break; } datareader.Close(); datareader.Dispose(); datareader = null; } catch (System.Exception ex) { NewLogManager2.Instance.Log(string.Format("Error bool GetCrawlerInfo - {0}", ex.Message)); bResult = false; } return bResult; }
public virtual void MakeDBData(tblOrderData pExcelData) { Dictionary <string, tblOrderData> pOrderList = OrderManager.Instance.GetOrderList(); LQStructures.LQCrawlerInfo pCrawler = CrawlerManager.Instance.GetCrawlerInfo(); // DB에 저장되어 있던 값이 아니면 들어온 값이라면 if (pOrderList.ContainsKey(pExcelData.channelOrderCode_) == false) { // 상태값 변경 if (pExcelData.ExData_Use_ == pCrawler.ExData_UseCheck_) { pExcelData.State_ = DealStateManager.Instance.StateString_[(Int32)DealStateEnum.A]; } else if (pExcelData.ExData_Cancel_ == pCrawler.ExData_CancelCheck_) { pExcelData.State_ = DealStateManager.Instance.StateString_[(Int32)DealStateEnum.FINISH_REFUND]; } else if (pExcelData.ExData_Use_ == "정산완료" || pExcelData.ExData_Cancel_ == "정산완료") { pExcelData.State_ = DealStateManager.Instance.StateString_[(Int32)DealStateEnum.A]; } else { pExcelData.State_ = DealStateManager.Instance.StateString_[(Int32)DealStateEnum.FINISH_BUY]; } // 신규 데이터라면 일단 DB에 넣는다. pExcelData.NeedDBProc_ = tblOrderData.NeedDBProc.Insert; pExcelData.bFindInExcel_ = true; pExcelData.bProcessed_ = true; pOrderList.Add(pExcelData.channelOrderCode_, pExcelData); } else { tblOrderData pDBData = pOrderList[pExcelData.channelOrderCode_]; if (pExcelData.State_ == pDBData.State_) { return; } pDBData.bFindInExcel_ = true; pDBData.bProcessed_ = true; if (pDBData.State_ == DealStateManager.Instance.StateString_[(Int32)DealStateEnum.FINISH_RESERVED]) {// 예약한 상태 사용처리 해야함 } else if (pDBData.State_ == DealStateManager.Instance.StateString_[(Int32)DealStateEnum.USER_WANT_REFUND]) {// 사용 취소를 요청한 상태 사용취소처리 해야함 } else if (pDBData.State_ == DealStateManager.Instance.StateString_[(Int32)DealStateEnum.FINISH_BUY]) {// DB 에는 구매만 한 상태인데, 엑셀에는 취소 요청을 해둔 상태라면 환불이다. if (pExcelData.ExData_Cancel_ == pCrawler.ExData_CancelCheck_) { pDBData.State_ = DealStateManager.Instance.StateString_[(Int32)DealStateEnum.USER_WANT_REFUND]; } } else if (pDBData.State_ == DealStateManager.Instance.StateString_[(Int32)DealStateEnum.USED]) { // 사용 처리된 상태인데, 뭔가 해줘야 할게 있는가? } else if (pDBData.State_ == DealStateManager.Instance.StateString_[(Int32)DealStateEnum.FINISH_REFUND]) {// 환불이 끝난 상태 아무것도 하지 않는다. } else { //pCrawler.ExData_UseCheck_ if (pExcelData.ExData_Use_.IndexOf(pCrawler.ExData_UseCheck_) >= 0) { pDBData.State_ = DealStateManager.Instance.StateString_[(Int32)DealStateEnum.A]; pDBData.NeedDBProc_ = tblOrderData.NeedDBProc.Update; LogManager.Instance.Log(string.Format("채널에서 이미 사용처리 되어 있어서 DB 값만 바꾸자.{0}", pDBData.channelOrderCode_)); } else { string log = string.Format("C:{0}, CP:{1}, S:{2}, {3}, {4} " , pDBData.channelSeq_, pDBData.channelOrderCode_, pDBData.State_, pExcelData.ExData_Cancel_, pExcelData.ExData_Use_); LogManager.Instance.Log(log); } } } }
// 상품 판매 다운로드하고 데이터 정리 public virtual bool DownloadExcelAndDataMake() { Dictionary <string, string> GoodsDownInfo = OrderManager.Instance.GetGoodsList(); LQStructures.LQCrawlerInfo pCrawler = CrawlerManager.Instance.GetCrawlerInfo(); DateTime dtNow = DateTime.Now; // 하위 폴더 만들기 string makefolder = HKLibrary.UTIL.HKFileHelper.GetCurrentDirectory(); makefolder += "\\"; makefolder += pCrawler.Channel_Idx_.ToString(); makefolder += "\\"; makefolder += dtNow.ToShortDateString(); HKLibrary.UTIL.HKFileHelper.MakeFolder(makefolder); Dictionary <Int32, ChannelGoodInfo> pInfoList = CrawlerManager.Instance.GetGoodsInfo(); foreach (var pData in pInfoList) { ChannelGoodInfo pGoodInfo = pData.Value; string downString = makefolder; downString += "\\"; downString += pGoodInfo.Goods_Code_; downString += "_"; downString += Convert.ToString(dtNow.Ticks); downString += ".xls"; // 이미 다운로드가 끝난 파일이라면 다시 다운로드 하지 않는다. if (GoodsDownInfo.ContainsKey(pGoodInfo.Goods_Code_) == false) { try { string method = pCrawler.ExcelDownMethod_; string url = pCrawler.ExcelDownUrl_; url = url.Replace("{GoodsCode}", pGoodInfo.Goods_Code_); string sendparameter = pCrawler.ExcelDownParameter_; string eDate = ""; string sData = ""; if (pGoodInfo.eDateFormat_ != null) { DateTime beforeData = dtNow.AddDays(-7); // 이지웰 건수가 많으면 데이터를 못들고옴, 10일전 건수만 들고오게 함 eDate = string.Format(pGoodInfo.eDateFormat_, dtNow.Year, dtNow.Month, dtNow.Day); sData = string.Format(pGoodInfo.eDateFormat_, beforeData.Year, beforeData.Month, beforeData.Day); } sendparameter = sendparameter.Replace("{GoodsCode}", pGoodInfo.Goods_Code_); sendparameter = sendparameter.Replace("{sDate}", sData); sendparameter = sendparameter.Replace("{eDate}", eDate); HttpWebResponse pResponse = HKHttpWebRequest.ReqHttpRequest(method, url, sendparameter, cookie_, null, null, 180000); if (pResponse.CharacterSet == "" || pResponse.CharacterSet == "euc-kr" || pResponse.CharacterSet == "EUC-KR") { FileStream fs = File.OpenWrite(downString); string d = pResponse.CharacterSet; Stream responsestream = pResponse.GetResponseStream(); byte[] buffer = new byte[2048]; long totalBytesRead = 0; int bytesRead; while ((bytesRead = responsestream.Read(buffer, 0, buffer.Length)) > 0) { totalBytesRead += bytesRead; fs.Write(buffer, 0, bytesRead); } fs.Close(); fs.Dispose(); } else { TextReader textReader = (TextReader) new StreamReader(pResponse.GetResponseStream(), Encoding.GetEncoding(pResponse.CharacterSet)); string htmlBuffer = textReader.ReadToEnd(); HKLibrary.UTIL.HKFileHelper.SaveToFile(downString, htmlBuffer); textReader.Close(); textReader.Dispose(); } } catch (System.Exception ex) { LogManager.Instance.Log(ex.Message); continue; } GoodsDownInfo.Add(pGoodInfo.Goods_Code_, downString); } LoadExcelAndInsertList(GoodsDownInfo[pGoodInfo.Goods_Code_], pGoodInfo.GoodsAttrType_, false, pGoodInfo.GoodsName_); } return(true); }
public override bool LoadExcelAndInsertList(string filepath, Int32 GoodsAttrType, bool bFixedType, string goodsname) { LQStructures.LQCrawlerInfo pCrawlerInfo = CrawlerManager.Instance.GetCrawlerInfo(); Microsoft.Office.Interop.Excel.Application ap = null; Workbook wb = null; Worksheet ws = null; HKExcelHelper.GetWorkSheet(filepath, ref ap, ref wb, ref ws); Range tRange = null; string tempString = ""; string comparesitename = ""; string beforeOrderCode = ""; Int32 nCurrentRow = 0; Int32 ExData_Option = 0; Int32 ExData_Coupncode = 0; Int32 ExData_Buyer = 0; Int32 ExData_Cancel = 0; Int32 ExData_Use = 0; Int32 ExData_Buyphone = 0; Int32 ExData_Price = 0; Int32 ExData_BuyDate = 0; Int32 ExData_BuyCount = 0; if (bFixedType == true) {// 레저큐 양식일때는 고정값으로 nCurrentRow = 2; ExData_Option = 4; ExData_Coupncode = 3; ExData_Buyer = 1; ExData_Cancel = 6; ExData_Use = 6; ExData_Buyphone = 2; ExData_Price = 5; ExData_BuyDate = 7; ExData_BuyCount = 8; } else { nCurrentRow = pCrawlerInfo.ExData_Start_; ExData_Option = pCrawlerInfo.ExData_Option_; ExData_Coupncode = pCrawlerInfo.ExData_Coupncode_; ExData_Buyer = pCrawlerInfo.ExData_Buyer_; ExData_Cancel = pCrawlerInfo.ExData_Cancel_; ExData_Use = pCrawlerInfo.ExData_Use_; ExData_Buyphone = pCrawlerInfo.ExData_Buyphone_; ExData_Price = pCrawlerInfo.ExData_Price_; ExData_BuyDate = pCrawlerInfo.ExData_Buydate_; ExData_BuyCount = pCrawlerInfo.ExData_Count_; // 티몬을 위한 변경 if (GoodsAttrType == 1) { nCurrentRow = 3; ExData_Option = 6; ExData_Coupncode = 3; ExData_Buyer = 1; ExData_Cancel = 8; ExData_Use = 8; ExData_Buyphone = 2; ExData_Price = 7; ExData_BuyDate = 9; } } while (true) { try { tRange = ws.Cells[nCurrentRow, 1]; comparesitename = Convert.ToString(tRange.Value2); tRange = ws.Cells[nCurrentRow, ExData_Option]; tempString = Convert.ToString(tRange.Value2); if (tempString == null) { break; } string SecondOrderCode = ""; Int32 tempgoodSeq = -1; tblOrderData pExcelData = new tblOrderData(); pExcelData.channelSeq_ = pCrawlerInfo.Channel_Idx_; pExcelData.authoritySeq_ = pCrawlerInfo.AuthoritySeq_; pExcelData.goodsSeq_ = tempgoodSeq; pExcelData.ExData_Option_ = tempString; pExcelData.ExData_OptionOriginal_ = tempString; if (string.IsNullOrEmpty(goodsname) == false) { pExcelData.ExData_GoodsName_ = goodsname; } tRange = ws.Cells[nCurrentRow, ExData_Coupncode]; if (tRange == null) { break; } pExcelData.channelOrderCode_ = Convert.ToString(tRange.Value2); if (pExcelData.channelOrderCode_ == null) { break; } pExcelData.channelOrderCode_ = pExcelData.channelOrderCode_.Replace("'", ""); pExcelData.channelOrderCode_ = pExcelData.channelOrderCode_.Trim(); // 공백 제거 pExcelData.channelOrderCode_ = pExcelData.channelOrderCode_ + "_" + comparesitename; //Second CouponCode tRange = ws.Cells[nCurrentRow, 2]; SecondOrderCode = Convert.ToString(tRange.Value2); pExcelData.channelOrderCode_ = pExcelData.channelOrderCode_ + "_" + SecondOrderCode; tRange = ws.Cells[nCurrentRow, ExData_Buyer]; pExcelData.orderName_ = Convert.ToString(tRange.Value2); pExcelData.orderName_ = pExcelData.orderName_.Trim(); Regex regex = new Regex(@"\((?<OrderName>\S+)\)"); Match mc = regex.Match(pExcelData.orderName_); if (mc.Success) { pExcelData.orderName_ = Convert.ToString(mc.Groups["OrderName"].Value); } if (pExcelData.orderName_ == null) { pExcelData.orderName_ = ""; } tRange = ws.Cells[nCurrentRow, ExData_Cancel]; pExcelData.ExData_Cancel_ = tRange.Value2; if (pExcelData.ExData_Cancel_ == null) { pExcelData.ExData_Cancel_ = ""; } tRange = ws.Cells[nCurrentRow, ExData_Use]; pExcelData.ExData_Use_ = tRange.Value2; if (pExcelData.ExData_Use_ == null) { pExcelData.ExData_Use_ = ""; } tRange = ws.Cells[nCurrentRow, ExData_Buyphone]; pExcelData.orderPhone_ = Convert.ToString(tRange.Value2); pExcelData.orderPhone_ = "0" + pExcelData.orderPhone_; if (pExcelData.orderPhone_ == null) { pExcelData.orderPhone_ = ""; } pExcelData.orderPhone_ = Regex.Replace(pExcelData.orderPhone_, @"^(01[016789]{1}|02|0[3-9]{1}[0-9]{1})-?([0-9]{3,4})-?([0-9]{4})$", @"$1-$2-$3"); if (ExData_Price != 0) { tRange = ws.Cells[nCurrentRow, ExData_Price]; if (tRange.Value2 != null) {// 돈에 , 가 있으면 제거하자. tempString = Convert.ToString(tRange.Value2); tempString = tempString.Replace(",", ""); pExcelData.orderSettlePrice_ = Convert.ToInt32(tempString); } } tRange = ws.Cells[nCurrentRow, ExData_BuyDate]; DateTime dta = Convert.ToDateTime(tRange.Value2); pExcelData.BuyDate_ = dta.ToString("u"); pExcelData.BuyDate_ = pExcelData.BuyDate_.Replace("Z", ""); if (ExData_BuyCount != 0)// 구매갯수를 따로 뽑아야 하는 채널에서만 { tRange = ws.Cells[nCurrentRow, ExData_BuyCount]; pExcelData.BuyCount_ = Convert.ToInt32(tRange.Value2); } SplitDealAndInsertExcelData(pExcelData, comparesitename); } catch (System.Exception ex) { LogManager.Instance.Log(string.Format("엑셀 파싱 에러 : {0}", ex.Message)); nCurrentRow++; continue; } nCurrentRow++; } wb.Close(false, Type.Missing, Type.Missing); ap.Quit(); Marshal.FinalReleaseComObject(ws); Marshal.FinalReleaseComObject(wb); Marshal.FinalReleaseComObject(ap); ws = null; wb = null; ap = null; GC.Collect(); return(true); }
// 모든 크롤러 정보 로드 하기 public bool SelectAllChannelInfos() { try { SqlHelper pMySqlDB = new SqlHelper(); pMySqlDB.Connect(CrawlerInfoManager.Instance.method_, CrawlerInfoManager.Instance.dbip_, CrawlerInfoManager.Instance.dbport_, CrawlerInfoManager.Instance.dbname_ , CrawlerInfoManager.Instance.dbaccount_, CrawlerInfoManager.Instance.dbpw_, CrawlerInfoManager.Instance.sshhostname_, CrawlerInfoManager.Instance.sshuser_ , CrawlerInfoManager.Instance.sshpw_); MySqlDataReader datareader = pMySqlDB.call_proc("sp_select_All_Crawler_Info", null); while (datareader.Read()) { LQCrawlerInfo pInfo = new LQCrawlerInfo(); pInfo.nIdx_ = Convert.ToInt32(datareader["idx"]); pInfo.Channel_Idx_ = Convert.ToInt32(datareader["Channel_Idx"]); pInfo.ChannelName_ = Convert.ToString(datareader["Channel_Name"]); pInfo.PartnerSeq_ = Convert.ToInt32(datareader["PartnerSeq"]); pInfo.PartnerName_ = Convert.ToString(datareader["PartnerName"]); // 권리사 (2014-07-30) . 추가 pInfo.AuthoritySeq_ = Convert.ToInt32(datareader["AuthoritySeq"]); pInfo.AuthoriryName_ = Convert.ToString(datareader["AuthorityName"]); pInfo.MainUrl_ = Convert.ToString(datareader["MainUrl"]); // 메인 URL pInfo.LoginIDTAG_ = Convert.ToString(datareader["LoginIDTAG"]); pInfo.LoginPWTAG_ = Convert.ToString(datareader["LoginPWTAG"]); pInfo.LoginUrl_ = Convert.ToString(datareader["LoginUrl"]); pInfo.LoginParam_ = Convert.ToString(datareader["LoginParam"]); // 로그인 셋팅값 pInfo.LoginID_ = Convert.ToString(datareader["LoginID"]); // 로그인 아이디 pInfo.LoginPW_ = Convert.ToString(datareader["LoginPW"]); // 로그인 암호 pInfo.LoginMethod_ = Convert.ToString(datareader["LoginMethod"]); // 로그인 방식 pInfo.LoginEvent_ = Convert.ToString(datareader["LoginEvent"]); // 로그인 버튼 이벤트 pInfo.LoginCheck_ = Convert.ToString(datareader["LoginCheck"]); pInfo.LoginType_ = Convert.ToChar(datareader["LoginType"]); pInfo.ExcelDownUrl_ = Convert.ToString(datareader["ExcelDownUrl"]); // 엑셀 다운로드 URL pInfo.ExcelDownParameter_ = Convert.ToString(datareader["ExcelDownParameter"]); pInfo.ExcelDownMethod_ = Convert.ToString(datareader["ExcelDownMethod"]); // 엑셀 다운로드 방식 pInfo.ExcelDownRule_ = Convert.ToString(datareader["ExcelDownRule"]); pInfo.UseGoodsUrl_ = Convert.ToString(datareader["UseGoodsUrl"]); pInfo.UseGoodsParam_ = Convert.ToString(datareader["UseGoodsParam"]); pInfo.UseGoodsCheck_ = Convert.ToString(datareader["UseGoodsCheck"]); pInfo.UseGoodsRule_ = Convert.ToString(datareader["UseGoodsRule"]); pInfo.UseUserUrl_ = Convert.ToString(datareader["UseUserUrl"]); pInfo.UseUserParam_ = Convert.ToString(datareader["UseUserParam"]); pInfo.UseUserCheck_ = Convert.ToString(datareader["UseUserCheck"]); pInfo.NUseGoodsUrl_ = Convert.ToString(datareader["NUseGoodsUrl"]); pInfo.NUseGoodsParam_ = Convert.ToString(datareader["NUseGoodsParam"]); pInfo.NUseGoodsCheck_ = Convert.ToString(datareader["NUseGoodsCheck"]); pInfo.NUseGoodsRule_ = Convert.ToString(datareader["NUseGoodsRule"]); pInfo.NUseUserUrl_ = Convert.ToString(datareader["NUseUserUrl"]); pInfo.NUseUserParam_ = Convert.ToString(datareader["NUseUserParam"]); pInfo.NUseUserCheck_ = Convert.ToString(datareader["NUseUserCheck"]); pInfo.RUseUserUrl_ = Convert.ToString(datareader["RUseUserUrl"]); pInfo.RUseUserParam_ = Convert.ToString(datareader["RUseUserParam"]); pInfo.RUseUserCheck_ = Convert.ToString(datareader["RUseUserCheck"]); pInfo.ExData_Start_ = Convert.ToInt32(datareader["ExData_Start"]); pInfo.ExData_Coupncode_ = Convert.ToInt32(datareader["ExData_Coupncode"]); pInfo.ExData_Buydate_ = Convert.ToInt32(datareader["ExData_Buydate"]); pInfo.ExData_Option_ = Convert.ToInt32(datareader["ExData_Option"]); pInfo.ExData_Cancel_ = Convert.ToInt32(datareader["ExData_Cancel"]); pInfo.ExData_Use_ = Convert.ToInt32(datareader["ExData_Use"]); pInfo.ExData_Buyer_ = Convert.ToInt32(datareader["ExData_Buyer"]); pInfo.ExData_Count_ = Convert.ToInt32(datareader["ExData_Count"]); pInfo.ExData_Buyphone_ = Convert.ToInt32(datareader["ExData_Buyphone"]); pInfo.ExData_Price_ = Convert.ToInt32(datareader["ExData_Price"]); pInfo.ExData_UseCheck_ = Convert.ToString(datareader["ExData_UseCheck"]); pInfo.ExData_CancelCheck_ = Convert.ToString(datareader["ExData_CancelCheck"]); CrawlerInfoList_.Add(pInfo.AuthoritySeq_, pInfo); } datareader.Close(); datareader.Dispose(); datareader = null; } catch (System.Exception ex) { LogManager.Instance.Log(string.Format("채널정보 로드 실패 {0}",ex.Message)); return false; } return true; }
public void SetCrawlerInfo(LQStructures.LQCrawlerInfo pInfo) { CrawlerInfo_ = pInfo; }