From 2cc54862c3c857fed8b29441e858562129d8d28f Mon Sep 17 00:00:00 2001 From: Franzz Date: Tue, 13 Aug 2019 15:57:49 +0200 Subject: [PATCH] Update feeds once an hour --- inc/feed.php | 246 +++++++++++++++++++++++++-------------------------- 1 file changed, 123 insertions(+), 123 deletions(-) diff --git a/inc/feed.php b/inc/feed.php index 58e8d09..0749044 100644 --- a/inc/feed.php +++ b/inc/feed.php @@ -1,123 +1,123 @@ -', '', ''); - */ -class Feed extends PhpObject { - - //Spot feed - const FEED_HOOK = 'https://api.findmespot.com/spot-main-web/consumer/rest-api/2.0/public/feed/'; - const FEED_TYPE_XML = '/message.xml'; - const FEED_TYPE_JSON = '/message.json'; - - //DB Tables - const SPOT_TABLE = 'spots'; - const FEED_TABLE = 'feeds'; - const MSG_TABLE = 'messages'; - - /** - * Database Handle - * @var Db - */ - private $oDb; - - private $iFeedId; - private $sRefFeedId; - private $iLastUpdate; - - public function __construct(Db &$oDb, $iFeedId) { - parent::__construct(__CLASS__, Settings::DEBUG); - $this->oDb = &$oDb; - $this->setFeedId($iFeedId); - } - - public function setFeedId($iFeedId) { - $this->iFeedId = $iFeedId; - $asFeed = $this->oDb->selectRow(self::FEED_TABLE, $this->iFeedId); - $this->sRefFeedId = $asFeed['ref_feed_id']; - $this->iLastUpdate = strtotime($asFeed['last_update']); - } - - public function getMessages($asActivePeriod = array()) { - $asInfo = array( - 'select' => array('id_message', 'ref_msg_id', 'type', 'latitude', 'longitude', 'site_time', 'unix_time'), - 'from' => self::MSG_TABLE, - 'constraint'=> array(Db::getId(self::FEED_TABLE) => $this->iFeedId), - 'constOpe' => array(Db::getId(self::FEED_TABLE) => "="), - 'orderBy' => array('site_time'=>'ASC') - ); - - if(!empty($asActivePeriod)) { - $asInfo['constraint']['site_time'] = $asActivePeriod; - $asInfo['constOpe']['site_time'] = "BETWEEN"; - } - - return $this->oDb->selectRows($asInfo); - } - - public function checkUpdateFeed($sProjectMode) { - //Feed updated once a day in Blog Mode - if($sProjectMode == Project::MODE_BLOG && date('Y-m-d', $this->iLastUpdate) != date('Y-m-d')) $this->updateFeed(); - } - - private function updateFeed() { - $asData = $this->retrieveFeed(); - $sLastUpdate = date(Db::TIMESTAMP_FORMAT); - if(!isset($asData['response']['errors']) || empty($asData['response']['errors'])) { - $asMsgs = $asData['response']['feedMessageResponse']['messages']['message']; - $asFeed = $asData['response']['feedMessageResponse']['feed']; - - if(!empty($asMsgs)) - { - //Update Spot Info from the first message - $asFirstMsg = array_values($asMsgs)[0]; - $asSpotInfo = array( - 'ref_spot_id' => $asFirstMsg['messengerId'], - 'name' => $asFirstMsg['messengerName'], - 'model' => $asFirstMsg['modelId'] - ); - $iSpotId = $this->oDb->insertUpdateRow(self::SPOT_TABLE, $asSpotInfo, array('ref_spot_id')); - - //Update Feed Info and last update date - $asFeedInfo = array( - 'ref_feed_id' => $asFeed['id'], - Db::getId(self::SPOT_TABLE) => $iSpotId, - 'name' => $asFeed['name'], - 'description' => $asFeed['description'], - 'status' => $asFeed['status'], - 'last_update' => $sLastUpdate - ); - $iFeedId = $this->oDb->insertUpdateRow(self::FEED_TABLE, $asFeedInfo, array('ref_feed_id')); - - //Update Messages - foreach($asMsgs as $asMsg) - { - $asMsg = array( - 'ref_msg_id' => $asMsg['id'], - Db::getId(self::FEED_TABLE) => $iFeedId, - 'type' => $asMsg['messageType'], - 'latitude' => $asMsg['latitude'], - 'longitude' => $asMsg['longitude'], - 'iso_time' => $asMsg['dateTime'], //ISO 8601 time (backup) - 'site_time' => date(Db::TIMESTAMP_FORMAT, $asMsg['unixTime']), //Conversion to Site Time (see Settings::TIMEZONE) - 'unix_time' => $asMsg['unixTime'], //UNIX Time (backup) - 'content' => $asMsg['messageContent'], - 'battery_state' => $asMsg['batteryState'] - ); - $this->oDb->insertUpdateRow(self::MSG_TABLE, $asMsg, array('ref_msg_id')); - } - } - } - else $this->oDb->updateRow(self::FEED_TABLE, $this->iFeedId, array('last_update'=>$sLastUpdate)); - } - - private function retrieveFeed() { - $sUrl = self::FEED_HOOK.$this->sRefFeedId.self::FEED_TYPE_JSON; - $sContent = file_get_contents($sUrl); - return json_decode($sContent, true); - } -} +', '', ''); + */ +class Feed extends PhpObject { + + //Spot feed + const FEED_HOOK = 'https://api.findmespot.com/spot-main-web/consumer/rest-api/2.0/public/feed/'; + const FEED_TYPE_XML = '/message.xml'; + const FEED_TYPE_JSON = '/message.json'; + + //DB Tables + const SPOT_TABLE = 'spots'; + const FEED_TABLE = 'feeds'; + const MSG_TABLE = 'messages'; + + /** + * Database Handle + * @var Db + */ + private $oDb; + + private $iFeedId; + private $sRefFeedId; + private $iLastUpdate; + + public function __construct(Db &$oDb, $iFeedId) { + parent::__construct(__CLASS__, Settings::DEBUG); + $this->oDb = &$oDb; + $this->setFeedId($iFeedId); + } + + public function setFeedId($iFeedId) { + $this->iFeedId = $iFeedId; + $asFeed = $this->oDb->selectRow(self::FEED_TABLE, $this->iFeedId); + $this->sRefFeedId = $asFeed['ref_feed_id']; + $this->iLastUpdate = strtotime($asFeed['last_update']); + } + + public function getMessages($asActivePeriod = array()) { + $asInfo = array( + 'select' => array('id_message', 'ref_msg_id', 'type', 'latitude', 'longitude', 'site_time', 'unix_time'), + 'from' => self::MSG_TABLE, + 'constraint'=> array(Db::getId(self::FEED_TABLE) => $this->iFeedId), + 'constOpe' => array(Db::getId(self::FEED_TABLE) => "="), + 'orderBy' => array('site_time'=>'ASC') + ); + + if(!empty($asActivePeriod)) { + $asInfo['constraint']['site_time'] = $asActivePeriod; + $asInfo['constOpe']['site_time'] = "BETWEEN"; + } + + return $this->oDb->selectRows($asInfo); + } + + public function checkUpdateFeed($sProjectMode) { + //Feed updated once an hour in Blog Mode + if($sProjectMode == Project::MODE_BLOG && date('Y-m-d-H', $this->iLastUpdate) != date('Y-m-d-H')) $this->updateFeed(); + } + + private function updateFeed() { + $asData = $this->retrieveFeed(); + $sLastUpdate = date(Db::TIMESTAMP_FORMAT); + if(!isset($asData['response']['errors']) || empty($asData['response']['errors'])) { + $asMsgs = $asData['response']['feedMessageResponse']['messages']['message']; + $asFeed = $asData['response']['feedMessageResponse']['feed']; + + if(!empty($asMsgs)) + { + //Update Spot Info from the first message + $asFirstMsg = array_values($asMsgs)[0]; + $asSpotInfo = array( + 'ref_spot_id' => $asFirstMsg['messengerId'], + 'name' => $asFirstMsg['messengerName'], + 'model' => $asFirstMsg['modelId'] + ); + $iSpotId = $this->oDb->insertUpdateRow(self::SPOT_TABLE, $asSpotInfo, array('ref_spot_id')); + + //Update Feed Info and last update date + $asFeedInfo = array( + 'ref_feed_id' => $asFeed['id'], + Db::getId(self::SPOT_TABLE) => $iSpotId, + 'name' => $asFeed['name'], + 'description' => $asFeed['description'], + 'status' => $asFeed['status'], + 'last_update' => $sLastUpdate + ); + $iFeedId = $this->oDb->insertUpdateRow(self::FEED_TABLE, $asFeedInfo, array('ref_feed_id')); + + //Update Messages + foreach($asMsgs as $asMsg) + { + $asMsg = array( + 'ref_msg_id' => $asMsg['id'], + Db::getId(self::FEED_TABLE) => $iFeedId, + 'type' => $asMsg['messageType'], + 'latitude' => $asMsg['latitude'], + 'longitude' => $asMsg['longitude'], + 'iso_time' => $asMsg['dateTime'], //ISO 8601 time (backup) + 'site_time' => date(Db::TIMESTAMP_FORMAT, $asMsg['unixTime']), //Conversion to Site Time (see Settings::TIMEZONE) + 'unix_time' => $asMsg['unixTime'], //UNIX Time (backup) + 'content' => $asMsg['messageContent'], + 'battery_state' => $asMsg['batteryState'] + ); + $this->oDb->insertUpdateRow(self::MSG_TABLE, $asMsg, array('ref_msg_id')); + } + } + } + else $this->oDb->updateRow(self::FEED_TABLE, $this->iFeedId, array('last_update'=>$sLastUpdate)); + } + + private function retrieveFeed() { + $sUrl = self::FEED_HOOK.$this->sRefFeedId.self::FEED_TYPE_JSON; + $sContent = file_get_contents($sUrl); + return json_decode($sContent, true); + } +}