1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
accountvkads.php
См. документацию.
1<?php
2
3namespace Bitrix\Seo\Analytics\Services;
4
5use Bitrix\Main\Context;
6use Bitrix\Main\Error;
7use Bitrix\Main\Result;
8use Bitrix\Main\Type\DateTime;
9use Bitrix\Seo\Analytics\Internals\Expenses;
10use Bitrix\Main\Type\Date;
11use Bitrix\Seo\Analytics\Internals\ExpensesCollection;
12use Bitrix\Seo\Retargeting\Response;
13use Bitrix\Seo\Retargeting\Services\ResponseVkads;
14
16{
17 const TYPE_CODE = 'vkads';
18
19 const MAX_ADS_EDIT = 20;
20 const CURRENCY_CODE = 'RUB';
21
22 protected static $listRowMap = array(
23 'ID' => 'ACCOUNT_ID',
24 'NAME' => 'NAME',
25 );
26
27 public function getList()
28 {
29 $result = $this->getRequest()->send([
30 'methodName' => 'analytics.account.list.full',
31 ]);
32 if ($result->isSuccess())
33 {
34 $list = [];
35 while ($item = $result->fetch())
36 {
37 if (
38 (
39 isset($item['CLIENT_NAME'])
40 || isset($item['NAME'])
41 )
42 && isset($item['ID'])
43 )
44 {
45 $list[] = [
46 'NAME' => !empty(trim($item['CLIENT_NAME'])) ? $item['CLIENT_NAME'] : $item['NAME'],
47 'ACCOUNT_ID' => $item['ID'],
48 ];
49 }
50 }
51 $result->setData($list);
52 }
53
54 return $result;
55 }
56
57 public function getProfile()
58 {
59 $response = $this->getRequest()->send([
60 'methodName' => 'analytics.profile',
61 'parameters' => []
62 ]);
63
64 if ($response->isSuccess() && $data = $response->fetch())
65 {
66 $result = [
67 'ID' => $data['ID'],
68 'NAME' => $data['FIRST_NAME'] . ' ' . $data['LAST_NAME'],
69 'LINK' => 'https://ads.vk.com/hq/budget/transactions/',
70 ];
71
72 $result['PICTURE'] = (Context::getCurrent()->getRequest()->isHttps() ? 'https' : 'http')
73 . '://'
74 . Context::getCurrent()->getServer()->getHttpHost() . '/bitrix/images/seo/integration/vklogo.svg';
75
76 return $result;
77 }
78
79 return null;
80 }
81
82 public function getExpenses($accountId, Date $dateFrom = null, Date $dateTo = null)
83 {
84 $result = new ResponseVkads();
85 $params = [
86 'id' => $accountId,
87 ];
88
89 if($dateFrom && $dateTo)
90 {
91 $params['period'] = 'day';
92 $params['date_from'] = $dateFrom->format('Y-m-d');
93 $params['date_to'] = $dateTo->format('Y-m-d');
94 }
95 else
96 {
97 $params['period'] = 'summary';
98 $params['date_from'] = '0';
99 $params['date_to'] = '0';
100 }
101 $response = $this->getRequest()->send([
102 'methodName' => 'analytics.expenses.get',
103 'parameters' => $params,
104 ]);
105 if($response->isSuccess())
106 {
107 $data = $response->getData();
108 $expenses = new Expenses();
109 $expenses->add([
110 'impressions' => $data['shows'],
111 'clicks' => $data['clicks'],
112 'actions' => $data['clicks'],
113 'spend' => $data['spent'],
114 'currency' => static::CURRENCY_CODE,
115 ]);
116 $result->setData(['expenses' => $expenses]);
117 }
118 else
119 {
120 $result->addErrors($response->getErrors());
121 }
122
123 return $result;
124 }
125
133 public function updateAnalyticParams($accountId, array $params, array $publicPageIds = [])
134 {
135 return new ResponseVkads();
136 }
137
138 public function hasDailyExpensesReport(): bool
139 {
140 return true;
141 }
142
143 public function getDailyExpensesReport(?string $accountId, ?Date $dateFrom, ?Date $dateTo): Result
144 {
145 $result = new Result();
146 $params = [
147 'id' => $accountId,
148 ];
149
150 if ($dateFrom && $dateTo)
151 {
152 $params['date_from'] = $dateFrom->format('Y-m-d');
153 $params['date_to'] = $dateTo->format('Y-m-d');
154 }
155 else
156 {
157 $params['date_from'] = (new DateTime())->add('-1 year')->format('Y-m-d');
158 $params['date_to'] = (new DateTime())->format('Y-m-d');
159 }
160
161 $response = $this->getRequest()->send([
162 'methodName' => 'analytics.banners.expenses.get',
163 'parameters' => $params,
164 'streamTimeout' => static::LOAD_DAILY_EXPENSES_TIMEOUT,
165 'listenHttpErrors' => true,
166 ]);
167
168 if (!$response->isSuccess())
169 {
170 $innerErrors = implode(',', $response->getErrorMessages());
171 $errorMessage = $this->buildErrorMessage("Error occurred while load daily expenses: {$innerErrors}");
172
173 return $result->addError(new Error($errorMessage));
174 }
175
176 $responseData = $response->getData();
177 if (!is_array($responseData) || !is_array($responseData['banners']))
178 {
179 $result->setData(['expenses' => new ExpensesCollection()]);
180
181 return $result;
182 }
183
184 $bannersList = $responseData['banners'];
185 $campaigns = $responseData['campaigns'];
186 $groups = $responseData['groups'];
187
188 $expensesCollection = new ExpensesCollection();
189 foreach ($bannersList as $banner)
190 {
191 if (!isset($banner['rows']))
192 {
193 continue;
194 }
195
197 foreach ($banner['rows'] as $row)
198 {
199 if (isset($row['base']))
200 {
201 $expensesCollection->addItem(
202 new Expenses([
203 'date' => new Date($row['date'], 'Y-m-d'),
204
205 'impressions' => $row['base']['shows'],
206 'clicks' => $row['base']['clicks'],
207 'actions' => $row['base']['clicks'],
208 'spend' => $row['base']['spent'],
209 'currency' => static::CURRENCY_CODE,
210
211 'campaignId' => $banner['campaign_id'],
212 'campaignName' => $campaigns[$banner['campaign_id']]['name'] ?? '',
213 'groupId' => $banner['ad_group_id'],
214 'groupName' => $groups[$banner['ad_group_id']]['name'] ?? '',
215 'adId' => $banner['banner_id'],
216 'adName' => $banner['banner_name'],
217
218 'utmMedium' => $banner['utm_medium'] ?? '',
219 'utmSource' => $banner['utm_source'] ?? '',
220 'utmCampaign' => $banner['utm_campaign'] ?? '',
221 'utmContent' => $banner['utm_content'] ?? '',
222 ])
223 );
224 }
225 }
226 }
227
228 $result->setData(['expenses' => $expensesCollection]);
229
230 return $result;
231 }
232}
Определения result.php:20
Определения error.php:15
Определения date.php:9
format($format)
Определения date.php:110
getDailyExpensesReport(?string $accountId, ?Date $dateFrom, ?Date $dateTo)
Определения account.php:66
buildErrorMessage(string $error)
Определения account.php:194
updateAnalyticParams($accountId, array $params, array $publicPageIds=[])
Определения accountvkads.php:133
getExpenses($accountId, Date $dateFrom=null, Date $dateTo=null)
Определения accountvkads.php:82
$data['IS_AVAILABLE']
Определения .description.php:13
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
while($arParentIBlockProperty=$dbParentIBlockProperty->Fetch()) $errorMessage
$groups
Определения options.php:30
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$response
Определения result.php:21