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