|
...
|
...
|
@@ -4,7 +4,9 @@ namespace App\Http\Logic\Bside\RankData; |
|
|
|
|
|
|
|
|
|
|
|
use App\Helper\Arr;
|
|
|
|
use App\Helper\GoogleSpeedApi;
|
|
|
|
use App\Helper\QuanqiusouApi;
|
|
|
|
use App\Helper\SemrushApi;
|
|
|
|
use App\Helper\Translate;
|
|
|
|
use App\Http\Logic\Aside\Project\DomainInfoLogic;
|
|
|
|
use App\Http\Logic\Aside\Project\ProjectLogic;
|
|
...
|
...
|
@@ -14,14 +16,20 @@ use App\Models\Project\DeployBuild; |
|
|
|
use App\Models\Project\DeployOptimize;
|
|
|
|
use App\Models\Project\Project;
|
|
|
|
use App\Models\RankData\ExternalLinks;
|
|
|
|
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\RankWeek;
|
|
|
|
use App\Models\RankData\RankWeek as RankWeekModel;
|
|
|
|
use App\Models\RankData\RecommDomain;
|
|
|
|
use App\Models\RankData\RecommDomain as RecommDomainModel;
|
|
|
|
use App\Models\RankData\Speed;
|
|
|
|
use App\Models\RankData\Speed as GoogleSpeedModel;
|
|
|
|
use App\Utils\HttpUtils;
|
|
|
|
use GuzzleHttp\Exception\GuzzleException;
|
|
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
use Illuminate\Support\Str;
|
|
|
|
|
|
|
|
class RankDataLogic extends BaseLogic
|
|
...
|
...
|
@@ -399,6 +407,7 @@ class RankDataLogic extends BaseLogic |
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param $project_id
|
|
|
|
* @param int $indexed_pages_num
|
|
...
|
...
|
@@ -484,4 +493,233 @@ class RankDataLogic extends BaseLogic |
|
|
|
$model->updated_date = date('Y-m-d');
|
|
|
|
$model->save();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 同步外链
|
|
|
|
* @throws \Exception|GuzzleException
|
|
|
|
* @author zbj
|
|
|
|
* @date 2023/9/20
|
|
|
|
*/
|
|
|
|
public function syncExternalLinks($api_no, $force=false){
|
|
|
|
$project_ids = DeployOptimize::where('api_no', $api_no)->pluck('domain', 'project_id');
|
|
|
|
foreach ($project_ids as $project_id => $domain) {
|
|
|
|
if (!$domain) {
|
|
|
|
Log::channel('rank_data')->error('syncExternalLinks:未配置数据库', ['project_id' => $project_id, 'api_no' => $api_no]);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
$model = ExternalLinksModel::where('project_id', $project_id)->first();
|
|
|
|
if ($model && $model->updated_date >= getThisWeekStarDate() && !$force) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (!$model) {
|
|
|
|
$model = new ExternalLinksModel();
|
|
|
|
}
|
|
|
|
|
|
|
|
//5.0
|
|
|
|
try {
|
|
|
|
$data = HttpUtils::get("https://www.quanqiusou.cn/semrush-api/data_json/{$api_no}.json", []);
|
|
|
|
$data = Arr::s2a($data);
|
|
|
|
}catch (\Exception $e){
|
|
|
|
$data = [];
|
|
|
|
}
|
|
|
|
if(!$data){
|
|
|
|
//外链数据
|
|
|
|
$domain = (new DomainInfo())->getDomain($domain);
|
|
|
|
$semrushApi = new SemrushApi();
|
|
|
|
$res = $semrushApi->backlinks_overview($domain);
|
|
|
|
if (!$res) {
|
|
|
|
Log::channel('rank_data')->error('syncExternalLinks:外链数据为空', ['project_id' => $project_id, 'api_no' => $api_no]);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
$data = $this->_data($project_id, $res['total']);
|
|
|
|
}
|
|
|
|
$model->project_id = $project_id;
|
|
|
|
$model->total = $data['total'];
|
|
|
|
$model->data = $data['data'];
|
|
|
|
$model->updated_date = date('Y-m-d');
|
|
|
|
$model->save();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 构造外链chat数据
|
|
|
|
* @param $project_id
|
|
|
|
* @param $total
|
|
|
|
* @return array|mixed
|
|
|
|
* @author zbj
|
|
|
|
* @date 2023/5/10
|
|
|
|
*/
|
|
|
|
public function _data($project_id, $total)
|
|
|
|
{
|
|
|
|
// //外链数
|
|
|
|
$data['total'] = intval($total);
|
|
|
|
$model = ExternalLinksModel::where('project_id', $project_id)->first();
|
|
|
|
if ($model) {
|
|
|
|
//特殊处理的外链数
|
|
|
|
// $data['total'] = ($total > $model->total) ? intval($total) : $model->total; //特殊处理的
|
|
|
|
|
|
|
|
//chat数据
|
|
|
|
$chat_data = Arr::s2a($model['data']);
|
|
|
|
if (empty($chat_data[date('Y-m-d')])) {
|
|
|
|
array_shift($chat_data);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
//chat数据
|
|
|
|
for ($i = 1; $i < 12; $i++) {
|
|
|
|
$date = date("Y-m-d", strtotime(-7 * $i . 'days'));
|
|
|
|
$chat_data[$date] = 0; //伪造ceil($total - ($total * rand(5, 10) / 100));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$chat_data[date('Y-m-d')] = $data['total'];
|
|
|
|
$data['data'] = $chat_data;
|
|
|
|
return $data;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 同步引荐域名数据
|
|
|
|
* @throws \Exception|GuzzleException
|
|
|
|
* @author zbj
|
|
|
|
* @date 2023/9/20
|
|
|
|
*/
|
|
|
|
public function syncRecommDomain($api_no, $force=false){
|
|
|
|
$project_ids = DeployOptimize::where('api_no', $api_no)->pluck('domain', 'project_id');
|
|
|
|
foreach ($project_ids as $project_id => $domain) {
|
|
|
|
if (!$domain) {
|
|
|
|
Log::channel('rank_data')->error('syncRecommDomain:未配置数据库', ['project_id' => $project_id, 'api_no' => $api_no]);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
$model = RecommDomainModel::where('project_id', $project_id)->first();
|
|
|
|
if ($model && $model->updated_date >= getThisWeekStarDate() && !$force) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (!$model) {
|
|
|
|
$model = new RecommDomainModel();
|
|
|
|
}
|
|
|
|
|
|
|
|
//5.0
|
|
|
|
try {
|
|
|
|
$data = HttpUtils::get("https://www.quanqiusou.cn/semrush-api/data_json/{$api_no}.json", []);
|
|
|
|
$data = Arr::s2a($data)['list'];
|
|
|
|
}catch (\Exception $e){
|
|
|
|
$data = [];
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!$data){
|
|
|
|
//外链引荐域名
|
|
|
|
$domain = (new DomainInfo())->getDomain($domain);
|
|
|
|
$semrushApi = new SemrushApi();
|
|
|
|
$domain = (new DomainInfo())->getDomain($domain);
|
|
|
|
$data = $semrushApi->backlinks_refdomains($domain);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!$data) {
|
|
|
|
Log::channel('rank_data')->error('syncRecommDomain:引荐域名数据为空', ['project_id' => $project_id, 'api_no' => $api_no]);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
$model->project_id = $project_id;
|
|
|
|
$model->data = $data;
|
|
|
|
$model->updated_date = date('Y-m-d');
|
|
|
|
$model->save();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 收录数
|
|
|
|
* @author zbj
|
|
|
|
* @date 2024/1/9
|
|
|
|
*/
|
|
|
|
public function syncIndexedPages($api_no, $force=false){
|
|
|
|
$project_ids = DeployOptimize::where('api_no', $api_no)->pluck('domain', 'project_id');
|
|
|
|
foreach ($project_ids as $project_id => $domain) {
|
|
|
|
$model = IndexedPagesModel::where('project_id', $project_id)->first();
|
|
|
|
if($model && $model->updated_date >= getThisWeekStarDate() && !$force){
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!$model){
|
|
|
|
$model = new IndexedPagesModel();
|
|
|
|
}
|
|
|
|
$api = new QuanqiusouApi();
|
|
|
|
$res = $api->getSiteResPer($api_no);
|
|
|
|
if(!$res){
|
|
|
|
Log::channel('rank_data')->error('syncIndexedPages:收录数数据为空', ['project_id' => $project_id, 'api_no' => $api_no]);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
$model->project_id = $project_id;
|
|
|
|
$model->data = $res['data'];
|
|
|
|
$model->updated_date = date('Y-m-d');
|
|
|
|
$model->save();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 测速
|
|
|
|
* @param $api_no
|
|
|
|
* @param false $force
|
|
|
|
* @author zbj
|
|
|
|
* @date 2024/1/9
|
|
|
|
*/
|
|
|
|
public function syncSpeed($api_no, $force=false){
|
|
|
|
$project_ids = DeployOptimize::where('api_no', $api_no)->pluck('domain', 'project_id');
|
|
|
|
foreach ($project_ids as $project_id => $domain) {
|
|
|
|
$model = GoogleSpeedModel::where('project_id', $project_id)->first();
|
|
|
|
if ($model && $model->updated_date >= getThisWeekStarDate() && !$force) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
$domain = (new DomainInfo())->getDomain($domain);
|
|
|
|
$googleSpeedApi = new GoogleSpeedApi();
|
|
|
|
$res = $googleSpeedApi->run($domain);
|
|
|
|
if (!$res) {
|
|
|
|
Log::channel('rank_data')->error('syncSpeed:测速数据为空', ['project_id' => $project_id, 'api_no' => $api_no]);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (!$model) {
|
|
|
|
$model = new GoogleSpeedModel;
|
|
|
|
}
|
|
|
|
$model->project_id = $project_id;
|
|
|
|
$model->data = $res;
|
|
|
|
$model->updated_date = date('Y-m-d');
|
|
|
|
$model->save();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 每周排名数据
|
|
|
|
* @param $api_no
|
|
|
|
* @param false $force
|
|
|
|
* @author zbj
|
|
|
|
* @date 2024/1/9
|
|
|
|
*/
|
|
|
|
public function syncRankWeek($api_no, $force=false){
|
|
|
|
$project_ids = DeployOptimize::where('api_no', $api_no)->pluck('domain', 'project_id');
|
|
|
|
foreach ($project_ids as $project_id => $domain) {
|
|
|
|
$rank_week = RankWeekModel::where('project_id', $project_id)->first();
|
|
|
|
if ($rank_week && $rank_week->updated_date >= getThisWeekStarDate() && !$force) {
|
|
|
|
//本周数据已更新
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
$api = new QuanqiusouApi();
|
|
|
|
$res = $api->getGoogleRankWeek();
|
|
|
|
if (!$res) {
|
|
|
|
Log::channel('rank_data')->error('syncRankWeek:每周排名数据为空', ['project_id' => $project_id, 'api_no' => $api_no]);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!$rank_week) {
|
|
|
|
$rank_week = new RankWeekModel();
|
|
|
|
}
|
|
|
|
|
|
|
|
$rank_week->project_id = $project_id;
|
|
|
|
$rank_week->data = $res['data'][$api_no];
|
|
|
|
$rank_week->date = $res['date'];
|
|
|
|
$rank_week->updated_date = date('Y-m-d');
|
|
|
|
$rank_week->save();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} |
...
|
...
|
|