作者 赵彬吉

update

@@ -2,13 +2,9 @@ @@ -2,13 +2,9 @@
2 2
3 namespace App\Console\Commands\RankData; 3 namespace App\Console\Commands\RankData;
4 4
5 -use App\Helper\Arr;  
6 -use App\Helper\SemrushApi;  
7 -use App\Models\Domain\DomainInfo;  
8 -use App\Models\RankData\ExternalLinks as ExternalLinksModel; 5 +use App\Http\Logic\Bside\RankData\RankDataLogic;
9 use App\Models\Project\DeployOptimize; 6 use App\Models\Project\DeployOptimize;
10 -use App\Utils\HttpUtils;  
11 -use App\Utils\LogUtils; 7 +use Illuminate\Support\Facades\Log;
12 8
13 /** 9 /**
14 * Class ExternalLinks 10 * Class ExternalLinks
@@ -38,89 +34,13 @@ class ExternalLinks extends BaseCommands @@ -38,89 +34,13 @@ class ExternalLinks extends BaseCommands
38 */ 34 */
39 public function do() 35 public function do()
40 { 36 {
41 - $error = 0;  
42 - $semrushApi = new SemrushApi();  
43 //有排名api编号的项目 37 //有排名api编号的项目
44 $list = DeployOptimize::where('api_no', '>', 0)->select('domain', 'api_no', 'project_id')->get()->toArray(); 38 $list = DeployOptimize::where('api_no', '>', 0)->select('domain', 'api_no', 'project_id')->get()->toArray();
45 - LogUtils::info('start rank_data_external_links:' . count($list)); 39 + Log::channel('rank_data')->info('开始-外链数据-'.count($list));
46 foreach ($list as $item) { 40 foreach ($list as $item) {
47 - $project_id = $item['project_id'];  
48 - $api_no = $item['api_no'];  
49 - $domain = $item['domain'];  
50 - if(!$domain){  
51 - continue;  
52 - }  
53 - $model = ExternalLinksModel::where('project_id', $project_id)->first();  
54 - if ($model && $model->updated_date >= getThisWeekStarDate()) {  
55 - continue;  
56 - }  
57 - if (!$model) {  
58 - $model = new ExternalLinksModel();  
59 - }  
60 -  
61 -  
62 - //5.0  
63 - try {  
64 - $data = HttpUtils::get("https://www.quanqiusou.cn/semrush-api/data_json/{$api_no}.json", []);  
65 - $data = Arr::s2a($data);  
66 - }catch (\Exception $e){  
67 - $data = [];  
68 - }  
69 -  
70 - if(!$data){  
71 - //外链数据  
72 - $domain = (new DomainInfo())->getDomain($domain);  
73 - $res = $semrushApi->backlinks_overview($domain);  
74 - if (!$res) {  
75 - $error++;  
76 - continue;  
77 - }  
78 -  
79 - $data = $this->_data($project_id, $res['total']);  
80 - }  
81 -  
82 - $model->project_id = $project_id;  
83 - $model->total = $data['total'];  
84 - $model->data = $data['data'];  
85 - $model->updated_date = date('Y-m-d');  
86 - $model->save(); 41 + $rankDataLogic = new RankDataLogic();
  42 + $rankDataLogic->syncExternalLinks($item['api_no']);
87 } 43 }
88 - return !$error; 44 + return true;
89 } 45 }
90 -  
91 -  
92 - /**  
93 - * 构造chat数据  
94 - * @param $project_id  
95 - * @param $total  
96 - * @return array|mixed  
97 - * @author zbj  
98 - * @date 2023/5/10  
99 - */  
100 - public function _data($project_id, $total)  
101 - {  
102 - // //外链数  
103 - $data['total'] = intval($total);  
104 - $model = ExternalLinksModel::where('project_id', $project_id)->first();  
105 - if ($model) {  
106 - //特殊处理的外链数  
107 -// $data['total'] = ($total > $model->total) ? intval($total) : $model->total; //特殊处理的  
108 -  
109 - //chat数据  
110 - $chat_data = Arr::s2a($model['data']);  
111 - if (empty($chat_data[date('Y-m-d')])) {  
112 - array_shift($chat_data);  
113 - }  
114 - } else {  
115 - //chat数据  
116 - for ($i = 1; $i < 12; $i++) {  
117 - $date = date("Y-m-d", strtotime(-7 * $i . 'days'));  
118 - $chat_data[$date] = 0; //伪造ceil($total - ($total * rand(5, 10) / 100));  
119 - }  
120 - }  
121 - $chat_data[date('Y-m-d')] = $data['total'];  
122 - $data['data'] = $chat_data;  
123 - return $data;  
124 - }  
125 -  
126 } 46 }
@@ -2,10 +2,9 @@ @@ -2,10 +2,9 @@
2 2
3 namespace App\Console\Commands\RankData; 3 namespace App\Console\Commands\RankData;
4 4
5 -use App\Helper\QuanqiusouApi; 5 +use App\Http\Logic\Bside\RankData\RankDataLogic;
6 use App\Models\Project\DeployOptimize; 6 use App\Models\Project\DeployOptimize;
7 -use App\Models\RankData\IndexedPages as IndexedPagesModel;  
8 -use App\Utils\LogUtils; 7 +use Illuminate\Support\Facades\Log;
9 8
10 /** 9 /**
11 * Class IndexedPages 10 * Class IndexedPages
@@ -35,34 +34,15 @@ class IndexedPages extends BaseCommands @@ -35,34 +34,15 @@ class IndexedPages extends BaseCommands
35 * @date 2023/5/11 34 * @date 2023/5/11
36 */ 35 */
37 public function do(){ 36 public function do(){
38 - $error = 0;  
39 - $api = new QuanqiusouApi();  
40 //有排名api编号的项目 37 //有排名api编号的项目
41 $list = DeployOptimize::where('api_no', '>', 0)->pluck('api_no', 'project_id')->toArray(); 38 $list = DeployOptimize::where('api_no', '>', 0)->pluck('api_no', 'project_id')->toArray();
42 - LogUtils::info('start rank_data_indexed_pages:' . count($list));  
43 - foreach ($list as $project_id => $api_no) {  
44 - $model = IndexedPagesModel::where('project_id', $project_id)->first();  
45 - if($model && $model->updated_date >= getThisWeekStarDate()){  
46 - continue;  
47 - }  
48 -  
49 - if(!$model){  
50 - $model = new IndexedPagesModel();  
51 - }  
52 -  
53 - $res = $api->getSiteResPer($api_no);  
54 - if(!$res){  
55 - $error++;  
56 - continue;  
57 - } 39 + Log::channel('rank_data')->info('开始-页面收录数据-'.count($list));
58 40
59 - $model->project_id = $project_id;  
60 - $model->data = $res['data'];  
61 - $model->updated_date = date('Y-m-d');  
62 - $model->save(); 41 + foreach ($list as $project_id => $api_no) {
  42 + $rankDataLogic = new RankDataLogic();
  43 + $rankDataLogic->syncIndexedPages($api_no);
63 } 44 }
64 45
65 - return !$error; 46 + return true;
66 } 47 }
67 -  
68 } 48 }
@@ -5,11 +5,8 @@ namespace App\Console\Commands\RankData; @@ -5,11 +5,8 @@ namespace App\Console\Commands\RankData;
5 use App\Helper\QuanqiusouApi; 5 use App\Helper\QuanqiusouApi;
6 use App\Http\Logic\Bside\RankData\RankDataLogic; 6 use App\Http\Logic\Bside\RankData\RankDataLogic;
7 use App\Models\Com\NoticeLog; 7 use App\Models\Com\NoticeLog;
8 -use App\Models\Project\DeployOptimize;  
9 -use App\Models\Project\Project;  
10 -use App\Models\RankData\RankData as GoogleRankModel;  
11 -use App\Utils\LogUtils;  
12 use Illuminate\Console\Command; 8 use Illuminate\Console\Command;
  9 +use Illuminate\Support\Facades\Log;
