. * */ namespace OCA\News\Utility; use \OCA\AppFramework\Utility\TimeFactory; use \OCA\News\Db\Item; class ImportParser { private $timeFactory; private $purifier; public function __construct(TimeFactory $timeFactory, $purifier) { $this->timeFactory = $timeFactory; $this->purifier = $purifier; } public function parse($json){ $items = array(); if(array_key_exists('items', $json)) { $jsonItems = $json['items']; // reverse because highest entry is the newest one and we cant rely // on a set pubdate for($i=count($jsonItems)-1; $i>=0; $i--) { $entry = $jsonItems[$i]; // we require title, guid and url if(!array_key_exists('title', $entry) || !array_key_exists('id', $entry) || !array_key_exists('alternate', $entry) || !count($entry['alternate']) > 0 || !array_key_exists('href', $entry['alternate'][0])) { continue; } $item = new Item(); $id = $entry['id']; $item->setGuid($id); $item->setGuidHash(md5($id)); $item->setTitle($entry['title']); $item->setUrl($entry['alternate'][0]['href']); $item->setStatus(0); $item->setStarred(); $item->setUnread(); if(array_key_exists('published', $entry)) { $item->setPubDate($entry['published']); } else { $item->setPubDate($this->timeFactory->getTime()); } if(array_key_exists('summary', $entry)) { $item->setBody($this->purifier->purify( $entry['summary']['content'])); } elseif(array_key_exists('content', $entry)) { $item->setBody($this->purifier->purify( $entry['content']['content'])); } array_push($items, $item); } } return $items; } }