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