예제 #1
0
        /// <summary>
        /// -1 从网页抓取数据失败,0 从网页抓取数据条数和数据库相同只更新时间
        /// 返回抓取数据条数
        /// </summary>
        /// <param name="strMsg">输出信息,用于显示</param>
        /// <param name="crawlTime">抓取时间</param>
        /// <returns></returns>
        public void Update4KInfo()
        {
            RealOrFake4KWebDataCaptureResult rst = new RealOrFake4KWebDataCaptureResult();

            rst.crawlTime = DateTime.Now;

            string    errMsg  = "";
            DataTable crawlDt = CrawlData(ref errMsg, this.crawlURL);

            if (crawlDt == null || crawlDt.Rows.Count == 0)
            {
                rst.strMsg = string.Format("从网页\n{0}\n抓取数据失败\n{1}",
                                           this.crawlURL, errMsg);
                rst.code = -1;
                this.threadWebDataCaptureCallback?.Invoke(rst);
                this.threadWebDataCaptureFinish?.Invoke();
                return;
            }

            int diskCount = sqlData.CountRowsOfDiskFromFilmInfo(
                CommonString.RealOrFake4KDiskName);

            if ((diskCount - 1) >= crawlDt.Rows.Count)
            {
                // 更新时间
                int affectedCount =
                    sqlData.UpdateDiskRealOrFake4KInModifyTimeFromDiskInfo(
                        rst.crawlTime);
                Debug.Assert(diskCount == affectedCount);

                rst.strMsg = string.Format(
                    "从网页\n{0}\n抓取数据条数 {1} 小于或等于数据库已存在条数 {2}\n不更新数据库信息",
                    this.crawlURL, crawlDt.Rows.Count, diskCount - 1);
                rst.code = 0;
                this.threadWebDataCaptureCallback?.Invoke(rst);
                this.threadWebDataCaptureFinish?.Invoke();
                return;
            }

            sqlData.DeleteByDiskDescribeFromFilmInfo(CommonString.RealOrFake4KDiskName);

            int maxId   = sqlData.GetMaxIdOfFilmInfo();
            int startId = maxId + 1;
            int diskId  = startId;

            DataTable dt = CommonDataTable.GetFilmInfoDataTable();

            DataRow drDisk = dt.NewRow();

            drDisk["id"]           = startId++;
            drDisk["name"]         = CommonString.RealOrFake4KDiskName;
            drDisk["path"]         = "------";
            drDisk["size"]         = -1;
            drDisk["create_t"]     = rst.crawlTime;
            drDisk["modify_t"]     = rst.crawlTime;
            drDisk["is_folder"]    = true;
            drDisk["to_watch"]     = false;
            drDisk["to_watch_ex"]  = false;
            drDisk["s_w_t"]        = System.Data.SqlTypes.SqlDateTime.MinValue.Value;
            drDisk["to_delete"]    = false;
            drDisk["to_delete_ex"] = false;
            drDisk["s_d_t"]        = System.Data.SqlTypes.SqlDateTime.MinValue.Value;
            drDisk["content"]      = String.Empty;
            drDisk["pid"]          = -1;
            drDisk["max_cid"]      = startId - 1 + crawlDt.Rows.Count;
            drDisk["disk_desc"]    = CommonString.RealOrFake4KDiskName;
            dt.Rows.Add(drDisk);

            foreach (DataRow crawlDr in crawlDt.Rows)
            {
                DataRow dr = dt.NewRow();
                dr["id"]   = startId++;
                dr["name"] = string.Join(" | ", crawlDr.ItemArray.Cast <string>().
                                         Where(x => !string.IsNullOrWhiteSpace(x)));
                dr["path"]         = "------";
                dr["size"]         = -1;
                dr["create_t"]     = rst.crawlTime;
                dr["modify_t"]     = rst.crawlTime;
                dr["is_folder"]    = false;
                dr["to_watch"]     = false;
                dr["to_watch_ex"]  = false;
                dr["s_w_t"]        = System.Data.SqlTypes.SqlDateTime.MinValue.Value;
                dr["to_delete"]    = false;
                dr["to_delete_ex"] = false;
                dr["s_d_t"]        = System.Data.SqlTypes.SqlDateTime.MinValue.Value;
                dr["content"]      = String.Empty;
                dr["pid"]          = diskId;
                dr["max_cid"]      = startId - 1;
                dr["disk_desc"]    = CommonString.RealOrFake4KDiskName;
                dt.Rows.Add(dr);
            }

            sqlData.InsertDataToFilmInfo(dt);

            rst.strMsg = string.Format("从网页\n{0}\n抓取数据 {1} 条,已写入数据库",
                                       this.crawlURL, crawlDt.Rows.Count);
            rst.code = crawlDt.Rows.Count;
            this.threadWebDataCaptureCallback?.Invoke(rst);
            this.threadWebDataCaptureFinish?.Invoke();
        }