function DefaultParser::parse

Same name and namespace in other branches
  1. 8.9.x core/modules/aggregator/src/Plugin/aggregator/parser/DefaultParser.php \Drupal\aggregator\Plugin\aggregator\parser\DefaultParser::parse()

Overrides ParserInterface::parse

1 call to DefaultParser::parse()
TestParser::parse in core/modules/aggregator/tests/modules/aggregator_test/src/Plugin/aggregator/parser/TestParser.php
Implements \Drupal\aggregator\Plugin\ParserInterface::parse().
1 method overrides DefaultParser::parse()
TestParser::parse in core/modules/aggregator/tests/modules/aggregator_test/src/Plugin/aggregator/parser/TestParser.php
Implements \Drupal\aggregator\Plugin\ParserInterface::parse().

File

core/modules/aggregator/src/Plugin/aggregator/parser/DefaultParser.php, line 30

Class

DefaultParser
Defines a default parser implementation.

Namespace

Drupal\aggregator\Plugin\aggregator\parser

Code

public function parse(FeedInterface $feed) {
    // Set our bridge extension manager to Laminas Feed.
    Reader::setExtensionManager(\Drupal::service('feed.bridge.reader'));
    try {
        $channel = Reader::importString($feed->source_string);
    } catch (ExceptionInterface $e) {
        watchdog_exception('aggregator', $e);
        $this->messenger()
            ->addError($this->t('The feed from %site seems to be broken because of error "%error".', [
            '%site' => $feed->label(),
            '%error' => $e->getMessage(),
        ]));
        return FALSE;
    }
    $feed->setWebsiteUrl($channel->getLink());
    $feed->setDescription($channel->getDescription());
    if ($image = $channel->getImage()) {
        $feed->setImage($image['uri']);
    }
    // Initialize items array.
    $feed->items = [];
    foreach ($channel as $item) {
        // Reset the parsed item.
        $parsed_item = [];
        // Move the values to an array as expected by processors.
        $parsed_item['title'] = $item->getTitle();
        $parsed_item['guid'] = $item->getId();
        $parsed_item['link'] = $item->getLink();
        $parsed_item['description'] = $item->getDescription();
        $parsed_item['author'] = '';
        if ($author = $item->getAuthor()) {
            $parsed_item['author'] = $author['name'];
        }
        $parsed_item['timestamp'] = '';
        if ($date = $item->getDateModified()) {
            $parsed_item['timestamp'] = $date->getTimestamp();
        }
        // Store on $feed object. This is where processors will look for parsed items.
        $feed->items[] = $parsed_item;
    }
    return TRUE;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.