diff --git a/app/controller/Crawler.php b/app/controller/Crawler.php index f28dc6d..3615c6a 100644 --- a/app/controller/Crawler.php +++ b/app/controller/Crawler.php @@ -340,11 +340,38 @@ class Crawler extends BaseController $treeData = $service->getPositionTree($dsdm, $examid, $bmid, $userid, (string)$aa, $cookies); + // 若接口返回包装结构 { "data": [...] } / { "tree": [...] } 则取内层节点数组 + if (is_array($treeData) && isset($treeData['data']) && is_array($treeData['data'])) { + $treeData = $treeData['data']; + } + if (is_array($treeData) && isset($treeData['tree']) && is_array($treeData['tree'])) { + $treeData = $treeData['tree']; + } + $zwdmList = []; - $collectCodes = function (array $nodes) use (&$collectCodes, &$zwdmList) { + $isNocheck = function ($node) { + if (isset($node['nocheck'])) { + $v = $node['nocheck']; + if ($v === true || $v === 'true' || $v === 1) { + return true; + } + } + if (isset($node['noCheck'])) { + $v = $node['noCheck']; + if ($v === true || $v === 'true' || $v === 1) { + return true; + } + } + return false; + }; + + $collectCodes = function (array $nodes) use (&$collectCodes, &$zwdmList, $isNocheck) { foreach ($nodes as $item) { + if (!is_array($item)) { + continue; + } // 跳过包含 nocheck: true 的节点(如分组节点,不参与爬取) - if (!empty($item['nocheck'])) { + if ($isNocheck($item)) { if (!empty($item['children']) && is_array($item['children'])) { $collectCodes($item['children']); }