|
|
|
@ -4,9 +4,11 @@ namespace App\Http\Controllers\Admin;
|
|
|
|
|
|
|
|
|
|
|
|
use App\Http\Controllers\Controller;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
|
|
use App\Models\CrawlAddress;
|
|
|
|
use App\Models\CrawlAddress;
|
|
|
|
|
|
|
|
use App\Models\CrawlSource;
|
|
|
|
use App\Models\DictItem;
|
|
|
|
use App\Models\DictItem;
|
|
|
|
use App\Models\DictType;
|
|
|
|
use App\Models\DictType;
|
|
|
|
use App\Support\ApiResponse;
|
|
|
|
use App\Services\Crawl\CrawlAddressSourceResolver;
|
|
|
|
|
|
|
|
use App\Services\Crawl\CrawlSourceResolver;
|
|
|
|
use Illuminate\Http\JsonResponse;
|
|
|
|
use Illuminate\Http\JsonResponse;
|
|
|
|
use Illuminate\Http\Request;
|
|
|
|
use Illuminate\Http\Request;
|
|
|
|
use Illuminate\Validation\Rule;
|
|
|
|
use Illuminate\Validation\Rule;
|
|
|
|
@ -17,7 +19,7 @@ class CrawlAddressController extends Controller
|
|
|
|
|
|
|
|
|
|
|
|
public function index(Request $request): JsonResponse
|
|
|
|
public function index(Request $request): JsonResponse
|
|
|
|
{
|
|
|
|
{
|
|
|
|
$query = CrawlAddress::query()->with(['categoryDictItem', 'university']);
|
|
|
|
$query = CrawlAddress::query()->with(['categoryDictItem', 'university', 'crawlSource']);
|
|
|
|
|
|
|
|
|
|
|
|
if ($type = $request->query('target_type')) {
|
|
|
|
if ($type = $request->query('target_type')) {
|
|
|
|
$query->where('target_type', $type);
|
|
|
|
$query->where('target_type', $type);
|
|
|
|
@ -47,6 +49,7 @@ class CrawlAddressController extends Controller
|
|
|
|
public function options(Request $request): JsonResponse
|
|
|
|
public function options(Request $request): JsonResponse
|
|
|
|
{
|
|
|
|
{
|
|
|
|
$query = CrawlAddress::query()
|
|
|
|
$query = CrawlAddress::query()
|
|
|
|
|
|
|
|
->with(['categoryDictItem', 'university', 'crawlSource'])
|
|
|
|
->where('status', 1)
|
|
|
|
->where('status', 1)
|
|
|
|
->orderBy('sort')
|
|
|
|
->orderBy('sort')
|
|
|
|
->orderBy('name');
|
|
|
|
->orderBy('name');
|
|
|
|
@ -60,22 +63,24 @@ class CrawlAddressController extends Controller
|
|
|
|
return $this->ok(['items' => $items]);
|
|
|
|
return $this->ok(['items' => $items]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public function store(Request $request): JsonResponse
|
|
|
|
public function store(Request $request, CrawlSourceResolver $resolver): JsonResponse
|
|
|
|
{
|
|
|
|
{
|
|
|
|
$data = $this->validatePayload($request);
|
|
|
|
$data = $this->validatePayload($request);
|
|
|
|
|
|
|
|
$this->assignCrawlSourceId($data, $resolver);
|
|
|
|
$row = CrawlAddress::query()->create($data);
|
|
|
|
$row = CrawlAddress::query()->create($data);
|
|
|
|
|
|
|
|
|
|
|
|
return $this->ok($this->serialize($row->fresh(['categoryDictItem', 'university'])), '已创建');
|
|
|
|
return $this->ok($this->serialize($row->fresh(['categoryDictItem', 'university', 'crawlSource'])), '已创建');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public function update(Request $request, int $crawlAddress): JsonResponse
|
|
|
|
public function update(Request $request, int $crawlAddress, CrawlSourceResolver $resolver): JsonResponse
|
|
|
|
{
|
|
|
|
{
|
|
|
|
$row = CrawlAddress::query()->findOrFail($crawlAddress);
|
|
|
|
$row = CrawlAddress::query()->findOrFail($crawlAddress);
|
|
|
|
$data = $this->validatePayload($request, $row);
|
|
|
|
$data = $this->validatePayload($request, $row);
|
|
|
|
|
|
|
|
$this->assignCrawlSourceId($data, $resolver);
|
|
|
|
$row->fill($data);
|
|
|
|
$row->fill($data);
|
|
|
|
$row->save();
|
|
|
|
$row->save();
|
|
|
|
|
|
|
|
|
|
|
|
return $this->ok($this->serialize($row->fresh(['categoryDictItem', 'university'])), '已保存');
|
|
|
|
return $this->ok($this->serialize($row->fresh(['categoryDictItem', 'university', 'crawlSource'])), '已保存');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public function destroy(int $crawlAddress): JsonResponse
|
|
|
|
public function destroy(int $crawlAddress): JsonResponse
|
|
|
|
@ -99,6 +104,7 @@ class CrawlAddressController extends Controller
|
|
|
|
'target_type' => ['required', 'in:paper,industry_news,teacher'],
|
|
|
|
'target_type' => ['required', 'in:paper,industry_news,teacher'],
|
|
|
|
'name' => ['required', 'string', 'max:128'],
|
|
|
|
'name' => ['required', 'string', 'max:128'],
|
|
|
|
'request_url' => ['required', 'url', 'max:512'],
|
|
|
|
'request_url' => ['required', 'url', 'max:512'],
|
|
|
|
|
|
|
|
'crawl_source_id' => ['nullable', 'integer', 'exists:crawl_sources,id'],
|
|
|
|
'keyword' => ['nullable', 'string', 'max:512'],
|
|
|
|
'keyword' => ['nullable', 'string', 'max:512'],
|
|
|
|
'category_dict_item_id' => [
|
|
|
|
'category_dict_item_id' => [
|
|
|
|
'nullable',
|
|
|
|
'nullable',
|
|
|
|
@ -137,6 +143,21 @@ class CrawlAddressController extends Controller
|
|
|
|
return $data;
|
|
|
|
return $data;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* @param array<string, mixed> $data
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
protected function assignCrawlSourceId(array &$data, CrawlSourceResolver $resolver): void
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (! empty($data['crawl_source_id'])) {
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$source = $resolver->suggestSource($data['request_url'], $data['target_type']);
|
|
|
|
|
|
|
|
if ($source) {
|
|
|
|
|
|
|
|
$data['crawl_source_id'] = $source->id;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* @return array<string, mixed>
|
|
|
|
* @return array<string, mixed>
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
@ -147,6 +168,9 @@ class CrawlAddressController extends Controller
|
|
|
|
'target_type' => $row->target_type,
|
|
|
|
'target_type' => $row->target_type,
|
|
|
|
'name' => $row->name,
|
|
|
|
'name' => $row->name,
|
|
|
|
'request_url' => $row->request_url,
|
|
|
|
'request_url' => $row->request_url,
|
|
|
|
|
|
|
|
'crawl_source_id' => $row->crawl_source_id,
|
|
|
|
|
|
|
|
'crawl_source_name' => $row->crawlSource?->name,
|
|
|
|
|
|
|
|
'adapter_code' => $row->crawlSource?->adapter_code,
|
|
|
|
'keyword' => $row->keyword,
|
|
|
|
'keyword' => $row->keyword,
|
|
|
|
'category_dict_item_id' => $row->category_dict_item_id,
|
|
|
|
'category_dict_item_id' => $row->category_dict_item_id,
|
|
|
|
'category_label' => $row->categoryDictItem?->label,
|
|
|
|
'category_label' => $row->categoryDictItem?->label,
|
|
|
|
|