作者 赵彬吉

bmseo rank_data

... ... @@ -2,12 +2,11 @@
namespace App\Console\Commands\RankData;
use App\Helper\QuanqiusouApi;
use App\Http\Logic\Bside\RankData\RankDataLogic;
use App\Models\RankData\RankDataLog as RankDataLogModel;
use App\Models\Project\DeployOptimize;
use App\Models\Domain\DomainInfo;
use App\Models\Project\Project;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
/**
... ... @@ -49,8 +48,7 @@ class RankData extends BaseCommands
Cache::set('clear_remain_today_' . date('Y-m-d'), 1, 24 * 3600);
}
$projectModel = new Project();
$list = $projectModel->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
$list = Project::leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
->where('gl_project.extend_type',0)
->where('gl_project.delete_status',0)
->where('gl_project_deploy_optimize.api_no', '>', 0)
... ... @@ -79,6 +77,22 @@ class RankData extends BaseCommands
RankDataLogModel::addTask($item['project_id'], $item['api_no'], $lang);
}
}
//白帽SEO版
$list = Project::leftJoin('gl_project_deploy_build', 'gl_project.id', '=', 'gl_project_deploy_build.project_id')
->where('gl_project.delete_status',0)
->where('gl_project_deploy_build.seo_plan', 1)
->whereIn('gl_project.type',[2,3,4])
->orderBy('gl_project.id', 'asc')
->pluck('gl_project.id')->toArray();
foreach ($list as $project_id){
$domain = DomainInfo::getCacheInfoByProjectId($project_id);
$id = RankDataLogic::instance()->getBmSeoProjects($domain['domain']);
if(!$id){
continue;
}
RankDataLogModel::addTask($project_id, $id . '_bmseo');
}
} catch (\Exception|\Throwable $e) {
Log::channel('rank_data')->error('排名数据任务失败 ' . $e->getMessage());
}
... ...
... ... @@ -13,6 +13,7 @@ use App\Models\Project\Project;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Str;
/**
* Class GoogleRank
... ... @@ -76,8 +77,13 @@ class RankDataLog extends BaseCommands
$log->data = Arr::s2a($res);
//保存数据
$this->output('保存排名数据:ID'.$log->project_id . ',APINO' . $log->api_no);
if(Str::endsWith($log->api_no, '_bmseo')){
//白帽版
(new RankDataLogic())->save_rank_bmseo($log->project_id, $log->api_no, $res);
}else{
$is_compliance = (new RankDataLogic())->save_rank($log->project_id, $log->api_no, $res, null, $log->lang);
$log->is_compliance = $is_compliance;
}
$log->status = 1;
$log->save();
... ...
... ... @@ -20,6 +20,7 @@ use App\Models\RankData\ExternalLinks as ExternalLinksModel;
use App\Models\RankData\IndexedPages;
use App\Models\RankData\IndexedPages as IndexedPagesModel;
use App\Models\RankData\RankData;
use App\Models\RankData\RankDataBmseo;
use App\Models\RankData\RankWeek;
use App\Models\RankData\RankWeek as RankWeekModel;
use App\Models\RankData\RecommDomain;
... ... @@ -360,6 +361,34 @@ class RankDataLogic extends BaseLogic
}
/**
* 获取白帽seo站点项目
* @author zbj
* @date 2023/5/12
*/
public function getBmSeoProjects($domain = '')
{
$key = 'weblist_bm';
$data = Cache::get($key);
if (!$data) {
$api_url = 'http://api.quanqiusou.cn/api/index/weblist_bm';
try {
$data = HttpUtils::get($api_url, ['key'=> '289c1fc81c89d79c04ed4fd72822948e']);
if ($data) {
$data = Arr::s2a($data);
Cache::put($key, $data, 4 * 3600);
}
} catch (\Exception | GuzzleException $e) {
errorLog('白帽seo站点项目获取失败', [], $e);
return false;
}
}
if ($domain) {
return array_search($domain, $data);
}
return $data;
}
/**
* 获取AI站点项目
*
* @author zbj
... ... @@ -622,6 +651,58 @@ class RankDataLogic extends BaseLogic
return $model->is_compliance;
}
public function save_rank_bmseo($project_id, $api_no, $data){
$first_num = $first_page_num = $first_three_pages_num = $first_five_pages_num = $first_ten_pages_num = 0;
$first_page_without_extension_num = 0; //不算扩展词在首页的数量
$first_page_extension_num = 0; //扩展词在首页的数量
foreach ($data as &$ranks){
ksort($ranks);
$last = Arr::last($ranks);
//第一名
if($last['position'] == 1){
$first_num ++;
}
//排名第一页
if($last['position'] > 0 && $last['position'] <= 10){
$first_page_num ++;
$last['g'] == 1 && $first_page_without_extension_num++;
$last['g'] == 2 && $first_page_extension_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,
'api_no' => $api_no,
];
$model = RankDataBmseo::where($where)->first();
if(!$model){
$model = new RankDataBmseo();
}
$model->project_id = $project_id;
$model->api_no = $api_no;
$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->data = $data;
$model->updated_date = date('Y-m-d');
$model->save();
return true;
}
/**
* @remark :g_top
* @name :g_top_plan
... ...
<?php
namespace App\Models\RankData;
use App\Helper\Arr;
use App\Models\Base;
/**
* Class GoogleRank
* @package App\Models
* @author zbj
* @date 2023/5/6
*/
class RankDataBmseo extends Base
{
//设置关联表名
protected $table = 'gl_rank_data_bmseo';
public static function gMap(){
return [
1 => '主关键词',
2 => '拓展关键词',
3 => '小语种关键词',
];
}
public function setDataAttribute($value)
{
$this->attributes['data'] = Arr::a2s($value);
}
public function getDataAttribute($value)
{
return Arr::s2a($value);
}
}
... ...