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