作者 赵彬吉

bmseo rank_data

@@ -2,12 +2,11 @@ @@ -2,12 +2,11 @@
2 2
3 namespace App\Console\Commands\RankData; 3 namespace App\Console\Commands\RankData;
4 4
5 -use App\Helper\QuanqiusouApi; 5 +
  6 +use App\Http\Logic\Bside\RankData\RankDataLogic;
6 use App\Models\RankData\RankDataLog as RankDataLogModel; 7 use App\Models\RankData\RankDataLog as RankDataLogModel;
7 -use App\Models\Project\DeployOptimize; 8 +use App\Models\Domain\DomainInfo;
8 use App\Models\Project\Project; 9 use App\Models\Project\Project;
9 -use Illuminate\Support\Facades\Cache;  
10 -use Illuminate\Support\Facades\DB;  
11 use Illuminate\Support\Facades\Log; 10 use Illuminate\Support\Facades\Log;
12 11
13 /** 12 /**
@@ -49,8 +48,7 @@ class RankData extends BaseCommands @@ -49,8 +48,7 @@ class RankData extends BaseCommands
49 Cache::set('clear_remain_today_' . date('Y-m-d'), 1, 24 * 3600); 48 Cache::set('clear_remain_today_' . date('Y-m-d'), 1, 24 * 3600);
50 } 49 }
51 50
52 - $projectModel = new Project();  
53 - $list = $projectModel->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id') 51 + $list = Project::leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
54 ->where('gl_project.extend_type',0) 52 ->where('gl_project.extend_type',0)
55 ->where('gl_project.delete_status',0) 53 ->where('gl_project.delete_status',0)
56 ->where('gl_project_deploy_optimize.api_no', '>', 0) 54 ->where('gl_project_deploy_optimize.api_no', '>', 0)
@@ -79,6 +77,22 @@ class RankData extends BaseCommands @@ -79,6 +77,22 @@ class RankData extends BaseCommands
79 RankDataLogModel::addTask($item['project_id'], $item['api_no'], $lang); 77 RankDataLogModel::addTask($item['project_id'], $item['api_no'], $lang);
80 } 78 }
81 } 79 }
  80 +
  81 + //白帽SEO版
  82 + $list = Project::leftJoin('gl_project_deploy_build', 'gl_project.id', '=', 'gl_project_deploy_build.project_id')
  83 + ->where('gl_project.delete_status',0)
  84 + ->where('gl_project_deploy_build.seo_plan', 1)
  85 + ->whereIn('gl_project.type',[2,3,4])
  86 + ->orderBy('gl_project.id', 'asc')
  87 + ->pluck('gl_project.id')->toArray();
  88 + foreach ($list as $project_id){
  89 + $domain = DomainInfo::getCacheInfoByProjectId($project_id);
  90 + $id = RankDataLogic::instance()->getBmSeoProjects($domain['domain']);
  91 + if(!$id){
  92 + continue;
  93 + }
  94 + RankDataLogModel::addTask($project_id, $id . '_bmseo');
  95 + }
82 } catch (\Exception|\Throwable $e) { 96 } catch (\Exception|\Throwable $e) {
83 Log::channel('rank_data')->error('排名数据任务失败 ' . $e->getMessage()); 97 Log::channel('rank_data')->error('排名数据任务失败 ' . $e->getMessage());
84 } 98 }
@@ -13,6 +13,7 @@ use App\Models\Project\Project; @@ -13,6 +13,7 @@ use App\Models\Project\Project;
13 use Illuminate\Support\Facades\Cache; 13 use Illuminate\Support\Facades\Cache;
14 use Illuminate\Support\Facades\Log; 14 use Illuminate\Support\Facades\Log;
15 use Illuminate\Support\Facades\Redis; 15 use Illuminate\Support\Facades\Redis;
  16 +use Illuminate\Support\Str;
16 17
17 /** 18 /**
18 * Class GoogleRank 19 * Class GoogleRank
@@ -76,8 +77,13 @@ class RankDataLog extends BaseCommands @@ -76,8 +77,13 @@ class RankDataLog extends BaseCommands
76 $log->data = Arr::s2a($res); 77 $log->data = Arr::s2a($res);
77 //保存数据 78 //保存数据
78 $this->output('保存排名数据:ID'.$log->project_id . ',APINO' . $log->api_no); 79 $this->output('保存排名数据:ID'.$log->project_id . ',APINO' . $log->api_no);
79 - $is_compliance = (new RankDataLogic())->save_rank($log->project_id, $log->api_no, $res, null, $log->lang);  
80 - $log->is_compliance = $is_compliance; 80 + if(Str::endsWith($log->api_no, '_bmseo')){
  81 + //白帽版
  82 + (new RankDataLogic())->save_rank_bmseo($log->project_id, $log->api_no, $res);
  83 + }else{
  84 + $is_compliance = (new RankDataLogic())->save_rank($log->project_id, $log->api_no, $res, null, $log->lang);
  85 + $log->is_compliance = $is_compliance;
  86 + }
81 $log->status = 1; 87 $log->status = 1;
82 $log->save(); 88 $log->save();
83 89
@@ -20,6 +20,7 @@ use App\Models\RankData\ExternalLinks as ExternalLinksModel; @@ -20,6 +20,7 @@ use App\Models\RankData\ExternalLinks as ExternalLinksModel;
20 use App\Models\RankData\IndexedPages; 20 use App\Models\RankData\IndexedPages;
21 use App\Models\RankData\IndexedPages as IndexedPagesModel; 21 use App\Models\RankData\IndexedPages as IndexedPagesModel;
22 use App\Models\RankData\RankData; 22 use App\Models\RankData\RankData;
  23 +use App\Models\RankData\RankDataBmseo;
23 use App\Models\RankData\RankWeek; 24 use App\Models\RankData\RankWeek;
24 use App\Models\RankData\RankWeek as RankWeekModel; 25 use App\Models\RankData\RankWeek as RankWeekModel;
25 use App\Models\RankData\RecommDomain; 26 use App\Models\RankData\RecommDomain;
@@ -360,6 +361,34 @@ class RankDataLogic extends BaseLogic @@ -360,6 +361,34 @@ class RankDataLogic extends BaseLogic
360 } 361 }
361 362
362 /** 363 /**
  364 + * 获取白帽seo站点项目
  365 + * @author zbj
  366 + * @date 2023/5/12
  367 + */
  368 + public function getBmSeoProjects($domain = '')
  369 + {
  370 + $key = 'weblist_bm';
  371 + $data = Cache::get($key);
  372 + if (!$data) {
  373 + $api_url = 'http://api.quanqiusou.cn/api/index/weblist_bm';
  374 + try {
  375 + $data = HttpUtils::get($api_url, ['key'=> '289c1fc81c89d79c04ed4fd72822948e']);
  376 + if ($data) {
  377 + $data = Arr::s2a($data);
  378 + Cache::put($key, $data, 4 * 3600);
  379 + }
  380 + } catch (\Exception | GuzzleException $e) {
  381 + errorLog('白帽seo站点项目获取失败', [], $e);
  382 + return false;
  383 + }
  384 + }
  385 + if ($domain) {
  386 + return array_search($domain, $data);
  387 + }
  388 + return $data;
  389 + }
  390 +
  391 + /**
363 * 获取AI站点项目 392 * 获取AI站点项目
364 * 393 *
365 * @author zbj 394 * @author zbj
@@ -622,6 +651,58 @@ class RankDataLogic extends BaseLogic @@ -622,6 +651,58 @@ class RankDataLogic extends BaseLogic
622 return $model->is_compliance; 651 return $model->is_compliance;
623 } 652 }
624 653
  654 + public function save_rank_bmseo($project_id, $api_no, $data){
  655 + $first_num = $first_page_num = $first_three_pages_num = $first_five_pages_num = $first_ten_pages_num = 0;
  656 + $first_page_without_extension_num = 0; //不算扩展词在首页的数量
  657 + $first_page_extension_num = 0; //扩展词在首页的数量
  658 + foreach ($data as &$ranks){
  659 + ksort($ranks);
  660 + $last = Arr::last($ranks);
  661 + //第一名
  662 + if($last['position'] == 1){
  663 + $first_num ++;
  664 + }
  665 + //排名第一页
  666 + if($last['position'] > 0 && $last['position'] <= 10){
  667 + $first_page_num ++;
  668 + $last['g'] == 1 && $first_page_without_extension_num++;
  669 + $last['g'] == 2 && $first_page_extension_num++;
  670 + }
  671 + //排名前三页
  672 + if($last['position'] > 0 && $last['position'] <= 30){
  673 + $first_three_pages_num ++;
  674 + }
  675 + //排名前五页
  676 + if($last['position'] > 0 && $last['position'] <= 50){
  677 + $first_five_pages_num ++;
  678 + }
  679 + //排名前十页
  680 + if($last['position'] > 0 && $last['position'] <= 100){
  681 + $first_ten_pages_num ++;
  682 + }
  683 + }
  684 + $where = [
  685 + 'project_id' => $project_id,
  686 + 'api_no' => $api_no,
  687 + ];
  688 + $model = RankDataBmseo::where($where)->first();
  689 + if(!$model){
  690 + $model = new RankDataBmseo();
  691 + }
  692 + $model->project_id = $project_id;
  693 + $model->api_no = $api_no;
  694 + $model->first_num = $first_num;
  695 + $model->first_page_num = $first_page_num;
  696 + $model->first_three_pages_num = $first_three_pages_num;
  697 + $model->first_five_pages_num = $first_five_pages_num;
  698 + $model->first_ten_pages_num = $first_ten_pages_num;
  699 + $model->data = $data;
  700 + $model->updated_date = date('Y-m-d');
  701 + $model->save();
  702 +
  703 + return true;
  704 + }
  705 +
625 /** 706 /**
626 * @remark :g_top 707 * @remark :g_top
627 * @name :g_top_plan 708 * @name :g_top_plan
  1 +<?php
  2 +
  3 +namespace App\Models\RankData;
  4 +
  5 +
  6 +use App\Helper\Arr;
  7 +use App\Models\Base;
  8 +
  9 +/**
  10 + * Class GoogleRank
  11 + * @package App\Models
  12 + * @author zbj
  13 + * @date 2023/5/6
  14 + */
  15 +class RankDataBmseo extends Base
  16 +{
  17 + //设置关联表名
  18 + protected $table = 'gl_rank_data_bmseo';
  19 +
  20 + public static function gMap(){
  21 + return [
  22 + 1 => '主关键词',
  23 + 2 => '拓展关键词',
  24 + 3 => '小语种关键词',
  25 + ];
  26 + }
  27 +
  28 + public function setDataAttribute($value)
  29 + {
  30 + $this->attributes['data'] = Arr::a2s($value);
  31 + }
  32 +
  33 + public function getDataAttribute($value)
  34 + {
  35 + return Arr::s2a($value);
  36 + }
  37 +
  38 +}