where('id', 23) ->where('queried_at', '<=', strtotime('-2 hours')) ->where('is_delete', 0); if ($keyword) { $query = $keyword->first()?->toArray(); if ($query) { $ignoreUrl = AppKeywordsMonitor::formatQuery([])->where('id', $query['aid'])->first()?->toArray()['ignore_url'] ?? '[]'; $query['ignore_url'] = $ignoreUrl ?: '[]'; } return $this->response->json([ 'code' => 0, 'data' => $query ]); } return $this->response->json([ 'code' => 0, 'data' => '' ]); } /** * 提交监控数据 * @url /api/expose/v1/tools/submit-query-keyword * @return \Psr\Http\Message\ResponseInterface */ #[RequestMapping(path:'submit-query-keyword', methods:'post')] public function submitQueryKeyword(): \Psr\Http\Message\ResponseInterface { // Db::beginTransaction(); try { $requestData = $this->request->post(); var_dump($requestData); if (!isset($requestData['length']) || !isset($requestData['keyword_id']) || !$requestData['keyword_id'] || !$requestData['image_name'] || !$requestData['ip_info']) { return $this->response->json([ 'code' => 400, 'msg' => '缺少参数' ]); } // 被查的关键词id $aid = $requestData['keyword_id']; foreach ($requestData['items'] ?? [] as $key => $value) { // 非负面不存储 if (!$value['matched'] || !$value['mu']) { continue; } $query = AppKeywordsMonitorResult::query()->where([ ['aid', $aid], ['url', $value['mu']], ['is_delete', 0], ['platform', $requestData['platform']], ['created_at', '>', strtotime('today')] ])->first()?->toArray(); // 如果这个负面存过了就不管了 if ($query) { echo '????@@@'; continue; } list($title, $desc) = call_user_func(function () use ($value, $requestData) { $content = $value['content']; if ($requestData['platform'] == 3) { $de = PHP_EOL; } else { $de = PHP_EOL . PHP_EOL; } $ex = explode($de, $content); if (count($ex) > 1) { return [$ex[0], $ex[1]]; } return ['', '']; }); if (!$title || !$desc) { echo '??????'; continue; } $query = new AppKeywordsMonitorResult(); $query->aid = $aid; $query->title = $title; $query->description = $desc; $query->url = $value['mu']; $query->order = $value['id']; $ipInfo = json_decode($requestData['ip_info'], true); $query->ip_address = $ipInfo['ip']; $query->ip_source = "{$ipInfo['country']}{$ipInfo['province']}{$ipInfo['city']}"; $query->screen_path = $requestData['image_name']; $query->platform = $requestData['platform']; $query->save(); } // 更新关键词最后查询时间 $query = AppKeywordsMonitorTask::find($aid); $query->queried_at = time(); $query->length = $requestData['length'] - 1; // 去掉相关搜索 $query->save(); // 更新关键词最后查询时间 $query = AppKeywordsMonitor::query()->where('id', $query->aid)->first(); $query->queried_at = time(); $query->save(); Db::commit(); }catch (\Throwable $e) { var_dump($e->getMessage()); // Db::rollBack(); } return $this->response->json([ 'code' => 0, 'msg' => 'ok' ]); } /** * 刷下拉数据上报 * @url /api/expose/v1/tools/succ * @return \Psr\Http\Message\ResponseInterface */ #[RequestMapping(path:'succ', methods:'post')] public function success(): \Psr\Http\Message\ResponseInterface { $keyword = $this->request->post('Keyword'); $dropKeyword = $this->request->post('DropKeyword'); $op = $this->request->post('Op'); $vps = $this->request->post('Vps'); $model = new AppDropLog(); $model->keyword = $keyword; $model->op = $op; $model->drop_keyword = $dropKeyword; $model->save(); $container = ApplicationContext::getContainer(); $redis = $container->get(\Hyperf\Redis\Redis::class); $redis->sAdd('vps', $vps); // 十分钟不上报数据就算掉线 $redis->set('vps:app' . $vps, 1, 60 * 10); return $this->response->json([]); } }