RankDataLog.php 3.2 KB
<?php

namespace App\Console\Commands\RankData;


use App\Helper\Arr;
use App\Helper\QuanqiusouApi;
use App\Http\Logic\Bside\BaseLogic;
use App\Http\Logic\Bside\RankData\RankDataLogic;
use App\Models\RankData\RankDataLog as RankDataLogModel;
use App\Models\Project\DeployOptimize;
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
 * @package App\Console\Commands
 * @author zbj
 * @date 2023/5/6
 */
class RankDataLog extends BaseCommands
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'rank_data_log';

    /**
     * The console command description.
     * The console command description.
     *
     * @var string
     */
    protected $description = '谷歌排名数据';

    /**
     * @author zbj
     * @date 2023/5/6
     */
    public function do()
    {
        while (true) {
            $log_id = Redis::rpop('rank_data_task');

            if (!$log_id) {
                $log = RankDataLogModel::where('id', $log_id)->where('status', 0)->first();
                if(!$log){
                    sleep(10);
                    continue;
                }
            }

            try {
                $this->output('项目开始:ID'.$log->project_id . ',APINO' . $log->api_no);
                $project = Project::find($log->project_id);
                if (!$project) {
                    $this->output('关联的项目不存在:ID'.$log->project_id . ',APINO' . $log->api_no);
                    $log->status = 9;
                    $log->save();
                    continue;
                }
                //接口获取数据
                $api = new QuanqiusouApi();
                $res = $api->getGoogleRank($log->project_id, $log->api_no, $log->lang);
                if (!$res) {
                    $this->output('接口数据获取失败:ID'.$log->project_id . ',APINO' . $log->api_no);
                    $log->status = 9;
                    $log->save();
                    continue;
                }
                $log->data = Arr::s2a($res);
                //保存数据
                $this->output('保存排名数据:ID'.$log->project_id . ',APINO' . $log->api_no);
                if(Str::endsWith($log->api_no, '_bmseo')){
                    //白帽版
                    $is_compliance = (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();

            } catch (\Exception $e) {
                $this->output('处理失败:ID'.$log->project_id . ',APINO' . $log->api_no . ':' . $e->getMessage());
            }
        }
    }

    public function output($message)
    {
        $date = date('Y-m-d H:i:s');
        $output = $date . ', ' . $message . PHP_EOL;
        echo $output;
        Log::channel('rank_data')->info($output);
        return true;
    }
}