· 8 years ago · Feb 11, 2018, 09:22 PM
1<?php
2/**
3 * Created by PhpStorm.
4 * User: artyom
5 * Date: 11.02.2018
6 * Time: 21:44
7 */
8
9namespace tomal\connector;
10
11class YandexDirect extends Connector
12{
13 private $adGroupsTable;
14 private $negativeKeywordsTable;
15 private $adsTable;
16 private $audienceTargetsTable;
17 private $dynamicTextAdTargetsTable;
18 private $bidsTable;
19 private $keywordsTable;
20 private $adExtensionsTable;
21 private $clientsTable;
22 private $clientGrantsTable;
23 private $clientRepresentativesTable;
24 private $clientRestrictionsTable;
25 private $clientSettingsTable;
26 private $retargetingListsTable;
27 private $siteLinksTable;
28 private $vCardsTable;
29 private $token;
30 private $yandexLogin;
31
32 public function __construct($module, $login, $token)
33 {
34 $this->adGroupsTable = "{$module}_ad_groups";
35 $this->negativeKeywordsTable = "{$module}_negative_keywords";
36 $this->adsTable = "{$module}_ads";
37 $this->audienceTargetsTable = "{$module}_audience_targets";
38 $this->dynamicTextAdTargetsTable = "{$module}_dynamic_text_ad_targets";
39 $this->bidsTable = "{$module}_bids";
40 $this->keywordsTable = "{$module}_keywords";
41 $this->adExtensionsTable = "{$module}_ad_extensions";
42 $this->clientsTable = "{$module}_clients";
43 $this->clientGrantsTable = "{$module}_client_grants";
44 $this->clientRepresentativesTable = "{$module}_client_representatives";
45 $this->clientRestrictionsTable = "{$module}_client_restrictions";
46 $this->clientSettingsTable = "{$module}_client_settings";
47 $this->retargetingListsTable = "{$module}_retargeting_lists";
48 $this->siteLinksTable = "{$module}_site_links";
49 $this->vCardsTable = "{$module}_v_cards";
50 $this->base_api_url = "https://api.direct.yandex.com/json/v5/";
51 $this->token_api_url = "https://oauth.yandex.ru/token";
52 $this->login = $login;
53 $this->token = $token;
54 $this->yandexLogin = 'Skillvision';
55 if ($this->dropTable() && $this->createTable()) {
56 $this->init();
57 }
58 }
59
60 private function init()
61 {
62 $lastId = 0;
63 $clientLogin = $this->yandexLogin;
64 $campaignsArray = $this->makeCampaignsIdsArray($this->getCampaigns($this->token, $clientLogin));
65 for ($i = 0; $i < count($campaignsArray); $i++) {
66 $slicedCampaignArray = array_slice($campaignsArray, $lastId, 1);
67 $this->updateAdGroupsTable($slicedCampaignArray) && $this->updateAdsTable($slicedCampaignArray)
68 && $this->updateAudienceTargetsTable($slicedCampaignArray) && $this->updateDynamicTextAdTargetsTable($slicedCampaignArray) && $this->updateBidsTable($slicedCampaignArray)
69 && $this->updateKeywordsTable($slicedCampaignArray) && $this->updateAdExtensionsTable() && $this->updateClientsTable()
70 && $this->updateRetargetingListsTable() && $this->updateSiteLinksTable() && $this->updateVCardsTable();
71 $lastId = $lastId + 1;
72 }
73 return true;
74 }
75
76 private function updateAdGroupsTable($campaignsIdsArray)
77 {
78 $adGroupsArray = $this->getAdGroups($campaignsIdsArray, $this->token, $this->yandexLogin);
79 $tempGroups = (array)$adGroupsArray->result;
80
81 if (!empty($tempGroups)) {
82 foreach ($adGroupsArray->{'result'}->{'AdGroups'} as $adGroup) {
83 $sql = "
84 INSERT INTO `{$this->adGroupsTable}` (`login`, `ad_group_id`, `campaign_id`, `name`, `status`, `type`)
85 VALUES ('{$this->login}', '{$adGroup->{'Id'}}', '{$adGroup->{'CampaignId'}}', '{$adGroup->{'Name'}}', '{$adGroup->{'Status'}}', '{$adGroup->{'Type'}}');
86 ";
87 if (!empty($adGroup->{'NegativeKeywords'})) {
88 foreach ($adGroup->{'NegativeKeywords'}->{'Items'} as $negativ) {
89 $this->updateNegativeKeywordsTable($adGroup->{'Id'}, $negativ);
90 }
91 }
92 $command = \Yii::$app->yadirect_db->createCommand($sql);
93
94 try {
95 $command->execute();
96 } catch (\yii\db\Exception $e) {
97 parent::log($e->getMessage());
98 }
99 }
100 }
101 return true;
102 }
103
104 private function updateNegativeKeywordsTable($adGroupId, $word)
105 {
106 $sql = "
107 INSERT INTO `{$this->negativeKeywordsTable}` (`login`, `ad_group_id`, `word`)
108 VALUES ('{$this->login}', '{$adGroupId}', '{$word}');
109 ";
110 $command = \Yii::$app->yadirect_db->createCommand($sql);
111
112 try {
113 $command->execute();
114 } catch (\yii\db\Exception $e) {
115 parent::log($e->getMessage());
116 }
117 return true;
118 }
119
120 private function updateAdsTable($campaignsIdsArray)
121 {
122 $adsArray = $this->getAds($campaignsIdsArray, $this->token, $this->yandexLogin);
123 $tempAds = (array)$adsArray->result;
124
125 if (!empty($tempAds)) {
126 foreach ($adsArray->{'result'}->{'Ads'} as $ad) {
127 $sql = "
128 INSERT INTO `{$this->adsTable}` (`login`, `ad_id`, `ad_group_id`, `campaign_id`, `status`, `status_clarification`, `state`)
129 VALUES ('{$this->login}', '{$ad->{'Id'}}', '{$ad->{'AdGroupId'}}', '{$ad->{'CampaignId'}}', '{$ad->{'Status'}}', '{$ad->{'StatusClarification'}}', '{$ad->{'State'}}');
130 ";
131 }
132 $command = \Yii::$app->yadirect_db->createCommand($sql);
133
134 try {
135 $command->execute();
136 } catch (\yii\db\Exception $e) {
137 parent::log($e->getMessage());
138 }
139 }
140 return true;
141 }
142
143 private function updateAudienceTargetsTable($campaignsIdsArray)
144 {
145 $audienceTargetsArray = $this->getAudienceTargets($campaignsIdsArray, $this->token, $this->yandexLogin);
146 $tempAudience = (array)$audienceTargetsArray->result;
147
148 if (!empty($tempAudience)) {
149 foreach ($audienceTargetsArray->{'result'}->{'AudienceTargets'} as $audienceTarget) {
150 $sql = "
151 INSERT INTO `{$this->audienceTargetsTable}` (`login`, `audience_target_id`, `ad_group_id`, `campaign_id`, `retargeting_list_id`, `state`, `context_bid`, `strategy_priority`)
152 VALUES ('{$this->login}', '{$audienceTarget->{'Id'}}', '{$audienceTarget->{'AdGroupId'}}', '{$audienceTarget->{'CampaignId'}}', '{$audienceTarget->{'RetargetingListId'}}', '{$audienceTarget->{'State'}}', '{$audienceTarget->{'ContextBid'}}', '{$audienceTarget->{'StrategyPriority'}}');
153 ";
154
155 $command = \Yii::$app->yadirect_db->createCommand($sql);
156
157 try {
158 $command->execute();
159 } catch (\yii\db\Exception $e) {
160 parent::log($e->getMessage());
161 }
162 }
163
164 return true;
165 }
166
167 return false;
168 }
169
170 private function updateDynamicTextAdTargetsTable($campaignsIdsArray)
171 {
172 $dynamicTextAdTargetsArray = $this->getDynamicTextAdTargets($campaignsIdsArray, $this->token, $this->yandexLogin);
173 $tempDynamicTextAdTargets = (array)$dynamicTextAdTargetsArray->result;
174
175 if (!empty($tempDynamicTextAdTargets)) {
176 foreach ($dynamicTextAdTargetsArray->{'result'}->{'Webpages'} as $dynamicTextAdTarget) {
177 $sql = "
178 INSERT INTO `{$this->dynamicTextAdTargetsTable}` (`login`, `dynamic_text_ad_target_id`, `ad_group_id`, `campaign_id`, `name`, `bid`, `context_bid`, `state`, `status_clarification`, `condition_type`)
179 VALUES ('{$this->login}', '{$dynamicTextAdTarget->{'Id'}}', '{$dynamicTextAdTarget->{'AdGroupId'}}', '{$dynamicTextAdTarget->{'CampaignId'}}', '{$dynamicTextAdTarget->{'Name'}}', '{$dynamicTextAdTarget->{'Bid'}}', '{$dynamicTextAdTarget->{'ContextBid'}}', '{$dynamicTextAdTarget->{'State'}}', '{$dynamicTextAdTarget->{'StatusClarification'}}', '{$dynamicTextAdTarget->{'ConditionType'}}');
180 ";
181 $command = \Yii::$app->yadirect_db->createCommand($sql);
182
183 try {
184 $command->execute();
185 } catch (\yii\db\Exception $e) {
186 parent::log($e->getMessage());
187 }
188 }
189 }
190 return true;
191 }
192
193 private function updateBidsTable($campaignsIdsArray)
194 {
195 $bidsArray = $this->getBids($campaignsIdsArray, $this->token, $this->yandexLogin);
196 $tempBids = (array)$bidsArray->result;
197
198 if (!empty($tempBids)) {
199 foreach ($bidsArray->{'result'}->{'Bids'} as $bid) {
200 $sql = "
201 INSERT INTO `{$this->bidsTable}` (`login`, `ad_group_id`, `campaign_id`, `keyword_id`, `bid`, `min_search_price`, `serving_status`)
202 VALUES ('{$this->login}', '{$bid->{'AdGroupId'}}', '{$bid->{'CampaignId'}}', '{$bid->{'KeywordId'}}', '{$bid->{'Bid'}}', '{$bid->{'MinSearchPrice'}}', '{$bid->{'ServingStatus'}}');
203 ";
204 $command = \Yii::$app->yadirect_db->createCommand($sql);
205
206 try {
207 $command->execute();
208 } catch (\yii\db\Exception $e) {
209 parent::log($e->getMessage());
210 }
211 }
212 }
213 return true;
214 }
215
216 private function updateKeywordsTable($campaignsIdsArray)
217 {
218 $keywordsArray = $this->getKeywords($campaignsIdsArray, $this->token, $this->yandexLogin);
219 $tempKeywords = (array)$keywordsArray->result;
220
221 if (!empty($tempKeywords)) {
222 foreach ($keywordsArray->{'result'}->{'Keywords'} as $keyword) {
223 $sql = "
224 INSERT INTO `{$this->keywordsTable}` (`login`, `keyword_id`, `ad_group_id`, `campaign_id`, `keyword`, `bid`, `state`, `status`, `statistics_search_impressions`, `statistics_search_clicks`, `statistics_network_impressions`, `statistics_network_clicks`)
225 VALUES ('{$this->login}', '{$keyword->{'Id'}}', '{$keyword->{'AdGroupId'}}', '{$keyword->{'CampaignId'}}', '{$keyword->{'Keyword'}}', '{$keyword->{'Bid'}}', '{$keyword->{'State'}}', '{$keyword->{'Status'}}', '{$keyword->{'StatisticsSearch'}->{'Impressions'}}', '{$keyword->{'StatisticsSearch'}->{'Clicks'}}', '{$keyword->{'StatisticsNetwork'}->{'Impressions'}}', '{$keyword->{'StatisticsNetwork'}->{'Clicks'}}');
226 ";
227 $command = \Yii::$app->yadirect_db->createCommand($sql);
228
229 try {
230 $command->execute();
231 } catch (\yii\db\Exception $e) {
232 parent::log($e->getMessage());
233 }
234 }
235 }
236 return true;
237 }
238
239 private function updateAdExtensionsTable()
240 {
241 $adExtensionsArray = $this->getAdExtensions($this->token, $this->yandexLogin);
242 $tempAdExtensions = (array)$adExtensionsArray->result;
243
244 if (!empty($tempAdExtensions)) {
245 foreach ($adExtensionsArray->{'result'}->{'AdExtensions'} as $adExtension) {
246 $sql = "
247 INSERT INTO `{$this->adExtensionsTable}` (`login`, `ad_extension_id`, `associated`, `type`, `status`)
248 VALUES ('{$this->login}', '{$adExtension->{'Id'}}', '{$adExtension->{'Associated'}}', '{$adExtension->{'Type'}}', '{$adExtension->{'Status'}}');
249 ";
250 $command = \Yii::$app->yadirect_db->createCommand($sql);
251
252 try {
253 $command->execute();
254 } catch (\yii\db\Exception $e) {
255 parent::log($e->getMessage());
256 }
257 }
258 }
259 return true;
260 }
261
262 private function updateClientsTable()
263 {
264 $clientsArray = $this->getClients($this->token, $this->yandexLogin);
265 $tempClients = (array)$clientsArray->result;
266
267 if (!$tempClients) {
268 foreach ($clientsArray->{'result'}->{'Clients'} as $client) {
269 $sql = "
270 INSERT INTO `{$this->clientsTable}` (`login`, `client_id`, `created_at`, `archived`, `currency`, `account_quality`, `client_login`, `sms_phone_number`, `email`, `lang`, `overdraft_sum_available`, `type`, `vat_rate`, `client_info`, `phone`)
271 VALUES ('{$this->login}', '{$client->{'ClientId'}}', '{$client->{'CreatedAt'}}', '{$client->{'Archived'}}', '{$client->{'Currency'}}', '{$client->{'AccountQuality'}}', '{$client->{'Login'}}', '{$client->{'Notification'}->{'SmsPhoneNumber'}}', '{$client->{'Notification'}->{'Email'}}', '{$client->{'Notification'}->{'Lang'}}', '{$client->{'OverdraftSumAvailable'}}', '{$client->{'Type'}}', '{$client->{'VatRate'}}', '{$client->{'ClientInfo'}}', '{$client->{'Phone'}}');
272 ";
273 $command = \Yii::$app->yadirect_db->createCommand($sql);
274
275 try {
276 $command->execute();
277 } catch (\yii\db\Exception $e) {
278 parent::log($e->getMessage());
279 }
280
281 foreach ($client->{'Grants'} as $clientGrants) {
282 $sql = "
283 INSERT INTO `{$this->clientGrantsTable}` (`login`, `client_id`, `privilege`, `value`)
284 VALUES ('{$this->login}', '{$client->{'ClientId'}}', '{$clientGrants->{'Privilege'}}', '{$clientGrants->{'Value'}}');
285 ";
286 $command = \Yii::$app->yadirect_db->createCommand($sql);
287
288 try {
289 $command->execute();
290 } catch (\yii\db\Exception $e) {
291 parent::log($e->getMessage());
292
293 }
294 }
295
296 foreach ($client->{'Representatives'} as $clientRepresentatives) {
297 $sql = "
298 INSERT INTO `{$this->clientRepresentativesTable}` (`login`, `client_id`, `email`, `client_login`, `role`)
299 VALUES ('{$this->login}', '{$client->{'ClientId'}}', '{$clientRepresentatives->{'Email'}}', '{$clientRepresentatives->{'Login'}}', '{$clientRepresentatives->{'Role'}}');
300 ";
301 $command = \Yii::$app->yadirect_db->createCommand($sql);
302
303 try {
304 $command->execute();
305 } catch (\yii\db\Exception $e) {
306 parent::log($e->getMessage());
307 }
308 }
309
310 foreach ($client->{'Restrictions'} as $clientRestrictions) {
311 $sql = "
312 INSERT INTO `{$this->clientRestrictionsTable}` (`login`, `client_id`, `element`, `value`)
313 VALUES ('{$this->login}', '{$client->{'ClientId'}}', '{$clientRestrictions->{'Element'}}', '{$clientRestrictions->{'Value'}}');
314 ";
315 $command = \Yii::$app->yadirect_db->createCommand($sql);
316
317 try {
318 $command->execute();
319 } catch (\yii\db\Exception $e) {
320 parent::log($e->getMessage());
321 }
322 }
323
324 foreach ($client->{'Settings'} as $clientSettings) {
325 $sql = "
326 INSERT INTO `{$this->clientSettingsTable}` (`login`, `client_id`, `option`, `value`)
327 VALUES ('{$this->login}', '{$client->{'ClientId'}}', '{$clientSettings->{'Option'}}', '{$clientSettings->{'Value'}}');
328 ";
329 $command = \Yii::$app->yadirect_db->createCommand($sql);
330
331 try {
332 $command->execute();
333 } catch (\yii\db\Exception $e) {
334 parent::log($e->getMessage());
335 }
336 }
337 }
338 }
339 return true;
340 }
341
342 private function updateRetargetingListsTable()
343 {
344 $retargetingListsArray = $this->getRetargetingLists($this->token, $this->yandexLogin);
345 $tempRetargetingLists = (array)$retargetingListsArray->result;
346
347 if (!empty($tempRetargetingLists)) {
348 foreach ($retargetingListsArray->{'result'}->{'RetargetingLists'} as $retargetingList) {
349 $sql = "
350 INSERT INTO `{$this->retargetingListsTable}` (`login`, `retargeting_list_id`, `name`, `description`, `is_available`, `scope`)
351 VALUES ('{$this->login}', '{$retargetingList->{'Id'}}', '{$retargetingList->{'Name'}}', '{$retargetingList->{'Description'}}', '{$retargetingList->{'IsAvailable'}}', '{$retargetingList->{'Scope'}}');
352 ";
353 $command = \Yii::$app->yadirect_db->createCommand($sql);
354
355 try {
356 $command->execute();
357 } catch (\yii\db\Exception $e) {
358 parent::log($e->getMessage());
359 }
360 }
361 }
362 return true;
363 }
364
365 private function updateSiteLinksTable()
366 {
367 $siteLinksArray = $this->getSiteLinks($this->token, $this->yandexLogin);
368 $tempSiteLinks = (array)$siteLinksArray->result;
369
370 if (!empty($tempSiteLinks)) {
371 foreach ($siteLinksArray->{'result'}->{'SitelinksSets'} as $siteSets) {
372 foreach ($siteSets->{'Sitelinks'} as $siteLink) {
373 $sql = "
374 INSERT INTO `{$this->siteLinksTable}` (`login`, `site_link_id`, `title`, `href`)
375 VALUES ('{$this->login}', '{$siteSets->{'Id'}}', '{$siteLink->{'Title'}}', '{$siteLink->{'Href'}}');
376 ";
377 $command = \Yii::$app->yadirect_db->createCommand($sql);
378
379 try {
380 $command->execute();
381 } catch (\yii\db\Exception $e) {
382 parent::log($e->getMessage());
383 }
384 }
385 }
386 }
387 return true;
388 }
389
390 private function updateVCardsTable()
391 {
392 $VCardsArray = $this->getVCards($this->token, $this->yandexLogin);
393 $tempVCards = (array)$VCardsArray->result;
394 if (!$tempVCards) {
395 foreach ($VCardsArray->{'result'}->{'VCards'} as $vCard) {
396 $sql = "
397 INSERT INTO `{$this->vCardsTable}` (`login`, `v_card_id`, `campaign_id`, `country`, `city`, `work_time`, `phone_country_code`, `phone_city_code`, `phone_number`, `street`, `company_name`, `contact_email`, `contact_person`)
398 VALUES ('{$this->login}', '{$vCard->{'Id'}}', '{$vCard->{'CampaignId'}}', '{$vCard->{'Country'}}', '{$vCard->{'City'}}', '{$vCard->{'WorkTime'}}', '{$vCard->{'Phone'}->{'CountryCode'}}', '{$vCard->{'Phone'}->{'CityCode'}}', '{$vCard->{'Phone'}->{'PhoneNumber'}}', '{$vCard->{'Street'}}', '{$vCard->{'CompanyName'}}', '{$vCard->{'ContactEmail'}}', '{$vCard->{'ContactPerson'}}');
399 ";
400 $command = \Yii::$app->yadirect_db->createCommand($sql);
401
402 try {
403 $command->execute();
404 } catch (\yii\db\Exception $e) {
405 parent::log($e->getMessage());
406 }
407 }
408 }
409 return true;
410 }
411
412 private function getCampaigns($token, $clientLogin)
413 {
414 $urlCampaigns = 'https://api.direct.yandex.com/json/v5/campaigns';
415 $paramsCampaigns = array(
416 'method' => 'get',
417 'params' => array(
418 'SelectionCriteria' => (object)array(),
419 'FieldNames' => array('BlockedIps', 'ClientInfo', 'Currency', 'DailyBudget', 'EndDate', 'ExcludedSites', 'Funds', 'Id', 'Name', 'NegativeKeywords', 'Notification', 'RepresentedBy', 'StartDate', 'Statistics', 'State', 'Status', 'StatusPayment', 'StatusClarification', 'SourceId', 'TimeTargeting', 'TimeZone', 'Type'))
420 );
421 return $this->makeRequest($urlCampaigns, $paramsCampaigns, $token, $clientLogin);
422 }
423
424 private function getAdExtensions($token, $clientLogin)
425 {
426 $urlAdExtensions = 'https://api.direct.yandex.com/json/v5/adextensions';
427 $paramsAdExtensions = array(
428 'method' => 'get',
429 'params' => array(
430 'SelectionCriteria' => (object)array(),
431 'FieldNames' => array('Id', 'Type', 'Status', 'StatusClarification', 'Associated'))
432 );
433 return $this->makeRequest($urlAdExtensions, $paramsAdExtensions, $token, $clientLogin);
434 }
435
436 private function getAdGroups($campaignsIdsArray, $token, $clientLogin)
437 {
438 $urlAdGroups = 'https://api.direct.yandex.com/json/v5/adgroups';
439 $paramsAdGroups = array(
440 'method' => 'get',
441 'params' => array(
442 'SelectionCriteria' => (object)array('CampaignIds' => $campaignsIdsArray),
443 'FieldNames' => array('CampaignId', 'Id', 'Name', 'NegativeKeywords', 'RegionIds', 'RestrictedRegionIds', 'ServingStatus', 'Status', 'Subtype', 'TrackingParams', 'Type'))
444 );
445 return $this->makeRequest($urlAdGroups, $paramsAdGroups, $token, $clientLogin);
446 }
447
448 private function getAds($campaignsIdsArray, $token, $clientLogin)
449 {
450 $urlAds = 'https://api.direct.yandex.com/json/v5/ads';
451 $paramsAds = array(
452 'method' => 'get',
453 'params' => array(
454 'SelectionCriteria' => (object)array('CampaignIds' => $campaignsIdsArray),
455 'FieldNames' => array('AdCategories', 'AgeLabel', 'AdGroupId', 'CampaignId', 'Id', 'State', 'Status', 'StatusClarification', 'Type', 'Subtype'))
456 );
457 return $this->makeRequest($urlAds, $paramsAds, $token, $clientLogin);
458 }
459
460 private function getClients($token, $clientLogin)
461 {
462 $urlClients = 'https://api.direct.yandex.com/json/v5/clients';
463 $paramsClients = array(
464 'method' => 'get',
465 'params' => array(
466 'FieldNames' => array('AccountQuality', 'Archived', 'ClientId', 'ClientInfo', 'CountryId', 'CreatedAt', 'Currency', 'Grants', 'Login', 'Notification', 'OverdraftSumAvailable', 'Phone', 'Representatives', 'Restrictions', 'Settings', 'Type', 'VatRate'))
467 );
468 return $this->makeRequest($urlClients, $paramsClients, $token, $clientLogin);
469 }
470
471 private function getAudienceTargets($campaignsIdsArray, $token, $clientLogin)
472 {
473 $urlAudienceTargets = 'https://api.direct.yandex.com/json/v5/audiencetargets';
474 $paramsAudienceTargets = array(
475 'method' => 'get',
476 'params' => array(
477 'SelectionCriteria' => (object)array('CampaignIds' => $campaignsIdsArray),
478 'FieldNames' => array('Id', 'AdGroupId', 'CampaignId', 'RetargetingListId', 'InterestId', 'ContextBid', 'StrategyPriority', 'State'))
479 );
480 return $this->makeRequest($urlAudienceTargets, $paramsAudienceTargets, $token, $clientLogin);
481 }
482
483 private function getDynamicTextAdTargets($campaignsIdsArray, $token, $clientLogin)
484 {
485 $urlDynamicTextAdTargets = 'https://api.direct.yandex.com/json/v5/dynamictextadtargets';
486 $paramsDynamicTextAdTargets = array(
487 'method' => 'get',
488 'params' => array(
489 'SelectionCriteria' => (object)array('CampaignIds' => $campaignsIdsArray),
490 'FieldNames' => array('AdGroupId', 'Bid', 'CampaignId', 'Conditions', 'ConditionType', 'ContextBid', 'Id', 'Name', 'State', 'StatusClarification', 'StrategyPriority'))
491 );
492 return $this->makeRequest($urlDynamicTextAdTargets, $paramsDynamicTextAdTargets, $token, $clientLogin);
493 }
494
495 private function getBids($campaignsIdsArray, $token, $clientLogin)
496 {
497 $urlBids = 'https://api.direct.yandex.com/json/v5/bids';
498 $paramsBids = array(
499 'method' => 'get',
500 'params' => array(
501 'SelectionCriteria' => (object)array('CampaignIds' => $campaignsIdsArray),
502 'FieldNames' => array('KeywordId', 'AdGroupId', 'CampaignId', 'ServingStatus', 'Bid', 'ContextBid', 'StrategyPriority', 'CompetitorsBids', 'ContextBid', 'StrategyPriority', 'CompetitorsBids', 'SearchPrices', 'ContextCoverage', 'MinSearchPrice', 'CurrentSearchPrice', 'AuctionBids'))
503 );
504 return $this->makeRequest($urlBids, $paramsBids, $token, $clientLogin);
505 }
506
507 private function getKeywords($campaignsIdsArray, $token, $clientLogin)
508 {
509 $urlKeywords = 'https://api.direct.yandex.com/json/v5/keywords';
510 $paramsGetKeywords = array(
511 'method' => 'get',
512 'params' => array(
513 'SelectionCriteria' => (object)array('CampaignIds' => $campaignsIdsArray),
514 'FieldNames' => array('Id', 'Keyword', 'State', 'Status', 'ServingStatus', 'AdGroupId', 'CampaignId', 'Bid', 'ContextBid', 'StrategyPriority', 'UserParam1', 'UserParam2', 'Productivity', 'StatisticsSearch', 'StatisticsNetwork'))
515 );
516 return $this->makeRequest($urlKeywords, $paramsGetKeywords, $token, $clientLogin);
517 }
518
519 private function getRetargetingLists($token, $clientLogin)
520 {
521 $urlRetargetingLists = 'https://api.direct.yandex.com/json/v5/retargetinglists';
522 $paramsGetRetargetingList = array(
523 'method' => 'get',
524 'params' => array(
525 'FieldNames' => array('Id', 'Name', 'Description', 'Rules', 'IsAvailable', 'Scope'))
526 );
527 return $this->makeRequest($urlRetargetingLists, $paramsGetRetargetingList, $token, $clientLogin);
528 }
529
530 private function getSiteLinks($token, $clientLogin)
531 {
532 $urlSitelinks = 'https://api.direct.yandex.com/json/v5/sitelinks';
533 $paramsGetSiteLinks = array(
534 'method' => 'get',
535 'params' => array(
536 'FieldNames' => array('Id', 'Sitelinks'))
537 );
538 return $this->makeRequest($urlSitelinks, $paramsGetSiteLinks, $token, $clientLogin);
539 }
540
541 private function getVCards($token, $clientLogin)
542 {
543 $urlvcards = 'https://api.direct.yandex.com/json/v5/vcards';
544 $paramsGetVCards = array(
545 'method' => 'get',
546 'params' => array(
547 'FieldNames' => array('Id', 'Country', 'City', 'Street', 'House', 'Building', 'Apartment', 'CompanyName', 'ExtraMessage', 'ContactPerson', 'ContactEmail', 'MetroStationId', 'CampaignId', 'Ogrn', 'WorkTime', 'InstantMessenger', 'Phone', 'PointOnMap'))
548 );
549 return $this->makeRequest($urlvcards, $paramsGetVCards, $token, $clientLogin);
550 }
551
552 private function makeCampaignsIdsArray($responseBody)
553 {
554 $campaignsIds = array();
555 foreach ($responseBody->result->Campaigns as $campaign) {
556 array_push($campaignsIds, $campaign->Id);
557 }
558 return $campaignsIds;
559 }
560
561 private function makeRequest($url, $params, $token, $clientLogin)
562 {
563 $headers = array(
564 "Authorization: Bearer $token", // OAuth-токен. ИÑпользование Ñлова Bearer обÑзательно
565 "Accept-Language: ru", // Язык ответных Ñообщений
566 "Content-Type: application/json; charset=utf-8" // Тип данных и кодировка запроÑа
567 );
568
569 // Преобразование входных параметров запроÑа в формат JSON
570 $body = json_encode($params, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
571
572 // Ð˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ cURL
573 $curl = curl_init();
574 curl_setopt($curl, CURLOPT_URL, $url);
575 curl_setopt($curl, CURLOPT_POST, true);
576 curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
577
578 /*
579 Ð”Ð»Ñ Ð¿Ð¾Ð»Ð½Ð¾Ñ†ÐµÐ½Ð½Ð¾Ð³Ð¾ иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð° HTTPS можно включить проверку SSL-Ñертификата Ñервера API Директа.
580 Чтобы включить проверку, уÑтановите опцию CURLOPT_SSL_VERIFYPEER в true, а также раÑкомментируйте Ñтроку Ñ Ð¾Ð¿Ñ†Ð¸ÐµÐ¹ CURLOPT_CAINFO и укажите путь к локальной копии корневого SSL-Ñертификата.
581 */
582 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
583 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
584 curl_setopt($curl, CURLOPT_HEADER, true);
585 curl_setopt($curl, CURLINFO_HEADER_OUT, true);
586 curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
587
588 // Выполнение запроÑа, получение результата
589 $result = curl_exec($curl);
590 $responseHeadersSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
591 $responseBody = substr($result, $responseHeadersSize);
592 $responseBody = json_decode($responseBody);
593
594
595 // }
596 //print_r($responseBody);
597 curl_close($curl);
598
599 return $responseBody;
600 }
601
602
603 private function createTable()
604 {
605 $sql = "
606 CREATE TABLE IF NOT EXISTS `{$this->adGroupsTable}` (
607 `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
608 `login` varchar(255) NOT NULL,
609 `ad_group_id` varchar(255),
610 `campaign_id` varchar(255),
611 `name` varchar(255),
612 `status` varchar(255),
613 `type` varchar(255)
614 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
615
616 CREATE TABLE IF NOT EXISTS `{$this->negativeKeywordsTable}` (
617 `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
618 `login` varchar(255) NOT NULL,
619 `ad_group_id` varchar(255),
620 `word` varchar(255)
621 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
622
623 CREATE TABLE IF NOT EXISTS `{$this->adsTable}` (
624 `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
625 `login` varchar(255) NOT NULL,
626 `ad_id` varchar(255),
627 `ad_group_id` varchar(255),
628 `campaign_id` varchar(255),
629 `status` varchar(255),
630 `status_clarification` varchar(255),
631 `state` varchar(255)
632 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
633
634 CREATE TABLE IF NOT EXISTS `{$this->audienceTargetsTable}` (
635 `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
636 `login` varchar(255) NOT NULL,
637 `audience_target_id` varchar(255),
638 `ad_group_id` varchar(255),
639 `campaign_id` varchar(255),
640 `retargeting_list_id` varchar(255),
641 `state` varchar(255),
642 `context_bid` varchar(255),
643 `strategy_priority` varchar(255)
644 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
645
646 CREATE TABLE IF NOT EXISTS `{$this->dynamicTextAdTargetsTable}` (
647 `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
648 `login` varchar(255) NOT NULL,
649 `dynamic_text_ad_target_id` varchar(255),
650 `ad_group_id` varchar(255),
651 `campaign_id` varchar(255),
652 `name` varchar(255),
653 `bid` varchar(255),
654 `context_bid` varchar(255),
655 `state` varchar(255),
656 `status_clarification` varchar(255),
657 `condition_type` varchar(255)
658 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
659
660 CREATE TABLE IF NOT EXISTS `{$this->bidsTable}` (
661 `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
662 `login` varchar(255) NOT NULL,
663 `ad_group_id` varchar(255),
664 `campaign_id` varchar(255),
665 `keyword_id` varchar(255),
666 `bid` varchar(255),
667 `min_search_price` varchar(255),
668 `serving_status` varchar(255)
669 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
670
671 CREATE TABLE IF NOT EXISTS `{$this->keywordsTable}` (
672 `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
673 `login` varchar(255) NOT NULL,
674 `keyword_id` varchar(255),
675 `ad_group_id` varchar(255),
676 `campaign_id` varchar(255),
677 `keyword` varchar(255),
678 `bid` varchar(255),
679 `state` varchar(255),
680 `status` varchar(255),
681 `statistics_search_impressions` varchar(255),
682 `statistics_search_clicks` varchar(255),
683 `statistics_network_impressions` varchar(255),
684 `statistics_network_clicks` varchar(255)
685 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
686
687 CREATE TABLE IF NOT EXISTS `{$this->adExtensionsTable}` (
688 `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
689 `login` varchar(255) NOT NULL,
690 `ad_extension_id` varchar(255),
691 `associated` varchar(255),
692 `type` varchar(255),
693 `status` varchar(255)
694 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
695
696 CREATE TABLE IF NOT EXISTS `{$this->clientsTable}` (
697 `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
698 `login` varchar(255) NOT NULL,
699 `client_id` varchar(255),
700 `created_at` varchar(255),
701 `archived` varchar(255),
702 `currency` varchar(255),
703 `account_quality` varchar(255),
704 `client_login` varchar(255),
705 `sms_phone_number` varchar(255),
706 `email` varchar(255),
707 `lang` varchar(255),
708 `overdraft_sum_available` varchar(255),
709 `type` varchar(255),
710 `vat_rate` varchar(255),
711 `client_info` varchar(255),
712 `phone` varchar(255)
713 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
714
715 CREATE TABLE IF NOT EXISTS `{$this->clientGrantsTable}` (
716 `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
717 `login` varchar(255) NOT NULL,
718 `client_id` varchar(255),
719 `privilege` varchar(255),
720 `value` varchar(255)
721 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
722
723 CREATE TABLE IF NOT EXISTS `{$this->clientRepresentativesTable}` (
724 `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
725 `login` varchar(255) NOT NULL,
726 `client_id` varchar(255),
727 `email` varchar(255),
728 `client_login` varchar(255),
729 `role` varchar(255)
730 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
731
732 CREATE TABLE IF NOT EXISTS `{$this->clientRestrictionsTable}` (
733 `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
734 `login` varchar(255) NOT NULL,
735 `client_id` varchar(255),
736 `element` varchar(255),
737 `value` varchar(255)
738 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
739
740 CREATE TABLE IF NOT EXISTS `{$this->clientSettingsTable}` (
741 `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
742 `login` varchar(255),
743 `client_id` varchar(255),
744 `option` varchar(255),
745 `value` varchar(255)
746 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
747
748 CREATE TABLE IF NOT EXISTS `{$this->retargetingListsTable}` (
749 `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
750 `login` varchar(255) NOT NULL,
751 `retargeting_list_id` varchar(255),
752 `name` varchar(255),
753 `description` varchar(255),
754 `is_available` varchar(255),
755 `scope` varchar(255)
756 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
757
758 CREATE TABLE IF NOT EXISTS `{$this->siteLinksTable}` (
759 `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
760 `login` varchar(255) NOT NULL,
761 `site_link_id` varchar(255),
762 `title` varchar(255),
763 `href` varchar(255)
764 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
765
766 CREATE TABLE IF NOT EXISTS `{$this->vCardsTable}` (
767 `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
768 `login` varchar(255) NOT NULL,
769 `v_card_id` varchar(255),
770 `campaign_id` varchar(255),
771 `country` varchar(255),
772 `city` varchar(255),
773 `work_time` varchar(255),
774 `phone_country_code` varchar(255),
775 `phone_city_code` varchar(255),
776 `phone_number` varchar(255),
777 `street` varchar(255),
778 `company_name` varchar(255),
779 `contact_email` varchar(255),
780 `contact_person` varchar(255)
781 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
782 ";
783
784 $command = \Yii::$app->yadirect_db->createCommand($sql);
785 $command->execute();
786
787 return true;
788
789 }
790
791 private function dropTable()
792 {
793 $sql = "
794 DROP TABLE IF EXISTS `{$this->adGroupsTable}`;
795 DROP TABLE IF EXISTS `{$this->negativeKeywordsTable}`;
796 DROP TABLE IF EXISTS `{$this->adsTable}`;
797 DROP TABLE IF EXISTS `{$this->audienceTargetsTable}`;
798 DROP TABLE IF EXISTS `{$this->dynamicTextAdTargetsTable}`;
799 DROP TABLE IF EXISTS `{$this->bidsTable}`;
800 DROP TABLE IF EXISTS `{$this->keywordsTable}`;
801 DROP TABLE IF EXISTS `{$this->adExtensionsTable}`;
802 DROP TABLE IF EXISTS `{$this->clientsTable}`;
803 DROP TABLE IF EXISTS `{$this->clientGrantsTable}`;
804 DROP TABLE IF EXISTS `{$this->clientRepresentativesTable}`;
805 DROP TABLE IF EXISTS `{$this->clientRestrictionsTable}`;
806 DROP TABLE IF EXISTS `{$this->clientSettingsTable}`;
807 DROP TABLE IF EXISTS `{$this->retargetingListsTable}`;
808 DROP TABLE IF EXISTS `{$this->siteLinksTable}`;
809 DROP TABLE IF EXISTS `{$this->vCardsTable}`;
810 ";
811
812 $command = \Yii::$app->yadirect_db->createCommand($sql);
813
814 try {
815 $command->execute();
816 } catch (\yii\db\Exception $e) {
817 parent::log($e->getMessage());
818 }
819
820 return true;
821 }
822
823}