1 | <?php |
||
2 | |||
3 | |||
4 | namespace ApiVideo\Client\Api; |
||
5 | |||
6 | use ApiVideo\Client\Model\Analytic\AnalyticData; |
||
7 | use ApiVideo\Client\Model\Analytic\AnalyticEvent; |
||
8 | use ApiVideo\Client\Model\Analytic\AnalyticVideo; |
||
9 | use DateTime; |
||
10 | use Exception; |
||
11 | |||
12 | class AnalyticsVideo extends BaseApi |
||
13 | { |
||
14 | /** |
||
15 | * @param $videoId |
||
16 | * @param string|null $period |
||
17 | * @return AnalyticVideo|null |
||
18 | */ |
||
19 | public function get($videoId, $period = null, array $metadata = null) |
||
20 | { |
||
21 | $parameters = array(); |
||
22 | if (null !== $period) { |
||
23 | $parameters['period'] = $period; |
||
24 | } |
||
25 | |||
26 | |||
27 | if(null !== $metadata){ |
||
28 | if(!is_array($metadata)){ |
||
0 ignored issues
–
show
introduced
by
Loading history...
|
|||
29 | throw new \InvalidArgumentException('Metadata argument must be an array'); |
||
30 | } |
||
31 | |||
32 | $parameters['metadata'] = $metadata; |
||
33 | } |
||
34 | |||
35 | $response = $this->browser->get("/analytics/videos/$videoId?".http_build_query($parameters)); |
||
36 | if (!$response->isSuccessful()) { |
||
37 | $this->registerLastError($response); |
||
38 | |||
39 | return null; |
||
40 | } |
||
41 | |||
42 | return $this->unmarshal($response); |
||
43 | } |
||
44 | |||
45 | /** |
||
46 | * @param array $parameters |
||
47 | * @return AnalyticVideo[]|null |
||
48 | */ |
||
49 | public function search(array $parameters = array()) |
||
50 | { |
||
51 | $params = $parameters; |
||
52 | $currentPage = isset($parameters['currentPage']) ? $parameters['currentPage'] : 1; |
||
53 | $params['pageSize'] = isset($parameters['pageSize']) ? $parameters['pageSize'] : 100; |
||
54 | $allAnalytics = array(); |
||
55 | |||
56 | do { |
||
57 | $params['currentPage'] = $currentPage; |
||
58 | |||
59 | var_dump("/analytics/videos?".http_build_query($parameters)); |
||
0 ignored issues
–
show
|
|||
60 | $response = $this->browser->get('/analytics/videos?'.http_build_query($parameters)); |
||
61 | |||
62 | if (!$response->isSuccessful()) { |
||
63 | $this->registerLastError($response); |
||
64 | |||
65 | return null; |
||
66 | } |
||
67 | |||
68 | $json = json_decode($response->getContent(), true); |
||
69 | $analytics = $json['data']; |
||
70 | $allAnalytics[] = $this->castAll($analytics); |
||
71 | |||
72 | if (isset($parameters['currentPage'])) { |
||
73 | break; |
||
74 | } |
||
75 | |||
76 | $pagination = $json['pagination']; |
||
77 | $pagination['currentPage']++; |
||
78 | } while ($pagination['pagesTotal'] > $pagination['currentPage']); |
||
79 | |||
80 | $allAnalytics = call_user_func_array('array_merge', $allAnalytics); |
||
81 | |||
82 | return $allAnalytics; |
||
83 | } |
||
84 | |||
85 | /** |
||
86 | * @param array $data |
||
87 | * @return AnalyticVideo |
||
88 | * @throws Exception |
||
89 | */ |
||
90 | protected function cast(array $data) |
||
91 | { |
||
92 | $analytic = new AnalyticVideo(); |
||
93 | $analytic->videoId = $data['video']['video_id']; |
||
94 | $analytic->videoTitle = $data['video']['title']; |
||
95 | $analytic->metadata = $data['video']['metadata']; |
||
96 | $analytic->period = $data['period']; |
||
97 | // Build Analytic Data |
||
98 | foreach ($data['data'] as $playerSession) { |
||
99 | $analyticData = new AnalyticData(); |
||
100 | |||
101 | // Build Analytic Session |
||
102 | $analyticData->session->sessionId = $playerSession['session']['session_id']; |
||
103 | $analyticData->session->loadedAt = new DateTime($playerSession['session']['loaded_at']); |
||
104 | $analyticData->session->endedAt = new DateTime($playerSession['session']['ended_at']); |
||
105 | if(isset($playerSession['session']['metadatas'])){ |
||
106 | $analyticData->session->metadata = $playerSession['session']['metadatas']; |
||
107 | } |
||
108 | |||
109 | // Build Analytic Location |
||
110 | $analyticData->location->country = $playerSession['location']['country']; |
||
111 | $analyticData->location->city = $playerSession['location']['city']; |
||
112 | |||
113 | // Build Analytic Referrer |
||
114 | $analyticData->referrer->url = $playerSession['referrer']['url']; |
||
115 | $analyticData->referrer->medium = $playerSession['referrer']['medium']; |
||
116 | $analyticData->referrer->source = $playerSession['referrer']['source']; |
||
117 | $analyticData->referrer->search_term = $playerSession['referrer']['search_term']; |
||
118 | |||
119 | // Build Analytic Device |
||
120 | $analyticData->device->type = $playerSession['device']['type']; |
||
121 | $analyticData->device->vendor = $playerSession['device']['vendor']; |
||
122 | $analyticData->device->model = $playerSession['device']['model']; |
||
123 | |||
124 | // Build Analytic Os |
||
125 | $analyticData->os->name = $playerSession['os']['name']; |
||
126 | $analyticData->os->shortname = $playerSession['os']['shortname']; |
||
127 | $analyticData->os->version = $playerSession['os']['version']; |
||
128 | |||
129 | // Build Analytic Client |
||
130 | $analyticData->client->type = $playerSession['client']['type']; |
||
131 | $analyticData->client->name = $playerSession['client']['name']; |
||
132 | $analyticData->client->version = $playerSession['client']['version']; |
||
133 | |||
134 | // Build Analytic Events |
||
135 | $analyticData->events = self::buildAnalyticEventsData($playerSession['events']); |
||
136 | |||
137 | $analytic->data[] = $analyticData; |
||
138 | } |
||
139 | |||
140 | return $analytic; |
||
141 | } |
||
142 | |||
143 | /** |
||
144 | * @param array $events |
||
145 | * @return array |
||
146 | * @throws Exception |
||
147 | */ |
||
148 | private static function buildAnalyticEventsData(array $events) |
||
149 | { |
||
150 | $eventsBuilded = array(); |
||
151 | |||
152 | foreach ($events as $event) { |
||
153 | $analyticEvent = new AnalyticEvent(); |
||
154 | $analyticEvent->type = $event['type']; |
||
155 | $analyticEvent->emittedAt = new DateTime($event['emitted_at']); |
||
156 | $analyticEvent->at = isset($event['at']) ? $event['at'] : null; |
||
157 | $analyticEvent->from = isset($event['from']) ? $event['from'] : null; |
||
158 | $analyticEvent->to = isset($event['to']) ? $event['to'] : null; |
||
159 | |||
160 | $eventsBuilded[] = $analyticEvent; |
||
161 | } |
||
162 | |||
163 | return $eventsBuilded; |
||
164 | } |
||
165 | |||
166 | } |
||
167 |