13 10
14 /** 11 /**
15 * Class GoogleRank 12 * Class GoogleRank
@@ -56,17 +53,26 @@ class RankDataTask extends Command @@ -56,17 +53,26 @@ class RankDataTask extends Command
56 foreach ($list as $item){ 53 foreach ($list as $item){
57 echo 'start:' . $item['id'] . PHP_EOL; 54 echo 'start:' . $item['id'] . PHP_EOL;
58 try { 55 try {
  56 + $rankDataLogic = new RankDataLogic();
  57 + //排名数据
59 $api = new QuanqiusouApi(); 58 $api = new QuanqiusouApi();
60 $site_res = $api->getSiteRes(); 59 $site_res = $api->getSiteRes();
61 -  
62 - (new RankDataLogic())->syncRankData($item['data']['api_no'], $site_res, true); 60 + $rankDataLogic->syncRankData($item['data']['api_no'], $site_res, true);
  61 + //外链数据
  62 + $rankDataLogic->syncExternalLinks($item['data']['api_no'], true);
  63 + //外链引荐域名
  64 + $rankDataLogic->syncRecommDomain($item['data']['api_no'], true);
  65 + //测速
  66 + $rankDataLogic->syncSpeed($item['data']['api_no'], true);
  67 + //每周排名数据
  68 + $rankDataLogic->syncRankWeek($item['data']['api_no'], true);
63 69
64 $item->status = NoticeLog::STATUS_SUCCESS; 70 $item->status = NoticeLog::STATUS_SUCCESS;
65 $item->save(); 71 $item->save();
66 echo 'success:' . $item['id'] . PHP_EOL; 72 echo 'success:' . $item['id'] . PHP_EOL;
67 }catch (\Exception $e){ 73 }catch (\Exception $e){
68 echo 'error:' . $item['id'] . $e->getMessage() . PHP_EOL; 74 echo 'error:' . $item['id'] . $e->getMessage() . PHP_EOL;
69 - errorLog('排名数据更新失败', $item, $e); 75 + Log::channel('rank_data')->error('排名数据更新失败' . $e->getMessage(), $item);
70 $this->retry($item, $e->getMessage()); 76 $this->retry($item, $e->getMessage());
71 } 77 }
72 } 78 }
@@ -2,11 +2,8 @@ @@ -2,11 +2,8 @@
2 2
3 namespace App\Console\Commands\RankData; 3 namespace App\Console\Commands\RankData;
4 4
5 -  
6 -use App\Helper\Arr;  
7 -use App\Helper\QuanqiusouApi; 5 +use App\Http\Logic\Bside\RankData\RankDataLogic;
8 use App\Models\Project\DeployOptimize; 6 use App\Models\Project\DeployOptimize;
9 -use App\Models\RankData\RankWeek as RankWeekModel;  
10 use App\Utils\LogUtils; 7 use App\Utils\LogUtils;
11 8
12 /** 9 /**
@@ -37,38 +34,14 @@ class RankWeek extends BaseCommands @@ -37,38 +34,14 @@ class RankWeek extends BaseCommands
37 */ 34 */
38 public function do() 35 public function do()
39 { 36 {
40 - $error = 0;  
41 -  
42 - //获取每周排名数据  
43 - $api = new QuanqiusouApi();  
44 -  
45 - $res = $api->getGoogleRankWeek();  
46 - if (!$res) {  
47 - return false;  
48 - }  
49 -  
50 - $res = Arr::s2a($res);  
51 //有排名api编号的项目 37 //有排名api编号的项目
52 $list = DeployOptimize::where('api_no', '>', 0)->pluck('api_no', 'project_id')->toArray(); 38 $list = DeployOptimize::where('api_no', '>', 0)->pluck('api_no', 'project_id')->toArray();
53 LogUtils::info('start rank_data_week:' . count($list)); 39 LogUtils::info('start rank_data_week:' . count($list));
54 foreach ($list as $project_id => $api_no) { 40 foreach ($list as $project_id => $api_no) {
55 - $rank_week = RankWeekModel::where('project_id', $project_id)->first();  
56 - if ($rank_week && $rank_week->updated_date >= getThisWeekStarDate()) {  
57 - //本周数据已更新  
58 - continue;  
59 - }  
60 -  
61 - if (!$rank_week) {  
62 - $rank_week = new RankWeekModel();  
63 - }  
64 -  
65 - $rank_week->project_id = $project_id;  
66 - $rank_week->data = $res['data'][$api_no];  
67 - $rank_week->date = $res['date'];  
68 - $rank_week->updated_date = date('Y-m-d');  
69 - $rank_week->save(); 41 + $rankDataLogic = new RankDataLogic();
  42 + $rankDataLogic->syncRankWeek($api_no);
70 } 43 }
71 44
72 - return !$error; 45 + return true;
73 } 46 }
74 } 47 }
@@ -2,13 +2,9 @@ @@ -2,13 +2,9 @@
2 2
3 namespace App\Console\Commands\RankData; 3 namespace App\Console\Commands\RankData;
4 4
5 -use App\Helper\Arr;  
6 -use App\Helper\SemrushApi;  
7 -use App\Models\Domain\DomainInfo;  
8 -use App\Models\RankData\RecommDomain as RecommDomainModel; 5 +use App\Http\Logic\Bside\RankData\RankDataLogic;
9 use App\Models\Project\DeployOptimize; 6 use App\Models\Project\DeployOptimize;
10 -use App\Utils\HttpUtils;  
11 -use App\Utils\LogUtils; 7 +use Illuminate\Support\Facades\Log;
12 8
13 /** 9 /**
14 * Class RecommDomain 10 * Class RecommDomain
@@ -38,50 +34,14 @@ class RecommDomain extends BaseCommands @@ -38,50 +34,14 @@ class RecommDomain extends BaseCommands
38 */ 34 */
39 public function do() 35 public function do()
40 { 36 {
41 - $error = 0;  
42 - $semrushApi = new SemrushApi();  
43 //有排名api编号的项目 37 //有排名api编号的项目
44 $list = DeployOptimize::where('api_no', '>', 0)->select('domain', 'api_no', 'project_id')->get()->toArray(); 38 $list = DeployOptimize::where('api_no', '>', 0)->select('domain', 'api_no', 'project_id')->get()->toArray();
45 - LogUtils::info('start rank_data_recomm_domain:' . count($list));  
46 - foreach ($list as $item) {  
47 - $project_id = $item['project_id'];  
48 - $api_no = $item['api_no'];  
49 - $domain = $item['domain'];  
50 - if(!$domain){  
51 - continue;  
52 - }  
53 - $model = RecommDomainModel::where('project_id', $project_id)->first();  
54 - if ($model && $model->updated_date >= getThisWeekStarDate()) {  
55 - continue;  
56 - }  
57 - if (!$model) {  
58 - $model = new RecommDomainModel();  
59 - }  
60 -  
61 - //5.0  
62 - try {  
63 - $data = HttpUtils::get("https://www.quanqiusou.cn/semrush-api/data_json/{$api_no}.json", []);  
64 - $data = Arr::s2a($data)['list'];  
65 - }catch (\Exception $e){  
66 - $data = [];  
67 - }  
68 -  
69 - if(!$data){  
70 - //外链引荐域名  
71 - $domain = (new DomainInfo())->getDomain($domain);  
72 - $data = $semrushApi->backlinks_refdomains($domain);  
73 - } 39 + Log::channel('rank_data')->info('开始-外链引荐域名数据-'.count($list));
74 40
75 - if (!$data) {  
76 - $error++;  
77 - continue;  
78 - }  
79 -  
80 - $model->project_id = $project_id;  
81 - $model->data = $data;  
82 - $model->updated_date = date('Y-m-d');  
83 - $model->save(); 41 + foreach ($list as $item) {
  42 + $rankDataLogic = new RankDataLogic();
  43 + $rankDataLogic->syncExternalLinks($item['api_no']);
84 } 44 }
85 - return !$error; 45 + return true;
86 } 46 }
87 } 47 }
@@ -2,12 +2,9 @@ @@ -2,12 +2,9 @@
2 2
3 namespace App\Console\Commands\RankData; 3 namespace App\Console\Commands\RankData;
4 4
5 -use App\Helper\Arr;  
6 -use App\Helper\GoogleSpeedApi;  
7 -use App\Models\Domain\DomainInfo; 5 +use App\Http\Logic\Bside\RankData\RankDataLogic;
8 use App\Models\Project\DeployOptimize; 6 use App\Models\Project\DeployOptimize;
9 -use App\Models\RankData\Speed as GoogleSpeedModel;  
10 -use App\Utils\LogUtils; 7 +use Illuminate\Support\Facades\Log;
11 8
12 /** 9 /**
13 * Class GoogleSpeed 10 * Class GoogleSpeed
@@ -38,34 +35,15 @@ class Speed extends BaseCommands @@ -38,34 +35,15 @@ class Speed extends BaseCommands
38 */ 35 */
39 public function do() 36 public function do()
40 { 37 {
41 - $error = 0;  
42 -  
43 - $googleSpeedApi = new GoogleSpeedApi();  
44 -  
45 //有排名api编号的项目 38 //有排名api编号的项目
46 - $list = DeployOptimize::where('api_no', '>', 0)->pluck('domain', 'project_id')->toArray();  
47 - LogUtils::info('start rank_data_speed:' . count($list));  
48 - foreach ($list as $project_id => $domain) {  
49 - $model = GoogleSpeedModel::where('project_id', $project_id)->first();  
50 - if ($model && $model->updated_date >= getThisWeekStarDate()) {  
51 - //今周已更新 跳过  
52 - continue;  
53 - }  
54 - $domain = (new DomainInfo())->getDomain($domain);  
55 - $res = $googleSpeedApi->run($domain);  
56 - if (!$res) {  
57 - $error++;  
58 - continue;  
59 - }  
60 - if (!$model) {  
61 - $model = new GoogleSpeedModel;  
62 - }  
63 - $model->project_id = $project_id;  
64 - $model->data = $res;  
65 - $model->updated_date = date('Y-m-d');  
66 - $model->save(); 39 + $list = DeployOptimize::where('api_no', '>', 0)->pluck('api_no', 'project_id')->toArray();
  40 + Log::channel('rank_data')->info('开始-测速数据-'.count($list));
  41 +
  42 + foreach ($list as $project_id => $api_no) {
  43 + $rankDataLogic = new RankDataLogic();
  44 + $rankDataLogic->syncSpeed($api_no);
67 } 45 }
68 46
69 - return !$error; 47 + return true;
70 } 48 }
71 } 49 }
@@ -5,6 +5,7 @@ namespace App\Helper; @@ -5,6 +5,7 @@ namespace App\Helper;
5 5
6 use App\Utils\HttpUtils; 6 use App\Utils\HttpUtils;
7 use GuzzleHttp\Exception\GuzzleException; 7 use GuzzleHttp\Exception\GuzzleException;
  8 +use Illuminate\Support\Facades\Log;
