CollectorController.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controller;
  4. use App\JsonRpc\CollectorServiceInterface;
  5. use App\Tools\PublicData;
  6. use Hyperf\Di\Annotation\Inject;
  7. use Hyperf\HttpServer\Annotation\AutoController;
  8. use App\Tools\Result;
  9. use Hyperf\Validation\Contract\ValidatorFactoryInterface;
  10. use App\Constants\ErrorCode;
  11. use Hyperf\Context\Context;
  12. use App\Service\GatherQueueService;
  13. use App\Service\ImportQueueService;
  14. /**
  15. * ClassCollectorController
  16. * @package App\Controller
  17. */
  18. class CollectorController extends AbstractController
  19. {
  20. #[Inject]
  21. protected ValidatorFactoryInterface $validationFactory;
  22. #[Inject]
  23. protected GatherQueueService $Gservice;
  24. #[Inject]
  25. protected ImportQueueService $Iservice;
  26. /**
  27. * @var CollectorServiceInterface
  28. */
  29. #[Inject]
  30. private $collectorServiceClient;
  31. /**
  32. * 添加网站
  33. * @return array
  34. */
  35. public function addWeb()
  36. {
  37. $requireData = $this->request->all();
  38. $validator = $this->validationFactory->make(
  39. $requireData,
  40. [
  41. 'name'=> 'required',
  42. 'url'=> 'required',
  43. ],
  44. [
  45. 'name.required' => '网站名称不能为空',
  46. 'url.required' => '网站地址不能为空',
  47. ]
  48. );
  49. if ($validator->fails()) {
  50. $errorMessage = $validator->errors()->first();
  51. return Result::error($errorMessage);
  52. }
  53. $result = $this->collectorServiceClient->addWeb($requireData);
  54. if ($result['code'] != ErrorCode::SUCCESS) {
  55. return Result::error($result['message'],0,[]);
  56. }
  57. return Result::success($result['data']);
  58. }
  59. /**
  60. * 获取及搜索网站
  61. * @return array
  62. */
  63. public function getWeb()
  64. {
  65. $requireData = $this->request->all();
  66. $validator = $this->validationFactory->make(
  67. $requireData,
  68. [
  69. 'page'=> 'required',
  70. 'pageSize'=> 'required',
  71. ],
  72. [
  73. 'page.required' => '第几页不能为空',
  74. 'pageSize.required' => '每页显示条数不能为空',
  75. ]
  76. );
  77. if(isset($requireData['keyWord'])){
  78. $validator = $this->validationFactory->make(
  79. $requireData,
  80. [
  81. 'keyWord'=> 'required'
  82. ],
  83. [
  84. 'keyWord.required' => '搜索词不能为空'
  85. ]
  86. );
  87. }
  88. if ($validator->fails()) {
  89. $errorMessage = $validator->errors()->first();
  90. return Result::error($errorMessage);
  91. }
  92. $result = $this->collectorServiceClient->getWeb($requireData);
  93. if ($result['code'] != ErrorCode::SUCCESS) {
  94. return Result::error($result['message'],0,[]);
  95. }
  96. return Result::success($result['data']);
  97. }
  98. /**
  99. * 修改网站
  100. * @return array
  101. */
  102. public function upWeb()
  103. {
  104. $requireData = $this->request->all();
  105. $validator = $this->validationFactory->make(
  106. $requireData,
  107. [
  108. 'name'=> 'required',
  109. 'url'=> 'required',
  110. 'id' => 'required'
  111. ],
  112. [
  113. 'name.required' => '网站名称不能为空',
  114. 'url.required' => '网站地址不能为空',
  115. 'id.required' => '网站id不能为空'
  116. ]
  117. );
  118. if ($validator->fails()) {
  119. $errorMessage = $validator->errors()->first();
  120. return Result::error($errorMessage);
  121. }
  122. $result = $this->collectorServiceClient->upWeb($requireData);
  123. if ($result['code'] != ErrorCode::SUCCESS) {
  124. return Result::error($result['message'],0,[]);
  125. }
  126. return Result::success($result['data']);
  127. }
  128. /**
  129. * 删除网站
  130. * @return array
  131. */
  132. public function delWeb()
  133. {
  134. $requireData = $this->request->all();
  135. $validator = $this->validationFactory->make(
  136. $requireData,
  137. [
  138. 'id' => 'required'
  139. ],
  140. [
  141. 'id.required' => '网站id不能为空'
  142. ]
  143. );
  144. if ($validator->fails()) {
  145. $errorMessage = $validator->errors()->first();
  146. return Result::error($errorMessage);
  147. }
  148. $result = $this->collectorServiceClient->delWeb($requireData);
  149. if ($result['code'] != ErrorCode::SUCCESS) {
  150. return Result::error($result['message'],0,[]);
  151. }
  152. return Result::success($result['data']);
  153. }
  154. /**
  155. * 添加规则任务
  156. * @return array
  157. */
  158. public function addRule()
  159. {
  160. $requireData = $this->request->all();
  161. $validator = $this->validationFactory->make(
  162. $requireData,
  163. [
  164. 'name' => 'required',
  165. 'web_id' => 'required',
  166. 'type' => 'required'
  167. ],
  168. [
  169. 'name.required' => '任务规则名称不能为空',
  170. 'web_id.required' => '网站id不能为空',
  171. 'type.required' => '网站类型不能为空'
  172. ]
  173. );
  174. if ($validator->fails()) {
  175. $errorMessage = $validator->errors()->first();
  176. return Result::error($errorMessage);
  177. }
  178. switch ($requireData['type']){
  179. case 1:
  180. $validator = $this->validationFactory->make(
  181. $requireData,
  182. [
  183. 'first_url' => 'required',
  184. 'second_start' => 'required',
  185. 'second_num' => 'required',
  186. 'second_end' => 'required',
  187. 'end_pagenum' => 'required',
  188. 'start' => 'required',
  189. 'title' => 'required',
  190. 'content' => 'required'
  191. ],
  192. [
  193. 'first_url.required' => '第1页网址不能为空',
  194. 'second_start.required' => '第2页网址开头不能为空',
  195. 'second_num.required' => '第2页代码页数不能为空',
  196. 'second_end.required' => '第2页网址结束字符串不能为空',
  197. 'end_pagenum.required' => '列表页结束页码不能为空',
  198. 'start.required' => '开始代码不能为空',
  199. 'title.required' => '标题标签类名不能为空',
  200. 'content.required' => '内容标签类名不能为空'
  201. ]
  202. );
  203. // var_dump("============1============");
  204. break;
  205. case 2:
  206. $validator = $this->validationFactory->make(
  207. $requireData,
  208. [
  209. 'first_url' => 'required',
  210. 'parameter' => 'required',
  211. 'start' => 'required',
  212. 'title' => 'required',
  213. 'content' => 'required',
  214. ],
  215. [
  216. 'first_url.required' => '开始采集地址不能为空',
  217. 'parameter.required' => '接口参数不能为空',
  218. 'start.required' => '列表标签不能为空',
  219. 'title.required' => '标题标签不能为空',
  220. 'content.required' => '内容标签不能为空'
  221. ]
  222. );
  223. // var_dump("============2============";
  224. break;
  225. default:
  226. $validator = $this->validationFactory->make(
  227. $requireData,
  228. [
  229. 'diy_rule' => 'required'
  230. ],
  231. [
  232. 'diy_rule.required' => '采集规则不能为空'
  233. ]
  234. );
  235. // var_dump("============3============");
  236. break;
  237. }
  238. if ($validator->fails()) {
  239. $errorMessage = $validator->errors()->first();
  240. return Result::error($errorMessage);
  241. }
  242. // return Result::success($requireData);
  243. $result = $this->collectorServiceClient->addRule($requireData);
  244. if ($result['code'] != ErrorCode::SUCCESS) {
  245. return Result::error($result['message'],0,[]);
  246. }
  247. return Result::success($result['data']);
  248. }
  249. /**
  250. * 获取并搜索任务规则
  251. * @return array
  252. */
  253. public function getRule()
  254. {
  255. $requireData = $this->request->all();
  256. $validator = $this->validationFactory->make(
  257. $requireData,
  258. [
  259. 'web_id' => 'required',
  260. 'pageSize' => 'required',
  261. 'page' => 'required'
  262. ],
  263. [
  264. 'web_id.required' => '网站id不能为空',
  265. 'pageSize.required' => '每页显示数量不能为空',
  266. 'page.required' => '第几页不能为空',
  267. ]
  268. );
  269. if(isset($requireData['keyWord'])){
  270. $validator = $this->validationFactory->make(
  271. $requireData,
  272. [
  273. 'keyWord' => 'required'
  274. ],
  275. [
  276. 'keyWord.required' => '搜索词不能为空'
  277. ]
  278. );
  279. }
  280. if ($validator->fails()) {
  281. $errorMessage = $validator->errors()->first();
  282. return Result::error($errorMessage);
  283. }
  284. $result = $this->collectorServiceClient->getRule($requireData);
  285. if ($result['code'] != ErrorCode::SUCCESS) {
  286. return Result::error($result['message'],0,[]);
  287. }
  288. return Result::success($result['data']);
  289. }
  290. /**
  291. * 获取某个规则任务
  292. * @return array
  293. */
  294. public function getOneRule()
  295. {
  296. $requireData = $this->request->all();
  297. $validator = $this->validationFactory->make(
  298. $requireData,
  299. [
  300. 'id' => 'required'
  301. ],
  302. [
  303. 'id.required' => '任务规则id不能为空'
  304. ]
  305. );
  306. if ($validator->fails()) {
  307. $errorMessage = $validator->errors()->first();
  308. return Result::error($errorMessage);
  309. }
  310. $result = $this->collectorServiceClient->getOneRule($requireData);
  311. if ($result['code'] != ErrorCode::SUCCESS) {
  312. return Result::error($result['message'],0,[]);
  313. }
  314. return Result::success($result['data']);
  315. }
  316. /**
  317. * 修改规则任务待开发
  318. * @return array
  319. */
  320. public function upRule()
  321. {
  322. $requireData = $this->request->all();
  323. $validator = $this->validationFactory->make(
  324. $requireData,
  325. [
  326. 'id' => 'required',
  327. 'name' => 'required',
  328. 'first_url' => 'required',
  329. 'second_start' => 'required',
  330. 'second_num' => 'required',
  331. 'second_end' => 'required',
  332. 'start' => 'required',
  333. 'title' => 'required',
  334. 'content' => 'required',
  335. 'source' => 'required',
  336. 'writer_class' => 'required',
  337. 'writer' => 'required'
  338. ],
  339. [
  340. 'id.required' => '任务规则id不能为空',
  341. 'name.required' => '任务规则名称不能为空',
  342. 'first_url.required' => '第2页网址开头不能为空',
  343. 'second_num.required' => '第2页代码页数不能为空',
  344. 'second_end.required' => '第2页网址结束字符串不能为空',
  345. 'start.required' => '开始代码不能为空',
  346. 'title.required' => '标题标签类名不能为空',
  347. 'content.required' => '内容标签类名不能为空',
  348. 'source.required' => '来源标签类名不能为空',
  349. 'writer_class.required' => '作者标签类名不能为空',
  350. 'writer.required' => '作者名称不能为空'
  351. ]
  352. );
  353. if ($validator->fails()) {
  354. $errorMessage = $validator->errors()->first();
  355. return Result::error($errorMessage);
  356. }
  357. $result = $this->collectorServiceClient->upRule($requireData);
  358. if ($result['code'] != ErrorCode::SUCCESS) {
  359. return Result::error($result['message'],0,[]);
  360. }
  361. return Result::success($result['data']);
  362. }
  363. /**
  364. * 删除任务规则
  365. * @return array
  366. */
  367. public function delRule()
  368. {
  369. $requireData = $this->request->all();
  370. $validator = $this->validationFactory->make(
  371. $requireData,
  372. [
  373. 'rule_id' => 'required'
  374. ],
  375. [
  376. 'rule_id.required' => '任务规则id不能为空'
  377. ]
  378. );
  379. if ($validator->fails()) {
  380. $errorMessage = $validator->errors()->first();
  381. return Result::error($errorMessage);
  382. }
  383. $result = $this->collectorServiceClient->delRule($requireData);
  384. if ($result['code'] != ErrorCode::SUCCESS) {
  385. return Result::error($result['message'],0,[]);
  386. }
  387. return Result::success($result['data']);
  388. }
  389. /**
  390. * 开始采集
  391. * @return array
  392. */
  393. public function sendCrawler()
  394. {
  395. $data = [];
  396. $data['admin_user_id'] = Context::get("UserId");
  397. $data['time'] = microtime();
  398. // $b = $this->Iservice->push($data,1);
  399. $result = $this->Gservice->push($data,1);
  400. return Result::success($result);
  401. }
  402. /**
  403. * 发送请求
  404. * @param $data
  405. * @return array
  406. */
  407. public function goSendCrawler($data=[])
  408. {
  409. var_dump("我要开始采集了!!!");
  410. $this->collectorServiceClient->sendCrawler($data);
  411. return Result::success([]);
  412. }
  413. /**
  414. * 获取并搜索资讯
  415. * @return array
  416. */
  417. public function getInfo()
  418. {
  419. $requireData = $this->request->all();
  420. $validator = $this->validationFactory->make(
  421. $requireData,
  422. [
  423. 'rule_id' => 'required',
  424. 'pageSize' => 'required',
  425. 'page' => 'required'
  426. ],
  427. [
  428. 'rule_id.required' => '规则任务id不能为空',
  429. 'pageSize.required' => '每页显示数量不能为空',
  430. 'page.required' => '第几页不能为空'
  431. ]
  432. );
  433. if ($validator->fails()) {
  434. $errorMessage = $validator->errors()->first();
  435. return Result::error($errorMessage);
  436. }
  437. if(isset($requireData['title'])){
  438. $validator = $this->validationFactory->make(
  439. $requireData,
  440. [
  441. 'title' => 'required'
  442. ],
  443. [
  444. 'title.required' => '资讯题目不能为空'
  445. ]
  446. );
  447. if ($validator->fails()) {
  448. $errorMessage = $validator->errors()->first();
  449. return Result::error($errorMessage);
  450. }
  451. }
  452. if(isset($requireData['source'])){
  453. $validator = $this->validationFactory->make(
  454. $requireData,
  455. [
  456. 'source' => 'required'
  457. ],
  458. [
  459. 'source.required' => '资讯来源不能为空'
  460. ]
  461. );
  462. if ($validator->fails()) {
  463. $errorMessage = $validator->errors()->first();
  464. return Result::error($errorMessage);
  465. }
  466. }
  467. if(isset($requireData['state'])){
  468. $validator = $this->validationFactory->make(
  469. $requireData,
  470. [
  471. 'state' => 'required'
  472. ],
  473. [
  474. 'state.required' => '资讯状态不能为空'
  475. ]
  476. );
  477. if ($validator->fails()) {
  478. $errorMessage = $validator->errors()->first();
  479. return Result::error($errorMessage);
  480. }
  481. }
  482. $result = $this->collectorServiceClient->getInfo($requireData);
  483. return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
  484. }
  485. /**
  486. * 获取某个资讯
  487. * @return array
  488. */
  489. public function getOneInfo()
  490. {
  491. $requireData = $this->request->all();
  492. $validator = $this->validationFactory->make(
  493. $requireData,
  494. [
  495. 'art_id' => 'required'
  496. ],
  497. [
  498. 'art_id.required' => '资讯id不能为空'
  499. ]
  500. );
  501. if ($validator->fails()) {
  502. $errorMessage = $validator->errors()->first();
  503. return Result::error($errorMessage);
  504. }
  505. $result = $this->collectorServiceClient->getOneInfo($requireData);
  506. return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
  507. }
  508. /**
  509. *修改资讯
  510. * @return array
  511. */
  512. public function upInfo()
  513. {
  514. $requireData = $this->request->all();
  515. $validator = $this->validationFactory->make(
  516. $requireData,
  517. [
  518. 'art_id' => 'required',
  519. 'title' => 'required',
  520. 'level' => 'required',
  521. 'keyword' => 'required',
  522. 'content' => 'required',
  523. 'hits' => 'required',
  524. 'is_original' => 'required',
  525. 'islink' => 'required'
  526. ],
  527. [
  528. 'art_id.required' => '资讯id不能为空',
  529. 'title.required' => '资讯标题不能为空',
  530. 'level.required' => '推荐级别不能为空',
  531. 'keyword.required' => '资讯关键词不能为空',
  532. 'content.required' => '资讯内容不能为空',
  533. 'hits.required' => '浏览量不能为空',
  534. 'is_original.required' => '原创不能为空',
  535. 'islink.required' => '外链不能为空'
  536. ]
  537. );
  538. if ($validator->fails()) {
  539. $errorMessage = $validator->errors()->first();
  540. return Result::error($errorMessage);
  541. }
  542. if($requireData['islink']==1){
  543. $requireData = $this->request->all();
  544. $validator = $this->validationFactory->make(
  545. $requireData,
  546. [
  547. 'linkurl' => 'required'
  548. ],
  549. [
  550. 'linkurl.required' => '外链地址不能为空'
  551. ]
  552. );
  553. if ($validator->fails()) {
  554. $errorMessage = $validator->errors()->first();
  555. return Result::error($errorMessage);
  556. }
  557. }
  558. if($requireData['is_original']==0){
  559. $requireData = $this->request->all();
  560. $validator = $this->validationFactory->make(
  561. $requireData,
  562. [
  563. 'fromurl' => 'required',
  564. 'copyfrom' => 'required'
  565. ],
  566. [
  567. 'fromurl.required' => '采集来源地址不能为空',
  568. 'copyfrom' => '采集来源不能为空'
  569. ]
  570. );
  571. if ($validator->fails()) {
  572. $errorMessage = $validator->errors()->first();
  573. return Result::error($errorMessage);
  574. }
  575. }
  576. $result = $this->collectorServiceClient->upInfo($requireData);
  577. return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
  578. }
  579. /**
  580. * 删除资讯
  581. * @return array
  582. */
  583. public function delInfo()
  584. {
  585. $requireData = $this->request->all();
  586. $validator = $this->validationFactory->make(
  587. $requireData,
  588. [
  589. 'art_id' => 'required'
  590. ],
  591. [
  592. 'art_id.required' => '资讯id不能为空'
  593. ]
  594. );
  595. if ($validator->fails()) {
  596. $errorMessage = $validator->errors()->first();
  597. return Result::error($errorMessage);
  598. }
  599. $result = $this->collectorServiceClient->delInfo($requireData);
  600. return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
  601. }
  602. /**
  603. * 关联导航池
  604. * @return array
  605. */
  606. public function addCatid()
  607. {
  608. $requireData = $this->request->all();
  609. $validator = $this->validationFactory->make(
  610. $requireData,
  611. [
  612. 'rule_id' => 'required'
  613. ],
  614. [
  615. 'rule_id.required' => '任务规则id不能为空'
  616. ]
  617. );
  618. if ($validator->fails()) {
  619. $errorMessage = $validator->errors()->first();
  620. return Result::error($errorMessage);
  621. }
  622. $result = $this->collectorServiceClient->addCatid($requireData);
  623. return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
  624. }
  625. /**
  626. * 开始导入
  627. * @return array
  628. */
  629. public function addArt()
  630. {
  631. $requireData = $this->request->all();
  632. if(!empty($requireData)){
  633. $validator = $this->validationFactory->make(
  634. $requireData,
  635. [
  636. 'rule_id' => 'required'
  637. ],
  638. [
  639. 'rule_id.required' => '任务规则id不能为空'
  640. ]
  641. );
  642. if ($validator->fails()) {
  643. $errorMessage = $validator->errors()->first();
  644. return Result::error($errorMessage);
  645. }
  646. }
  647. $data['rule_id'] = $requireData['rule_id'];
  648. $data['time'] = microtime();
  649. // var_dump("=====111");
  650. $result = $this->Iservice->push($data,1);
  651. // var_dump("=====111",$result);
  652. return Result::success($result);
  653. }
  654. /**
  655. * 导入中
  656. * @return array
  657. */
  658. public function goaddArt($data=[])
  659. {
  660. if(is_array($data)){
  661. var_dump("我要开始导入了!!!");
  662. $this->collectorServiceClient->addArt($data);
  663. return Result::success([]);
  664. }
  665. }
  666. }