PHP_SMART_HOME_V3/app/plugins/UsaElection.php

67 lines
2.3 KiB
PHP
Raw Permalink Normal View History

2020-10-15 16:55:16 +00:00
<?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";
2020-10-22 14:42:49 +00:00
function make()
2020-10-15 16:55:16 +00:00
{
2020-10-22 14:42:49 +00:00
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);
$subDevice = SubDeviceManager::getSubDeviceByMaster($deviceId, strtolower($this->subdevice_type));
2020-10-22 14:42:49 +00:00
}
2020-10-15 16:55:16 +00:00
}
2020-10-22 14:42:49 +00:00
if (!$this->fetchEnabled($deviceId, $subDevice['subdevice_id'])) die();
2020-10-15 16:55:16 +00:00
2020-10-22 14:42:49 +00:00
$finalUrl = $this->api_uri;
$json = json_decode(Utilities::CallAPI('GET', $finalUrl), true);
2020-10-15 16:55:16 +00:00
2020-10-22 14:42:49 +00:00
$voteSpectrum = [
'republican' => [
'solid' => 0,
'leaning' => 0,
],
'democrat' => [
'solid' => 0,
'leaning' => 0,
],
'tossup' => 0
];
2020-10-15 16:55:16 +00:00
2020-10-22 14:42:49 +00:00
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'];
}
2020-10-15 16:55:16 +00:00
}
2020-10-22 14:42:49 +00:00
$Trump = $voteSpectrum['republican']['solid'] + $voteSpectrum['republican']['leaning'];
$Biden = $voteSpectrum['democrat']['solid'] + $voteSpectrum['democrat']['leaning'];
$Unknown = $voteSpectrum['tossup'];
2020-10-15 16:55:16 +00:00
2020-10-22 14:42:49 +00:00
$OnePercent = ($Trump + $Biden + $Unknown) / 100;
2020-10-15 16:55:16 +00:00
2020-10-22 14:42:49 +00:00
foreach ($dataItems as $Category) {
2021-02-10 15:13:22 +00:00
RecordManager::create($deviceId, strtolower($Category), round(($$Category / $OnePercent)), 'plugin');
2020-10-22 14:42:49 +00:00
}
} else {
2020-10-22 19:28:08 +00:00
DeviceManager::create($this->virtual_device_name, $this->virtual_device_name, 'senzore-virtual');
2020-10-22 14:42:49 +00:00
DeviceManager::approved($this->virtual_device_name);
2020-10-15 16:55:16 +00:00
}
2020-10-22 14:42:49 +00:00
return 'sucessful';
} catch (Exception $e) {
return 'exception: ' . $e->getMessage();
2020-10-15 16:55:16 +00:00
}
}
}