1: <?php
2:
3: namespace predictionio;
4: use GuzzleHttp\Client;
5: use \DateTime;
6:
7: 8: 9: 10:
11: class EventClient extends BaseClient {
12: const DATE_TIME_FORMAT = DateTime::ISO8601;
13: private $accessKey;
14: private $eventUrl;
15:
16: 17: 18: 19: 20: 21: 22: 23:
24: public function __construct($accessKey, $baseUrl='http://localhost:7070',
25: $timeout=0, $connectTimeout=5 ) {
26: parent::__construct($baseUrl, $timeout, $connectTimeout);
27: $this->accessKey = $accessKey;
28: $this->eventUrl = "/events.json?accessKey=$this->accessKey";
29: }
30:
31: private function getEventTime($eventTime) {
32: $result = $eventTime;
33: if (!isset($eventTime)) {
34: $result = (new DateTime('NOW'))->format(self::DATE_TIME_FORMAT);
35: }
36:
37: return $result;
38: }
39:
40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:
53: public function setUser($uid, array $properties=array(), $eventTime=null) {
54: $eventTime = $this->getEventTime($eventTime);
55:
56:
57: if (empty($properties)) $properties = (object)$properties;
58:
59: $json = json_encode([
60: 'event' => '$set',
61: 'entityType' => 'user',
62: 'entityId' => $uid,
63: 'properties' => $properties,
64: 'eventTime' => $eventTime,
65: ]);
66:
67: return $this->sendRequest('POST', $this->eventUrl, $json);
68: }
69:
70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82:
83: public function unsetUser($uid, array $properties, $eventTime=null) {
84: $eventTime = $this->getEventTime($eventTime);
85: if (empty($properties))
86: throw new PredictionIOAPIError('Specify at least one property');
87:
88: $json = json_encode([
89: 'event' => '$unset',
90: 'entityType' => 'user',
91: 'entityId' => $uid,
92: 'properties' => $properties,
93: 'eventTime' => $eventTime,
94: ]);
95:
96: return $this->sendRequest('POST', $this->eventUrl, $json);
97: }
98:
99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110:
111: public function deleteUser($uid, $eventTime=null) {
112: $eventTime = $this->getEventTime($eventTime);
113:
114: $json = json_encode([
115: 'event' => '$delete',
116: 'entityType' => 'user',
117: 'entityId' => $uid,
118: 'eventTime' => $eventTime,
119: ]);
120:
121: return $this->sendRequest('POST', $this->eventUrl, $json);
122: }
123:
124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136:
137: public function setItem($iid, array $properties=array(), $eventTime=null) {
138: $eventTime = $this->getEventTime($eventTime);
139: if (empty($properties)) $properties = (object)$properties;
140: $json = json_encode([
141: 'event' => '$set',
142: 'entityType' => 'item',
143: 'entityId' => $iid,
144: 'properties' => $properties,
145: 'eventTime' => $eventTime,
146: ]);
147:
148: return $this->sendRequest('POST', $this->eventUrl, $json);
149: }
150:
151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163:
164: public function unsetItem($iid, array $properties, $eventTime=null) {
165: $eventTime = $this->getEventTime($eventTime);
166: if (empty($properties))
167: throw new PredictionIOAPIError('Specify at least one property');
168: $json = json_encode([
169: 'event' => '$unset',
170: 'entityType' => 'item',
171: 'entityId' => $iid,
172: 'properties' => $properties,
173: 'eventTime' => $eventTime,
174: ]);
175:
176: return $this->sendRequest('POST', $this->eventUrl, $json);
177: }
178:
179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190:
191: public function deleteItem($iid, $eventTime=null) {
192: $eventTime = $this->getEventTime($eventTime);
193:
194: $json = json_encode([
195: 'event' => '$delete',
196: 'entityType' => 'item',
197: 'entityId' => $iid,
198: 'eventTime' => $eventTime,
199: ]);
200:
201: return $this->sendRequest('POST', $this->eventUrl, $json);
202: }
203:
204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218:
219: public function recordUserActionOnItem($event, $uid, $iid,
220: array $properties=array(),
221: $eventTime=null) {
222: $eventTime = $this->getEventTime($eventTime);
223: if (empty($properties)) $properties = (object)$properties;
224: $json = json_encode([
225: 'event' => $event,
226: 'entityType' => 'user',
227: 'entityId' => $uid,
228: 'targetEntityType' => 'item',
229: 'targetEntityId' => $iid,
230: 'properties' => $properties,
231: 'eventTime' => $eventTime,
232: ]);
233:
234: return $this->sendRequest('POST', $this->eventUrl, $json);
235: }
236:
237: 238: 239: 240: 241: 242: 243: 244: 245:
246: public function createEvent(array $data) {
247: $json = json_encode($data);
248:
249: return $this->sendRequest('POST', $this->eventUrl, $json);
250: }
251:
252: 253: 254: 255: 256: 257: 258: 259: 260:
261: public function getEvent($eventId) {
262: return $this->sendRequest('GET',
263: "/events/$eventId.json?accessKey=$this->accessKey", '');
264: }
265: }
266:
267: ?>
268: