自动推广
This commit is contained in:
@@ -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,
|
||||
]);
|
||||
|
||||
Reference in New Issue
Block a user