自动推广

This commit is contained in:
wangjinlei
2026-03-27 17:57:25 +08:00
parent 20a68ddc8a
commit 22947a56a4
5 changed files with 625 additions and 145 deletions

View File

@@ -36,10 +36,15 @@ class ExpertFinderService
$result = $this->searchViaPubMed($field, $perPage, $minYear, $page);
}
if(!isset($result['total'])){
return [
"has_more"=>"no"
];
}
$saveResult = $this->saveExperts($result['experts'], $field, $source);
$nextPage = $result['has_more'] ? $page : 0;
$totalPages = isset($result['total_pages']) ? $result['total_pages'] : 0;
$nextPage = $result['has_more'] ? $page : $fetchLog['last_page'];
$totalPages = $result['total_pages'] ?? $fetchLog['total_pages'];
$this->updateFetchLog($field, $source, $nextPage, $totalPages);
return [
@@ -48,6 +53,7 @@ class ExpertFinderService
'experts_found' => $result['total'],
'saved_new' => $saveResult['inserted'],
'saved_exist' => $saveResult['existing'],
'list' => $result['experts'],
'field_enriched' => $saveResult['field_enriched'],
'has_more' => $result['has_more'],
];
@@ -68,6 +74,8 @@ class ExpertFinderService
$fieldEnrich = 0;
foreach ($experts as $expert) {
$email = strtolower(trim($expert['email']));
if (empty($email)) {
continue;
@@ -94,6 +102,9 @@ class ExpertFinderService
try {
$expertId = Db::name('expert')->insertGetId($insert);
$this->enrichExpertField($expertId, $field);
if(isset($expert['papers'])&&is_array($expert['papers'])){
$this->savePaper($expertId, $expert['papers']);
}
$inserted++;
} catch (\Exception $e) {
$existing++;
@@ -103,6 +114,25 @@ class ExpertFinderService
return ['inserted' => $inserted, 'existing' => $existing, 'field_enriched' => $fieldEnrich];
}
private function savePaper($expertId, $papers)
{
foreach ($papers as $paper){
$check = Db::name('expert_paper')->where("expert_id",$expertId)->where('paper_article_id',$paper['article_id'])->find();
if($check){
continue;
}
$insert = [
'expert_id' => $expertId,
'paper_title' => isset($paper['title'])?mb_substr($paper['title'], 0, 255):"",
'paper_article_id' => $paper['article_id'] ?? 0,
'paper_journal' => isset($paper['journal'])?mb_substr($paper['journal'], 0, 128):"",
'ctime' => time(),
];
Db::name('expert_paper')->insert($insert);
}
}
public function getFetchLog($field, $source)
{
$log = Db::name('expert_fetch')
@@ -519,11 +549,8 @@ class ExpertFinderService
->where('state', 0)
->find();
if ($exists) return 0;
$major = Db::name("major")->where("major_title",$field)->where("state",0)->find();
$major_id = $major ? $major['major_id'] : 0;
Db::name('expert_field')->insert([
'expert_id' => $expertId,
'major_id' => $major_id,
'field' => mb_substr($field, 0, 128),
'state' => 0,
]);