8 9
9 10
10 /** 11 /**
@@ -126,7 +127,7 @@ class GoogleSpeedApi @@ -126,7 +127,7 @@ class GoogleSpeedApi
126 } 127 }
127 } 128 }
128 } catch (\Exception | GuzzleException $e) { 129 } catch (\Exception | GuzzleException $e) {
129 - errorLog('测速失败', $params, $e); 130 + Log::channel('rank_data')->error('测速失败' . $e->getMessage(), $params);
130 } 131 }
131 return [ 132 return [
132 "url" => $url, 133 "url" => $url,
@@ -6,6 +6,7 @@ namespace App\Helper; @@ -6,6 +6,7 @@ namespace App\Helper;
6 use App\Utils\HttpUtils; 6 use App\Utils\HttpUtils;
7 use GuzzleHttp\Exception\GuzzleException; 7 use GuzzleHttp\Exception\GuzzleException;
8 use Illuminate\Support\Facades\Cache; 8 use Illuminate\Support\Facades\Cache;
  9 +use Illuminate\Support\Facades\Log;
9 10
10 11
11 /** 12 /**
@@ -130,7 +131,7 @@ class QuanqiusouApi @@ -130,7 +131,7 @@ class QuanqiusouApi
130 Cache::put($key, $res, 2 * 3600); 131 Cache::put($key, $res, 2 * 3600);
131 } 132 }
132 } catch (\Exception | GuzzleException $e) { 133 } catch (\Exception | GuzzleException $e) {
133 - errorLog('获取每周谷歌排名数据失败', [], $e); 134 + Log::channel('rank_data')->error('获取每周谷歌排名数据失败' . $e->getMessage());
134 return false; 135 return false;
135 } 136 }
136 } 137 }
@@ -5,6 +5,7 @@ namespace App\Helper; @@ -5,6 +5,7 @@ namespace App\Helper;
5 5
6 use App\Utils\HttpUtils; 6 use App\Utils\HttpUtils;
7 use GuzzleHttp\Exception\GuzzleException; 7 use GuzzleHttp\Exception\GuzzleException;
  8 +use Illuminate\Support\Facades\Log;
8 9
9 10
10 /** 11 /**
@@ -37,7 +38,7 @@ class SemrushApi @@ -37,7 +38,7 @@ class SemrushApi
37 $res = HttpUtils::get($url, $params); 38 $res = HttpUtils::get($url, $params);
38 return $this->data($res)[0] ?? []; 39 return $this->data($res)[0] ?? [];
39 }catch (\Exception|GuzzleException $e){ 40 }catch (\Exception|GuzzleException $e){
40 - errorLog('获取站点外链数据失败', $params, $e); 41 + Log::channel('rank_data')->error('外链数据获取失败' . $e->getMessage(), $params);
41 return false; 42 return false;
42 } 43 }
43 } 44 }
@@ -63,7 +64,7 @@ class SemrushApi @@ -63,7 +64,7 @@ class SemrushApi
63 $res = HttpUtils::get($url, $params); 64 $res = HttpUtils::get($url, $params);
64 return $this->data($res); 65 return $this->data($res);
65 }catch (\Exception|GuzzleException $e){ 66 }catch (\Exception|GuzzleException $e){
66 - errorLog('获取站点外链数据失败', $params, $e); 67 + Log::channel('rank_data')->error('获取站点外链数据失败' . $e->getMessage(), $params);
67 return false; 68 return false;
68 } 69 }
69 } 70 }
@@ -4,7 +4,9 @@ namespace App\Http\Logic\Bside\RankData; @@ -4,7 +4,9 @@ namespace App\Http\Logic\Bside\RankData;
4 4
5 5
6 use App\Helper\Arr; 6 use App\Helper\Arr;
  7 +use App\Helper\GoogleSpeedApi;
7 use App\Helper\QuanqiusouApi; 8 use App\Helper\QuanqiusouApi;
  9 +use App\Helper\SemrushApi;
8 use App\Helper\Translate; 10 use App\Helper\Translate;
9 use App\Http\Logic\Aside\Project\DomainInfoLogic; 11 use App\Http\Logic\Aside\Project\DomainInfoLogic;
10 use App\Http\Logic\Aside\Project\ProjectLogic; 12 use App\Http\Logic\Aside\Project\ProjectLogic;
@@ -14,14 +16,20 @@ use App\Models\Project\DeployBuild; @@ -14,14 +16,20 @@ use App\Models\Project\DeployBuild;
14 use App\Models\Project\DeployOptimize; 16 use App\Models\Project\DeployOptimize;
15 use App\Models\Project\Project; 17 use App\Models\Project\Project;
16 use App\Models\RankData\ExternalLinks; 18 use App\Models\RankData\ExternalLinks;
  19 +use App\Models\RankData\ExternalLinks as ExternalLinksModel;
17 use App\Models\RankData\IndexedPages; 20 use App\Models\RankData\IndexedPages;
  21 +use App\Models\RankData\IndexedPages as IndexedPagesModel;
18 use App\Models\RankData\RankData; 22 use App\Models\RankData\RankData;
19 use App\Models\RankData\RankWeek; 23 use App\Models\RankData\RankWeek;
  24 +use App\Models\RankData\RankWeek as RankWeekModel;
20 use App\Models\RankData\RecommDomain; 25 use App\Models\RankData\RecommDomain;
  26 +use App\Models\RankData\RecommDomain as RecommDomainModel;
21 use App\Models\RankData\Speed; 27 use App\Models\RankData\Speed;
  28 +use App\Models\RankData\Speed as GoogleSpeedModel;
22 use App\Utils\HttpUtils; 29 use App\Utils\HttpUtils;
23 use GuzzleHttp\Exception\GuzzleException; 30 use GuzzleHttp\Exception\GuzzleException;
24 use Illuminate\Support\Facades\Cache; 31 use Illuminate\Support\Facades\Cache;
  32 +use Illuminate\Support\Facades\Log;
25 use Illuminate\Support\Str; 33 use Illuminate\Support\Str;
26 34
27 class RankDataLogic extends BaseLogic 35 class RankDataLogic extends BaseLogic
@@ -399,6 +407,7 @@ class RankDataLogic extends BaseLogic @@ -399,6 +407,7 @@ class RankDataLogic extends BaseLogic
399 } 407 }
400 } 408 }
401 409
  410 +
402 /** 411 /**
403 * @param $project_id 412 * @param $project_id
404 * @param int $indexed_pages_num 413 * @param int $indexed_pages_num
@@ -484,4 +493,233 @@ class RankDataLogic extends BaseLogic @@ -484,4 +493,233 @@ class RankDataLogic extends BaseLogic
484 $model->updated_date = date('Y-m-d'); 493 $model->updated_date = date('Y-m-d');
485 $model->save(); 494 $model->save();
486 } 495 }
  496 +
  497 +
  498 + /**
  499 + * 同步外链
  500 + * @throws \Exception|GuzzleException
  501 + * @author zbj
  502 + * @date 2023/9/20
  503 + */
  504 + public function syncExternalLinks($api_no, $force=false){
  505 + $project_ids = DeployOptimize::where('api_no', $api_no)->pluck('domain', 'project_id');
  506 + foreach ($project_ids as $project_id => $domain) {
  507 + if (!$domain) {
  508 + Log::channel('rank_data')->error('syncExternalLinks:未配置数据库', ['project_id' => $project_id, 'api_no' => $api_no]);
  509 + continue;
  510 + }
  511 +
  512 + $model = ExternalLinksModel::where('project_id', $project_id)->first();
  513 + if ($model && $model->updated_date >= getThisWeekStarDate() && !$force) {
  514 + continue;
  515 + }
  516 + if (!$model) {
  517 + $model = new ExternalLinksModel();
  518 + }
  519 +
  520 + //5.0
  521 + try {
  522 + $data = HttpUtils::get("https://www.quanqiusou.cn/semrush-api/data_json/{$api_no}.json", []);
  523 + $data = Arr::s2a($data);
  524 + }catch (\Exception $e){
  525 + $data = [];
  526 + }
  527 + if(!$data){
  528 + //外链数据
  529 + $domain = (new DomainInfo())->getDomain($domain);
  530 + $semrushApi = new SemrushApi();
  531 + $res = $semrushApi->backlinks_overview($domain);
  532 + if (!$res) {
  533 + Log::channel('rank_data')->error('syncExternalLinks:外链数据为空', ['project_id' => $project_id, 'api_no' => $api_no]);
  534 + continue;
  535 + }
  536 +
  537 + $data = $this->_data($project_id, $res['total']);
  538 + }
  539 + $model->project_id = $project_id;
  540 + $model->total = $data['total'];
  541 + $model->data = $data['data'];
  542 + $model->updated_date = date('Y-m-d');
  543 + $model->save();
  544 + }
  545 + }
  546 +
  547 + /**
  548 + * 构造外链chat数据
  549 + * @param $project_id
  550 + * @param $total
  551 + * @return array|mixed
  552 + * @author zbj
  553 + * @date 2023/5/10
  554 + */
  555 + public function _data($project_id, $total)
  556 + {
  557 + // //外链数
  558 + $data['total'] = intval($total);
  559 + $model = ExternalLinksModel::where('project_id', $project_id)->first();
  560 + if ($model) {
  561 + //特殊处理的外链数
  562 +// $data['total'] = ($total > $model->total) ? intval($total) : $model->total; //特殊处理的
  563 +
  564 + //chat数据
  565 + $chat_data = Arr::s2a($model['data']);
  566 + if (empty($chat_data[date('Y-m-d')])) {
  567 + array_shift($chat_data);
  568 + }
  569 + } else {
  570 + //chat数据
  571 + for ($i = 1; $i < 12; $i++) {
  572 + $date = date("Y-m-d", strtotime(-7 * $i . 'days'));
  573 + $chat_data[$date] = 0; //伪造ceil($total - ($total * rand(5, 10) / 100));
  574 + }
  575 + }
  576 + $chat_data[date('Y-m-d')] = $data['total'];
  577 + $data['data'] = $chat_data;
  578 + return $data;
  579 + }
  580 +
  581 + /**
  582 + * 同步引荐域名数据
  583 + * @throws \Exception|GuzzleException
  584 + * @author zbj
  585 + * @date 2023/9/20
  586 + */
  587 + public function syncRecommDomain($api_no, $force=false){
  588 + $project_ids = DeployOptimize::where('api_no', $api_no)->pluck('domain', 'project_id');
  589 + foreach ($project_ids as $project_id => $domain) {
  590 + if (!$domain) {
  591 + Log::channel('rank_data')->error('syncRecommDomain:未配置数据库', ['project_id' => $project_id, 'api_no' => $api_no]);
  592 + continue;
  593 + }
  594 + $model = RecommDomainModel::where('project_id', $project_id)->first();
  595 + if ($model && $model->updated_date >= getThisWeekStarDate() && !$force) {
  596 + continue;
  597 + }
  598 + if (!$model) {
  599 + $model = new RecommDomainModel();
  600 + }
  601 +
  602 + //5.0
  603 + try {
  604 + $data = HttpUtils::get("https://www.quanqiusou.cn/semrush-api/data_json/{$api_no}.json", []);
  605 + $data = Arr::s2a($data)['list'];
  606 + }catch (\Exception $e){
  607 + $data = [];
  608 + }
  609 +
  610 + if(!$data){
  611 + //外链引荐域名
  612 + $domain = (new DomainInfo())->getDomain($domain);
  613 + $semrushApi = new SemrushApi();
  614 + $domain = (new DomainInfo())->getDomain($domain);
  615 + $data = $semrushApi->backlinks_refdomains($domain);
  616 + }
  617 +
  618 + if (!$data) {
  619 + Log::channel('rank_data')->error('syncRecommDomain:引荐域名数据为空', ['project_id' => $project_id, 'api_no' => $api_no]);
  620 + continue;
  621 + }
  622 + $model->project_id = $project_id;
  623 + $model->data = $data;
  624 + $model->updated_date = date('Y-m-d');
  625 + $model->save();
  626 + }
  627 + }
  628 +
  629 + /**
  630 + * 收录数
  631 + * @author zbj
  632 + * @date 2024/1/9
  633 + */
  634 + public function syncIndexedPages($api_no, $force=false){
  635 + $project_ids = DeployOptimize::where('api_no', $api_no)->pluck('domain', 'project_id');
  636 + foreach ($project_ids as $project_id => $domain) {
  637 + $model = IndexedPagesModel::where('project_id', $project_id)->first();
  638 + if($model && $model->updated_date >= getThisWeekStarDate() && !$force){
  639 + continue;
  640 + }
  641 +
  642 + if(!$model){
  643 + $model = new IndexedPagesModel();
  644 + }
  645 + $api = new QuanqiusouApi();
  646 + $res = $api->getSiteResPer($api_no);
  647 + if(!$res){
  648 + Log::channel('rank_data')->error('syncIndexedPages:收录数数据为空', ['project_id' => $project_id, 'api_no' => $api_no]);
  649 + continue;
  650 + }
  651 + $model->project_id = $project_id;
  652 + $model->data = $res['data'];
  653 + $model->updated_date = date('Y-m-d');
  654 + $model->save();
  655 + }
  656 + }
  657 +
  658 + /**
  659 + * 测速
  660 + * @param $api_no
  661 + * @param false $force
  662 + * @author zbj
  663 + * @date 2024/1/9
  664 + */
  665 + public function syncSpeed($api_no, $force=false){
  666 + $project_ids = DeployOptimize::where('api_no', $api_no)->pluck('domain', 'project_id');
  667 + foreach ($project_ids as $project_id => $domain) {
  668 + $model = GoogleSpeedModel::where('project_id', $project_id)->first();
  669 + if ($model && $model->updated_date >= getThisWeekStarDate() && !$force) {
  670 + continue;
  671 + }
  672 + $domain = (new DomainInfo())->getDomain($domain);
  673 + $googleSpeedApi = new GoogleSpeedApi();
  674 + $res = $googleSpeedApi->run($domain);
  675 + if (!$res) {
  676 + Log::channel('rank_data')->error('syncSpeed:测速数据为空', ['project_id' => $project_id, 'api_no' => $api_no]);
  677 + continue;
  678 + }
  679 + if (!$model) {
  680 + $model = new GoogleSpeedModel;
  681 + }
  682 + $model->project_id = $project_id;
  683 + $model->data = $res;
  684 + $model->updated_date = date('Y-m-d');
  685 + $model->save();
  686 + }
  687 +
  688 + }
  689 +
  690 + /**
  691 + * 每周排名数据
  692 + * @param $api_no
  693 + * @param false $force
  694 + * @author zbj
  695 + * @date 2024/1/9
  696 + */
  697 + public function syncRankWeek($api_no, $force=false){
  698 + $project_ids = DeployOptimize::where('api_no', $api_no)->pluck('domain', 'project_id');
  699 + foreach ($project_ids as $project_id => $domain) {
  700 + $rank_week = RankWeekModel::where('project_id', $project_id)->first();
  701 + if ($rank_week && $rank_week->updated_date >= getThisWeekStarDate() && !$force) {
  702 + //本周数据已更新
  703 + continue;
  704 + }
  705 + $api = new QuanqiusouApi();
  706 + $res = $api->getGoogleRankWeek();
  707 + if (!$res) {
  708 + Log::channel('rank_data')->error('syncRankWeek:每周排名数据为空', ['project_id' => $project_id, 'api_no' => $api_no]);
  709 + continue;
  710 + }
  711 +
  712 + if (!$rank_week) {
  713 + $rank_week = new RankWeekModel();
  714 + }
  715 +
  716 + $rank_week->project_id = $project_id;
  717 + $rank_week->data = $res['data'][$api_no];
  718 + $rank_week->date = $res['date'];
  719 + $rank_week->updated_date = date('Y-m-d');
  720 + $rank_week->save();
  721 + }
  722 +
  723 + }
  724 +
487 } 725 }
@@ -66,6 +66,12 @@ return [ @@ -66,6 +66,12 @@ return [
66 'via' => \App\Factory\LogFormatterFactory::class, 66 'via' => \App\Factory\LogFormatterFactory::class,
67 'prefix' => 'traffic', 67 'prefix' => 'traffic',
68 ], 68 ],
  69 + //自定义排名数据
  70 + 'rank_data' => [
  71 + 'driver' => 'custom',
  72 + 'via' => \App\Factory\LogFormatterFactory::class,
  73 + 'prefix' => 'rank_data',
  74 + ],
69 'wechatside' => [ 75 'wechatside' => [
70 'driver' => 'custom', 76 'driver' => 'custom',
71 'via' => \App\Factory\LogFormatterFactory::class, 77 'via' => \App\Factory\LogFormatterFactory::class,