/** * {@inheritdoc} */ public function parse(FeedInterface $feed, FetcherResultInterface $fetcher_result, StateInterface $state) { $result = new ParserResult(); Reader::setExtensionManager(\Drupal::service('feed.bridge.reader')); Reader::registerExtension('GeoRSS'); $raw = $fetcher_result->getRaw(); if (!strlen(trim($raw))) { throw new EmptyFeedException(); } try { $channel = Reader::importString($raw); } catch (ExceptionInterface $e) { $args = ['%site' => $feed->label(), '%error' => trim($e->getMessage())]; throw new \RuntimeException($this->t('The feed from %site seems to be broken because of error "%error".', $args)); } foreach ($channel as $delta => $entry) { $item = new SyndicationItem(); // Move the values to an array as expected by processors. $item->set('title', $entry->getTitle())->set('guid', $entry->getId())->set('url', $entry->getLink())->set('guid', $entry->getId())->set('url', $entry->getLink())->set('description', $entry->getDescription())->set('tags', $entry->getCategories()->getValues())->set('feed_title', $channel->getTitle())->set('feed_description', $channel->getDescription())->set('feed_url', $channel->getLink()); if ($image = $channel->getImage()) { $item->set('feed_image_uri', $image['uri']); } if ($enclosure = $entry->getEnclosure()) { $item->set('enclosures', [rawurldecode($enclosure->url)]); } if ($author = $entry->getAuthor()) { $author += ['name' => '', 'email' => '']; $item->set('author_name', $author['name'])->set('author_email', $author['email']); } if ($date = $entry->getDateModified()) { $item->set('timestamp', $date->getTimestamp()); } if ($point = $entry->getGeoPoint()) { $item->set('georss_lat', $point['lat'])->set('georss_lon', $point['lon']); } $result->addItem($item); } return $result; }
/** * Set content for worker * * @param string $content * @return Worker */ public function setContent($content) { if ($content == null) { $this->errors = 'Connection timeout'; } else { $content = trim($content); if (empty($content)) { $this->errors = 'Source content is empty.'; } else { try { Reader::registerExtension('Syndication'); $this->feed = Reader::importString($content); $this->errors = ''; } catch (InvalidArgumentException $ex) { $this->errors = $ex->getMessage(); $this->feed = null; } catch (RuntimeException $ex) { $this->errors = $ex->getMessage(); $this->feed = null; } } } return $this; }
public function testRegistersUserExtension() { try { Reader\Reader::addPrefixPath('My\\Extension', __DIR__ . '/Reader/_files/My/Extension'); Reader\Reader::registerExtension('JungleBooks'); } catch (\Exception $e) { $this->fail($e->getMessage()); } $this->assertTrue(Reader\Reader::isRegistered('JungleBooks')); }
public function testRegistersUserExtension() { require_once __DIR__ . '/_files/My/Extension/JungleBooks/Entry.php'; require_once __DIR__ . '/_files/My/Extension/JungleBooks/Feed.php'; $manager = Reader\Reader::getExtensionManager(); $manager->setInvokableClass('JungleBooks\\Entry', 'My\\Extension\\JungleBooks\\Entry'); $manager->setInvokableClass('JungleBooks\\Feed', 'My\\Extension\\JungleBooks\\Feed'); Reader\Reader::registerExtension('JungleBooks'); $this->assertTrue(Reader\Reader::isRegistered('JungleBooks')); }
public function testRegistersUserExtension() { Reader\Reader::addPrefixPath('My\\Extension', dirname(__FILE__) . '/_files/My/Extension'); Reader\Reader::registerExtension('JungleBooks'); $this->assertTrue(Reader\Reader::isRegistered('JungleBooks')); }