Commit 3e06f003 by Vladislav

#19496 Запрос измененных объявлений

1 parent 44836271
<?php
namespace App\Console\Commands;
use App\Models\AdGroup;
use App\Models\Advertisement;
use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Builder;
class AdvertisementsLoadUpdated extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'ad:loadUpdated';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Загрузка измененные объявлений';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
$advertisements = Advertisement::where(function (Builder $query) {
$query->where(function (Builder $query) {
$query->has('campaignForEnabledForManaged');
})->orWhere(function (Builder $query) {
$query->whereNull('campaign_id');
});
})->forUpdatedSelf()->get();
if ($advertisements->count()) {
$token = Tokens::where('type', Tokens::MAIN)->first();
if (!$token) {
throw new \Exception('Не найден токен блин');
}
$ids = $advertisements->pluck('external_id')->toArray();
$factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token);
$factory->getRequest('Ads', 'get')->call([
'Ids' => $ids,
]);
}
return 0;
}
}
...@@ -8,14 +8,14 @@ use App\Service\API\API; ...@@ -8,14 +8,14 @@ use App\Service\API\API;
use App\Service\Requests\APIRequest; use App\Service\Requests\APIRequest;
use Illuminate\Console\Command; use Illuminate\Console\Command;
class CampaignsCheckUpdatedChildrenAdGroups extends Command class CampaignsCheckUpdatedChildren extends Command
{ {
/** /**
* The name and signature of the console command. * The name and signature of the console command.
* *
* @var string * @var string
*/ */
protected $signature = 'campaigns:checkUpdatedChildrenAdGroups'; protected $signature = 'campaigns:checkUpdatedChildren';
/** /**
* The console command description. * The console command description.
...@@ -48,16 +48,19 @@ class CampaignsCheckUpdatedChildrenAdGroups extends Command ...@@ -48,16 +48,19 @@ class CampaignsCheckUpdatedChildrenAdGroups extends Command
throw new \Exception('Не найден токен блин'); throw new \Exception('Не найден токен блин');
} }
$factory = APIRequest::getInstance(API::YANDEX); $campaign_ids_group = Campaigns::forUpdatedChildren()->pluck('external_id')->chunk(3000)->toArray();
$factory->setToken($token);
$factory->getRequest('Changes', 'check')->call([ foreach ($campaign_ids_group as $campaign_ids) {
'CampaignIds' => Campaigns::forUpdatedChildren()->pluck('external_id')->toArray(), $factory = APIRequest::getInstance(API::YANDEX);
'FieldNames' => [ $factory->setToken($token);
'AdGroupIds',
], $factory->getRequest('Changes', 'check')->call([
'Timestamp' => $token->check_changes_ad_group_at->toIso8601ZuluString(), 'CampaignIds' => $campaign_ids,
]); 'FieldNames' => [
'AdGroupIds', 'AdIds',
],
]);
}
} }
...@@ -68,17 +71,21 @@ class CampaignsCheckUpdatedChildrenAdGroups extends Command ...@@ -68,17 +71,21 @@ class CampaignsCheckUpdatedChildrenAdGroups extends Command
->get(); ->get();
foreach ($tokens as $token) { foreach ($tokens as $token) {
$factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token); $campaign_ids_group = $token->dictionaryCampaignsEnabledForExternalSynchronizedUpdatedChildren
->pluck('external_id')->chunk(3000)->toArray();
$factory->getRequest('Changes', 'check')->call([
'CampaignIds' => $token->dictionaryCampaignsEnabledForExternalSynchronizedUpdatedChildren foreach ($campaign_ids_group as $campaign_ids) {
->pluck('external_id')->toArray(), $factory = APIRequest::getInstance(API::YANDEX);
'FieldNames' => [ $factory->setToken($token);
'AdGroupIds',
], $factory->getRequest('Changes', 'check')->call([
'Timestamp' => $token->check_changes_ad_group_at->toIso8601ZuluString(), 'CampaignIds' => $campaign_ids,
]); 'FieldNames' => [
'AdGroupIds', 'AdIds',
],
]);
}
} }
......
...@@ -53,6 +53,7 @@ class CampaignsFirstLoad extends Command ...@@ -53,6 +53,7 @@ class CampaignsFirstLoad extends Command
Artisan::call(DictionariesLoad::class); Artisan::call(DictionariesLoad::class);
Artisan::call(CampaignsLoadGroups::class); Artisan::call(CampaignsLoadGroups::class);
Artisan::call(AdGroupsLoadKeywords::class); Artisan::call(AdGroupsLoadKeywords::class);
Artisan::call(CampaignsLoadAds::class);
return 0; return 0;
} }
......
<?php
namespace App\Console\Commands;
use App\Models\Campaigns;
use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Illuminate\Console\Command;
class CampaignsLoadAds extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'campaigns:loadAds';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Загрузка объявлений РК';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
* @throws \Exception
*/
public function handle()
{
$campaigns = Campaigns::forManaged()->forEnabled()->get();
if (!$campaigns->count()) {
return;
}
$token = Tokens::where('type', Tokens::MAIN)->first();
if (!$token) {
throw new \Exception('Не найден токен блин');
}
foreach ($campaigns->pluck('external_id')->chunk(10)->toArray() as $campaign_ids) {
$factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token);
$factory->getRequest('Ads', 'get')
->call([
'CampaignIds' => $campaign_ids,
]);
}
return 0;
}
}
...@@ -22,7 +22,7 @@ class CampaignsLoadGroups extends Command ...@@ -22,7 +22,7 @@ class CampaignsLoadGroups extends Command
* *
* @var string * @var string
*/ */
protected $description = 'Загрузка измененных РК'; protected $description = 'Загрузка групп РК';
/** /**
* Create a new command instance. * Create a new command instance.
...@@ -53,15 +53,17 @@ class CampaignsLoadGroups extends Command ...@@ -53,15 +53,17 @@ class CampaignsLoadGroups extends Command
throw new \Exception('Не найден токен блин'); throw new \Exception('Не найден токен блин');
} }
$factory = APIRequest::getInstance(API::YANDEX); foreach ($campaigns->pluck('external_id')->chunk(10)->toArray() as $campaign_ids) {
$factory->setToken($token); $factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token);
$factory->getRequest('AdGroups', 'get')
->call([
'CampaignIds' => $campaign_ids,
]);
}
$campaign_ids = $campaigns->pluck('external_id')->toArray();
$factory->getRequest('AdGroups', 'get')
->call([
'CampaignIds' => $campaign_ids,
]);
return 0; return 0;
} }
......
...@@ -97,6 +97,8 @@ class Advertisement extends Model ...@@ -97,6 +97,8 @@ class Advertisement extends Model
'turbo_page_moderation', 'turbo_page_moderation',
'business_id', 'business_id',
'prefer_v_card_over_business', 'prefer_v_card_over_business',
'updated_self',
]; ];
protected $casts = [ protected $casts = [
...@@ -155,4 +157,9 @@ class Advertisement extends Model ...@@ -155,4 +157,9 @@ class Advertisement extends Model
return $this->belongsTo(Campaigns::class, 'campaign_id'); return $this->belongsTo(Campaigns::class, 'campaign_id');
} }
public function campaignForEnabledForManaged()
{
return $this->campaign()->forEnabled()->forManaged();
}
} }
...@@ -4,6 +4,7 @@ namespace App\Service\Requests\Direct; ...@@ -4,6 +4,7 @@ namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI; use App\Jobs\ProcessCallLimitedAPI;
use App\Models\AdGroup; use App\Models\AdGroup;
use App\Models\Advertisement;
use App\Models\Campaigns; use App\Models\Campaigns;
use App\Models\Pivots\DictionaryCampaign; use App\Models\Pivots\DictionaryCampaign;
use App\Models\Pivots\GoalAdGroup; use App\Models\Pivots\GoalAdGroup;
...@@ -70,6 +71,7 @@ class CheckChanges extends DirectRequest ...@@ -70,6 +71,7 @@ class CheckChanges extends DirectRequest
} }
if (isset($response['result']['Modified']['AdGroupIds'])) { if (isset($response['result']['Modified']['AdGroupIds'])) {
foreach ($response['result']['Modified']['AdGroupIds'] as $ad_group_id) { foreach ($response['result']['Modified']['AdGroupIds'] as $ad_group_id) {
...@@ -103,6 +105,31 @@ class CheckChanges extends DirectRequest ...@@ -103,6 +105,31 @@ class CheckChanges extends DirectRequest
} }
} }
if (isset($response['result']['Modified']['AdIds'])) {
foreach ($response['result']['Modified']['AdIds'] as $ad_id) {
$ad_id = (string)$ad_id;
if ($this->getToken()->isMain()) {
$advertisement = Advertisement::where('external_id', $ad_id)->first();
if ($advertisement) {
$advertisement->update([
'updated_self' => Carbon::now(),
]);
} else {
$advertisement = Advertisement::create([
'external_id' => $ad_id,
'updated_self' => Carbon::now(),
]);
}
} else {
//
}
}
}
if (isset($this->getParams()['CampaignIds'])) { if (isset($this->getParams()['CampaignIds'])) {
if ($this->getToken()->isMain()) { if ($this->getToken()->isMain()) {
...@@ -134,17 +161,7 @@ class CheckChanges extends DirectRequest ...@@ -134,17 +161,7 @@ class CheckChanges extends DirectRequest
$this->setService('Changes'); $this->setService('Changes');
$this->setMethod('check'); $this->setMethod('check');
if (isset($params['CampaignIds'])){ $params['Timestamp'] = $this->getToken()->check_changes_ad_group_at->toIso8601ZuluString();
$this->max_count = $this->max_count_CampaignIds;
}
if (isset($params['AdGroupIds'])){
$this->max_count = $this->max_count_AdGroupIds;
}
if (isset($params['AdIds'])){
$this->max_count = $this->max_count_AdIds;
}
$this->setParams($params); $this->setParams($params);
} }
......
...@@ -15,8 +15,9 @@ use Illuminate\Support\Facades\Log; ...@@ -15,8 +15,9 @@ use Illuminate\Support\Facades\Log;
class GetAdGroups extends DirectRequest class GetAdGroups extends DirectRequest
{ {
protected $max_count = 10000; protected $max_count = -1;
protected $max_count_CampaignIds = 10; protected $max_count_CampaignIds = 10;
protected $max_count_Ids = 10000;
function call($params = null) function call($params = null)
{ {
...@@ -191,14 +192,14 @@ class GetAdGroups extends DirectRequest ...@@ -191,14 +192,14 @@ class GetAdGroups extends DirectRequest
], ],
]; ];
if (isset($filter['CampaignIds'])) { if (isset($filter['CampaignIds'])) {
$this->max_count = $this->max_count_CampaignIds;
$params['SelectionCriteria'] = [ $params['SelectionCriteria'] = [
'CampaignIds' => $filter['CampaignIds'], 'CampaignIds' => $filter['CampaignIds'],
]; ];
} }
if (isset($filter['Ids'])) { if (isset($filter['Ids'])) {
$this->max_count = $this->max_count_Ids;
$params['SelectionCriteria'] = [ $params['SelectionCriteria'] = [
'Ids' => $filter['Ids'], 'Ids' => $filter['Ids'],
]; ];
......
...@@ -27,10 +27,10 @@ class GetAds extends DirectRequest ...@@ -27,10 +27,10 @@ class GetAds extends DirectRequest
{ {
$params = $this->getParams(); $params = $this->getParams();
if (isset($params['SelectionCriteria']['CampaignIds'])) { if (isset($params['SelectionCriteria']['CampaignIds'])) {
return count($params['SelectionCriteria']['CampaignIds']); return -1;
} }
if (isset($params['SelectionCriteria']['AdGroupIds'])) { if (isset($params['SelectionCriteria']['AdGroupIds'])) {
return count($params['SelectionCriteria']['AdGroupIds']); return -1;
} }
if (isset($params['SelectionCriteria']['Ids'])) { if (isset($params['SelectionCriteria']['Ids'])) {
return count($params['SelectionCriteria']['Ids']); return count($params['SelectionCriteria']['Ids']);
...@@ -42,12 +42,6 @@ class GetAds extends DirectRequest ...@@ -42,12 +42,6 @@ class GetAds extends DirectRequest
{ {
$params = $this->getParams(); $params = $this->getParams();
if (isset($params['SelectionCriteria']['CampaignIds'])) {
return $this->sliceByKey($maxObjects, ['SelectionCriteria', 'CampaignIds']);
}
if (isset($params['SelectionCriteria']['AdGroupIds'])) {
return $this->sliceByKey($maxObjects, ['SelectionCriteria', 'AdGroupIds']);
}
if (isset($params['SelectionCriteria']['Ids'])) { if (isset($params['SelectionCriteria']['Ids'])) {
return $this->sliceByKey($maxObjects, ['SelectionCriteria', 'Ids']); return $this->sliceByKey($maxObjects, ['SelectionCriteria', 'Ids']);
} }
...@@ -85,8 +79,6 @@ class GetAds extends DirectRequest ...@@ -85,8 +79,6 @@ class GetAds extends DirectRequest
// //
} }
$ids = [];
foreach ($response['result']['Ads'] as $ad) { foreach ($response['result']['Ads'] as $ad) {
$ad_group = $ad_groups->get((string)$ad['AdGroupId']); $ad_group = $ad_groups->get((string)$ad['AdGroupId']);
...@@ -114,29 +106,35 @@ class GetAds extends DirectRequest ...@@ -114,29 +106,35 @@ class GetAds extends DirectRequest
'type' => $ad['Type'], 'type' => $ad['Type'],
'sub_type' => $ad['Subtype'], 'sub_type' => $ad['Subtype'],
'title' => $ad['TextAd']['Title'], 'updated_self' => null,
'title2' => $ad['TextAd']['Title2'],
'text' => $ad['TextAd']['Text'],
'href' => $ad['TextAd']['Href'],
'mobile' => $ad['TextAd']['Mobile'] === 'YES',
'display_domain' => $ad['TextAd']['DisplayDomain'],
'display_url_path' => $ad['TextAd']['DisplayUrlPath'],
'v_card_id' => $ad['TextAd']['VCardId'],
'ad_image_hash' => $ad['TextAd']['AdImageHash'],
'site_link_set_id' => $ad['TextAd']['SitelinkSetId'],
'display_url_path_moderation' => $ad['TextAd']['DisplayUrlPathModeration'],
'v_card_moderation' => $ad['TextAd']['VCardModeration'],
'site_links_moderation' => $ad['TextAd']['SitelinksModeration'],
'ad_image_moderation' => $ad['TextAd']['AdImageModeration'],
'ad_extensions' => $ad['TextAd']['AdExtensions'],
'video_extension' => $ad['TextAd']['VideoExtension'],
'price_extension' => $ad['TextAd']['PriceExtension'],
'turbo_page_id' => $ad['TextAd']['TurboPageId'],
'turbo_page_moderation' => $ad['TextAd']['TurboPageModeration'],
'business_id' => $ad['TextAd']['BusinessId'],
'prefer_v_card_over_business' => $ad['TextAd']['PreferVCardOverBusiness'],
]; ];
if (isset($ad['TextAd'])) {
$data = array_merge($data,[
'title' => $ad['TextAd']['Title'],
'title2' => $ad['TextAd']['Title2'],
'text' => $ad['TextAd']['Text'],
'href' => $ad['TextAd']['Href'],
'mobile' => $ad['TextAd']['Mobile'] === 'YES',
'display_domain' => $ad['TextAd']['DisplayDomain'],
'display_url_path' => $ad['TextAd']['DisplayUrlPath'],
'v_card_id' => $ad['TextAd']['VCardId'],
'ad_image_hash' => $ad['TextAd']['AdImageHash'],
'site_link_set_id' => $ad['TextAd']['SitelinkSetId'],
'display_url_path_moderation' => $ad['TextAd']['DisplayUrlPathModeration'],
'v_card_moderation' => $ad['TextAd']['VCardModeration'],
'site_links_moderation' => $ad['TextAd']['SitelinksModeration'],
'ad_image_moderation' => $ad['TextAd']['AdImageModeration'],
'ad_extensions' => $ad['TextAd']['AdExtensions'],
'video_extension' => $ad['TextAd']['VideoExtension'],
'price_extension' => $ad['TextAd']['PriceExtension'],
'turbo_page_id' => $ad['TextAd']['TurboPageId'],
'turbo_page_moderation' => $ad['TextAd']['TurboPageModeration'],
'business_id' => $ad['TextAd']['BusinessId'],
'prefer_v_card_over_business' => $ad['TextAd']['PreferVCardOverBusiness'],
]);
}
Advertisement::updateOrCreate([ Advertisement::updateOrCreate([
'external_id' => $external_id 'external_id' => $external_id
], $data); ], $data);
...@@ -165,17 +163,11 @@ class GetAds extends DirectRequest ...@@ -165,17 +163,11 @@ class GetAds extends DirectRequest
], ],
]; ];
if (isset($filter['CampaignIds'])) { if (isset($filter['CampaignIds'])) {
$this->max_count = $this->max_count_CampaignIds;
$params['SelectionCriteria'] = [ $params['SelectionCriteria'] = [
'CampaignIds' => $filter['CampaignIds'], 'CampaignIds' => $filter['CampaignIds'],
]; ];
} }
if (isset($filter['AdGroupIds'])) { if (isset($filter['AdGroupIds'])) {
$this->max_count = $this->max_count_AdGroupIds;
$params['SelectionCriteria'] = [ $params['SelectionCriteria'] = [
'AdGroupIds' => $filter['AdGroupIds'], 'AdGroupIds' => $filter['AdGroupIds'],
]; ];
......
...@@ -11,7 +11,8 @@ use Illuminate\Support\Facades\Log; ...@@ -11,7 +11,8 @@ use Illuminate\Support\Facades\Log;
class GetCampaigns extends DirectRequest class GetCampaigns extends DirectRequest
{ {
protected $max_count = 1000; protected $max_count = -1;
protected $max_count_Ids = 1000;
protected $timestamp; protected $timestamp;
public function call($params = null) public function call($params = null)
...@@ -109,6 +110,9 @@ class GetCampaigns extends DirectRequest ...@@ -109,6 +110,9 @@ class GetCampaigns extends DirectRequest
] ]
]; ];
if (!empty($filter['ids'])) { if (!empty($filter['ids'])) {
$this->max_count = $this->max_count_Ids;
$params['SelectionCriteria']['Ids'] = $filter['ids']; $params['SelectionCriteria']['Ids'] = $filter['ids'];
} }
$this->setParams($params); $this->setParams($params);
......
...@@ -9,7 +9,7 @@ use Illuminate\Support\Facades\Log; ...@@ -9,7 +9,7 @@ use Illuminate\Support\Facades\Log;
class GetDictionaries extends DirectRequest class GetDictionaries extends DirectRequest
{ {
protected $max_count = 10000; protected $max_count = -1;
function call($params = null) function call($params = null)
{ {
......
...@@ -213,17 +213,11 @@ class GetKeywords extends DirectRequest ...@@ -213,17 +213,11 @@ class GetKeywords extends DirectRequest
], ],
]; ];
if (isset($filter['CampaignIds'])) { if (isset($filter['CampaignIds'])) {
$this->max_count = $this->max_count_CampaignIds;
$params['SelectionCriteria'] = [ $params['SelectionCriteria'] = [
'CampaignIds' => $filter['CampaignIds'], 'CampaignIds' => $filter['CampaignIds'],
]; ];
} }
if (isset($filter['AdGroupIds'])) { if (isset($filter['AdGroupIds'])) {
$this->max_count = $this->max_count_AdGroupIds;
$params['SelectionCriteria'] = [ $params['SelectionCriteria'] = [
'AdGroupIds' => $filter['AdGroupIds'], 'AdGroupIds' => $filter['AdGroupIds'],
]; ];
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!