|
...
|
...
|
@@ -9,6 +9,8 @@ use App\Helper\Translate; |
|
|
|
use App\Http\Logic\Aside\Project\DomainInfoLogic;
|
|
|
|
use App\Http\Logic\Aside\Project\ProjectLogic;
|
|
|
|
use App\Http\Logic\Bside\BaseLogic;
|
|
|
|
use App\Models\Project\DeployBuild;
|
|
|
|
use App\Models\Project\DeployOptimize;
|
|
|
|
use App\Models\Project\Project;
|
|
|
|
use App\Models\RankData\ExternalLinks;
|
|
|
|
use App\Models\RankData\IndexedPages;
|
|
...
|
...
|
@@ -347,4 +349,137 @@ class RankDataLogic extends BaseLogic |
|
|
|
}
|
|
|
|
return $flg_ai;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 同步排名信息
|
|
|
|
* @throws \Exception
|
|
|
|
* @author zbj
|
|
|
|
* @date 2023/9/20
|
|
|
|
*/
|
|
|
|
public function syncRankData($api_no){
|
|
|
|
$project_id = DeployOptimize::where('api_no', $api_no)->value('project_id');
|
|
|
|
$project = Project::find($project_id);
|
|
|
|
if(!$project){
|
|
|
|
throw new \Exception($api_no . '关联的项目不存在');
|
|
|
|
}
|
|
|
|
|
|
|
|
$api = new QuanqiusouApi();
|
|
|
|
|
|
|
|
$model = RankData::where('project_id', $project_id)->where('lang', '')->first();
|
|
|
|
if (!$model || $model->updated_date != date('Y-m-d')) {
|
|
|
|
$res = $api->getGoogleRank($api_no);
|
|
|
|
if(!$res){
|
|
|
|
throw new \Exception('接口数据获取失败');
|
|
|
|
}
|
|
|
|
//收录数
|
|
|
|
$indexed_pages_num = $site_res[$api_no] ?? 0;
|
|
|
|
$this->save_rank($project_id, $res, $indexed_pages_num);
|
|
|
|
}
|
|
|
|
//有小语种的
|
|
|
|
$lang_list = $api->getLangList();
|
|
|
|
if(!empty($lang_list[$api_no])){
|
|
|
|
$model = RankData::where('project_id', $project_id)->where('lang', '<>', '')->first();
|
|
|
|
if (!$model || $model->updated_date != date('Y-m-d')) {
|
|
|
|
$res = $api->getGoogleRank($api_no, 1);
|
|
|
|
if(!$res){
|
|
|
|
throw new \Exception('接口数据获取失败');
|
|
|
|
}
|
|
|
|
$data = [];
|
|
|
|
//不同的小语种取出来
|
|
|
|
foreach ($res as $keyword => $v){
|
|
|
|
$data[Arr::last($v)['lang']][$keyword] = $v;
|
|
|
|
}
|
|
|
|
foreach ($data as $lang => $rank){
|
|
|
|
$this->save_rank($project_id, $rank, 0, $lang);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param $project_id
|
|
|
|
* @param int $indexed_pages_num
|
|
|
|
* @param $data
|
|
|
|
* @param string $lang
|
|
|
|
* @author zbj
|
|
|
|
* @date 2023/5/8
|
|
|
|
*/
|
|
|
|
public function save_rank($project_id, $data, int $indexed_pages_num = 0, string $lang = ''){
|
|
|
|
$without_project_ids = []; //不用处理排名的项目
|
|
|
|
|
|
|
|
$first_num = $first_page_num = $first_three_pages_num = $first_five_pages_num = $first_ten_pages_num = 0;
|
|
|
|
|
|
|
|
if(!$lang){
|
|
|
|
foreach ($data as &$ranks){
|
|
|
|
ksort($ranks);
|
|
|
|
foreach ($ranks as &$rank){
|
|
|
|
//处理排名
|
|
|
|
if(!in_array($project_id, $without_project_ids)){
|
|
|
|
if($rank['position'] >= 10){
|
|
|
|
$rank['position'] -= 5;
|
|
|
|
}
|
|
|
|
//todo 需要特殊处理排名的项目
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$last = Arr::last($ranks);
|
|
|
|
//第一名
|
|
|
|
if($last['position'] == 1){
|
|
|
|
$first_num ++;
|
|
|
|
}
|
|
|
|
//排名第一页
|
|
|
|
if($last['position'] > 0 && $last['position'] <= 10){
|
|
|
|
$first_page_num ++;
|
|
|
|
}
|
|
|
|
//排名前三页
|
|
|
|
if($last['position'] > 0 && $last['position'] <= 30){
|
|
|
|
$first_three_pages_num ++;
|
|
|
|
}
|
|
|
|
//排名前五页
|
|
|
|
if($last['position'] > 0 && $last['position'] <= 50){
|
|
|
|
$first_five_pages_num ++;
|
|
|
|
}
|
|
|
|
//排名前十页
|
|
|
|
if($last['position'] > 0 && $last['position'] <= 100){
|
|
|
|
$first_ten_pages_num ++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$where = [
|
|
|
|
'project_id' => $project_id,
|
|
|
|
'lang' => $lang
|
|
|
|
];
|
|
|
|
$model = RankData::where($where)->first();
|
|
|
|
if(!$model){
|
|
|
|
$model = new RankData();
|
|
|
|
}
|
|
|
|
|
|
|
|
//关键词达标天数
|
|
|
|
$model->is_compliance = 0;
|
|
|
|
if($model->updated_date != date('Y-m-d')){
|
|
|
|
//保证关键词数
|
|
|
|
$keyword_num = DeployBuild::where('project_id', $project_id)->value('keyword_num');
|
|
|
|
$type = Project::where('id', $project_id)->value('type');
|
|
|
|
if($keyword_num && $type == 2 && $first_page_num >= $keyword_num){
|
|
|
|
$model->compliance_day = $model->compliance_day + 1;
|
|
|
|
$model->is_compliance = 1;
|
|
|
|
|
|
|
|
//项目表更新
|
|
|
|
Project::where('id', $project_id)->update(['is_remain_today' => 1, 'finish_remain_day' => $model->compliance_day]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$model->project_id = $project_id;
|
|
|
|
$model->first_num = $first_num;
|
|
|
|
$model->first_page_num = $first_page_num;
|
|
|
|
$model->first_three_pages_num = $first_three_pages_num;
|
|
|
|
$model->first_five_pages_num = $first_five_pages_num;
|
|
|
|
$model->first_ten_pages_num = $first_ten_pages_num;
|
|
|
|
$model->indexed_pages_num = $indexed_pages_num;
|
|
|
|
$model->lang = $lang;
|
|
|
|
$model->data = $data;
|
|
|
|
$model->updated_date = date('Y-m-d');
|
|
|
|
@file_put_contents(storage_path('logs/lyh_error.log'), var_export($model, true) . PHP_EOL, FILE_APPEND);
|
|
|
|
$model->save();
|
|
|
|
}
|
|
|
|
} |
...
|
...
|
|