<?php class UsaElection extends VirtualDeviceManager { private $api_uri = 'https://ft-ig-content-prod.s3.eu-west-1.amazonaws.com/v2/Financial-Times/ig-rcp-polls-backend/2020-presidential/latest/presidential-races.json'; // Your redirect uri private $virtual_device_name = "Election"; private $subdevice_type = "election"; function make() { try { if (DeviceManager::registeret($this->virtual_device_name)) { $deviceId = DeviceManager::getDeviceByToken($this->virtual_device_name)['device_id']; $dataItems = ['Trump', 'Biden', 'Unknown']; foreach ($dataItems as $dataItem) { if (!$subDevice = SubDeviceManager::getSubDeviceByMaster($deviceId, strtolower($dataItem))) { SubDeviceManager::create($deviceId, strtolower($dataItem), '% ' . $dataItem); sleep(1); } } if (!$this->fetchEnabled($deviceId, $subDevice['subdevice_id'])) die(); $finalUrl = $this->api_uri; $json = json_decode(Utilities::CallAPI('GET', $finalUrl), true); $voteSpectrum = [ 'republican' => [ 'solid' => 0, 'leaning' => 0, ], 'democrat' => [ 'solid' => 0, 'leaning' => 0, ], 'tossup' => 0 ]; foreach ($json as $state) { if ($state['raceCategory'] != 'tossup') { $raceCategory = explode('-', $state['raceCategory']); $voteSpectrum[$raceCategory[0]][$raceCategory[1]] = $voteSpectrum[$raceCategory[0]][$raceCategory[1]] + $state['raceDelegates']; } else { $voteSpectrum['tossup'] = $voteSpectrum['tossup'] + $state['raceDelegates']; } } $Trump = $voteSpectrum['republican']['solid'] + $voteSpectrum['republican']['leaning']; $Biden = $voteSpectrum['democrat']['solid'] + $voteSpectrum['democrat']['leaning']; $Unknown = $voteSpectrum['tossup']; $OnePercent = ($Trump + $Biden + $Unknown) / 100; foreach ($dataItems as $Category) { RecordManager::create($deviceId, strtolower($Category), round(($$Category / $OnePercent))); } } else { DeviceManager::create($this->virtual_device_name, $this->virtual_device_name); DeviceManager::approved($this->virtual_device_name); } return 'sucessful'; } catch (Exception $e) { return 'exception: ' . $e->getMessage(); } } }