/** * Fetch the latest data for a feed from its specified URL. * Individual entries are returned in the 'entries' key of the return array. * * @param string $url * @param Exception|null $e Exception that occurs when reading feed * * @return array */ public function getFeedData($url, Exception &$e = null) { try { $feed = Zend_Feed_Reader::import($url); } catch (Exception $feedEx) { $e = $feedEx; return array(); } $data = array('id' => $feed->getId(), 'title' => $feed->getTitle(), 'link' => $feed->getLink(), 'date_modified' => $feed->getDateModified(), 'description' => $feed->getDescription(), 'language' => $feed->getLanguage(), 'image' => $feed->getImage(), 'generator' => $feed->getGenerator(), 'entries' => array()); foreach ($feed as $entry) { /** @var $entry Zend_Feed_Reader_EntryInterface */ $entryData = array('id' => $entry->getId(), 'title' => html_entity_decode($entry->getTitle(), ENT_COMPAT, 'utf-8'), 'description' => html_entity_decode($entry->getDescription(), ENT_COMPAT, 'utf-8'), 'date_modified' => null, 'authors' => $entry->getAuthors(), 'link' => $entry->getLink(), 'content_html' => $entry->getContent()); $enclosure = $entry->getEnclosure(); if ($enclosure) { $entryData['enclosure_url'] = $enclosure->url; $entryData['enclosure_length'] = $enclosure->length; $entryData['enclosure_type'] = $enclosure->type; } if (utf8_strlen($entryData['id']) > 250) { $entryData['id'] = md5($entryData['id']); } try { $entryData['date_modified'] = $entry->getDateModified(); } catch (Zend_Exception $e) { } // triggered with invalid date format if (!empty($entryData['date_modified']) && $entryData['date_modified'] instanceof Zend_Date) { $entryData['date_modified'] = $entryData['date_modified']->getTimeStamp(); } else { $entryData['date_modified'] = XenForo_Application::$time; } $entryData['date_modified'] = XenForo_Locale::dateTime($entryData['date_modified'], 'absolute'); $data['entries'][] = $entryData; } $data = XenForo_Input::cleanStringArray($data); return $data; }