_feed = $feed; $this->_options = $options; } abstract protected function _getCachePath(); protected function _getCache($path) { return file_get_contents($path); } abstract protected function _fetchItems(); abstract protected function _spamFilter($items); abstract protected function _mapItems($content); abstract protected function _sortContent($content); protected function _getItems() { $cacheFile = sprintf($this->_getCachePath(), $this->_feed); $this->_cacheTime = file_exists($cacheFile) ? filemtime($cacheFile) : PHP_INT_MIN; if ($this->_cacheTime > strtotime('-' . $this->_cacheTimeout)) { return unserialize($this->_getCache($cacheFile)); } else { $content = $this->_fetchItems(); if (empty($content) && file_exists($cacheFile)) { return unserialize($this->_getCache($cacheFile)); } file_put_contents($cacheFile, serialize($content)); $this->_cacheTime = time(); return $content; } } protected function _filterItemContent($items) { if (in_array('noemoji', $this->_options)) { $dictionary = json_decode(file_get_contents('../config/emoji.json'), TRUE); $filtered = []; foreach ($items as $item) { foreach (['Title', 'Text'] as $field) { $item->{$field} = strtr($item->{$field}, $dictionary); } } } if (array_key_exists('title', $this->_options)) { $keyword = strtolower($this->_options['title']); $items = array_filter($items, function($item) use($keyword) { return str_contains(strtolower($item->Title), $keyword); }); } return $items; } public function get() { $items = $this->_getItems(); if (isset($this->_options['spamfilter'])) { $items = $this->_spamFilter($items); } return $this->_sortContent( $this->_filterItemContent( $this->_mapItems($items) ) ); } public function cacheTime() { return $this->_cacheTime; } abstract public function title(); } ?>