示例#1
0
        public const string DouBanTagsUrl    = "https://book.douban.com/tag/?view=type";//https://book.douban.com/tag/?view=cloud
        public BookDetail_middle NewDetailMiddle()
        {
            var result = new BookDetail_middle();

            result.DouBanBookInfo.DataSource = DataSource.DouBan;
            return(result);
        }
        public void VerifyBookData(BookDetail_middle middle)
        {
            string msg = "[DouBanBookRepository]:";

            if (string.IsNullOrEmpty(middle.DouBanBookInfo.Code))
            {
                throw new Exception(msg + "没有BookCode");
            }
            if (string.IsNullOrEmpty(middle.DouBanBookInfo.AuthorCode))
            {
                throw new Exception(msg + "没有作者Code");
            }
        }
        private void InitData(string entryUrl)
        {
            _entryUrl = entryUrl;
            int sp = _entryUrl.IndexOf("subject") + "subject/".Length;
            int ep = _entryUrl.IndexOf("/", sp + 1);

            if (ep == -1)
            {
                ep = _entryUrl.Length;
            }

            _DouBanBookId = _entryUrl.Substring(sp, ep - sp);

            _bookDetailData = NewDetailMiddle();
            _bookDetailData.DouBanBookInfo.SourceBookId = _DouBanBookId;
            _bookDetailData.DouBanBookInfo.Code         = GenCodeHelper.Book_Code(DouBanAbbr, _DouBanBookId); //$"{DouBanAbbr}_{_DouBanBookId}";
        }
示例#4
0
        public async void runAsync(string url)
        {
            NLogUtil.InfoTxt($"开始抓爬单本书:{url}");
            BookDetail_middle task_midData = null;

            try
            {
                task_midData = await _DetailCrawler.CrawlerAsync(url);
            }
            catch (ExceptionProxyConnect epc)
            {
                throw epc;
            }


            NLogUtil.InfoTxt($"抓爬结束");
            //    _DouBanBookRepository.Test(task_midData);
            //   var rBook = _BookDb.AddOrUpdate_MasterData<EBookInfo>(middle.DouBanBookInfo);
            await _DouBanBookRepository.HandleBookMiddleAsync(task_midData);
        }
        /// <summary>
        /// 处理抓爬的书本Middle数据
        /// </summary>
        /// <param name="middle"></param>
        public async Task <bool> HandleBookMiddleAsync(BookDetail_middle middle)
        {
            try
            {
                NLogUtil.InfoTxt($"开始处理书本到数据库:{middle.DouBanBookInfo.Code}-{middle.DouBanBookInfo.Title}");
                VerifyBookData(middle);

                var rAll = await _Db.Ado.UseTranAsync(() => {
                    try
                    {
                        //书本作者
                        var ePerson = _PersonDb.AddOrUpdate_MasterData <EPerson>(middle.Author);
                    }
                    catch (Exception ex)
                    {
                        NLogUtil.ErrorTxt($"【错误】写入人物:{ex.Message}");
                    }


                    //Section
                    //   var rSection = _SectionDb.AddOrUpdate_MasterData<ESection>(middle.SectionList);
                    try
                    {
                        //书本信息
                        var rBook = _BookDb.AddOrUpdate_MasterData <EBookInfo>(middle.DouBanBookInfo);
                    }
                    catch (Exception ex)
                    {
                        NLogUtil.ErrorTxt($"【错误】写入书本:{ex.Message}");
                    }



                    try
                    {
                        //书本Tag
                        var rTag = _TagDb.AddOrUpdate_MasterData <ETag>(middle.tagList);
                    }
                    catch (Exception ex)
                    {
                        NLogUtil.ErrorTxt($"【错误】写入更新Tags:{ex.Message}");
                    }


                    //    HandleDataSection(middle.GetDataSections());
                    //书本和Tag关系
                    HandleBookTag(middle.GetBookTags());
                });


                if (!rAll.IsSuccess)
                {
                    NLogUtil.ErrorTxt($"[数据库]录入书本失败:{middle.DouBanBookInfo.Code}-{middle.DouBanBookInfo.Title} -- {rAll.ErrorMessage}");
                }
                else
                {
                    NLogUtil.InfoTxt($"【成功】处理书本到数据库:{middle.DouBanBookInfo.Code}-{middle.DouBanBookInfo.Title}");
                }
                return(rAll.IsSuccess);
            }
            catch (Exception ex)
            {
                //  _Db.Ado.RollbackTran();
                NLogUtil.ErrorTxt($"[数据库]录入书本失败:{middle.DouBanBookInfo.Code}-{middle.DouBanBookInfo.Title}--{ex.Message}");
                return(false);
            }

            //  return true;
        }
 public BookDetailCrawler(string douBanId)
 {
     _DouBanBookId   = douBanId;
     _entryUrl       = $"{DouBanBookPrefix}/subject/{douBanId}";
     _bookDetailData = NewDetailMiddle();
 }
 public BookDetailCrawler()
 {
     _bookDetailData = NewDetailMiddle();
 }