コード例 #1
0
        /// <summary>
        /// 爬取搜尋頁面
        /// </summary>
        /// <returns></returns>
        private bool CrawlSearchPages()
        {
            _todoItemService.DeleteExistedTodoItems();

            // 檢查上次是否有爬到一半的待辦項目
            var todoItems = _todoItemService.GetAll();

            if (!todoItems.Any())
            {
                SearchKeywords();

                // 取得搜尋頁面所有項目
                var itemIds = _searchService.GetAllItemNames();

                // 加入尚未處理的項目到待辦項目佇列中
                _todoItemService.AddTodoItems(itemIds.Select(x => new TodoItem {
                    ItemId = x
                }).ToList());

                // 取得可處理的待辦項目
                todoItems = _todoItemService.GetAll();

                // 搜尋頁面已處理完則結束
                if (!todoItems.Any())
                {
                    return(false);
                }
            }

            foreach (var todoItem in todoItems)
            {
                try
                {
                    // 爬取新的履歷項目
                    var userWithItem = _itemService.GetUserWithItem(todoItem.ItemId);
                    using (var ts = new TransactionScope())
                    {
                        if (userWithItem != null)
                        {
                            _userService.AddUserWithItem(userWithItem);
                        }

                        _todoItemService.Remove(todoItem);

                        ts.Complete();
                    }
                }
                catch (Exception ex)
                {
                    _logger.LogError(30001, ex, $"TodoItem {todoItem.ItemId} Exception.");
                }
            }

            return(true);
        }