Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

External RSS


Reply


6 Posts   1990 Views

Avatar
Mo

Community Member, 514 Posts

28 September 2009 at 1:29pm

Hi All,

Quick question, I want to add the most recent news story from a third party RSS feed to one of my templates. I am quite happpy to do this via SimpleXML, but I was wondering if SS has something builtin that might be more preferable to use?

Cheers,

Mo

Avatar
socks

Community Member, 191 Posts

28 September 2009 at 1:55pm

I just grabbed code from the Blog module (RSSWidget.php).

Attached Files
Avatar
banal

Community Member, 901 Posts

28 September 2009 at 6:30pm

Edited: 28/09/2009 6:31pm

Refactoring RSSWidget.php is probably a good solution. If you need more functionality, I'd probably use SimplePie (http://simplepie.org/) instead of parsing RAW XML using SimpleXML. It's a pretty neat php class for all your RSS/Atom Feed needs ;)

Avatar
Mo

Community Member, 514 Posts

30 September 2009 at 10:27am

Quick question. Has anyone tried to pull in the Silverstripe blog (http://www.silverstripe.org/blog/rss/)?

I have tried several different methods, they all result in a file not found error, or something similar?

Anyone know why?

Avatar
Willr

Forum Moderator, 5513 Posts

30 September 2009 at 3:38pm

How are you doing it?

We pull the ss.org blog feed fine from http://www.silverstripe.com/blog/.

Avatar
Mo

Community Member, 514 Posts

1 October 2009 at 3:51am

I got it working now, using recycled code from the blog module, as mentioned above:

function LatestSSNews() {
      $output = new DataObjectSet();
      
      include_once(Director::getAbsFile(SAPPHIRE_DIR . '/thirdparty/simplepie/SimplePie.php'));
      
      $t1 = microtime(true);
      $feed = new SimplePie('http://www.silverstripe.org/blog/rss', TEMP_FOLDER);
      $feed->init();
      if($items = $feed->get_items(0, 2)) {
         foreach($items as $item) {
            
            // Cast the Date
            $date = new Date('Date');
            $date->setValue($item->get_date());

            // Cast the Title
            $title = new Text('Title');
            $title->setValue($item->get_title());
            
            // Cast the description and strip
            $desc = new Text('Description');
            $desc->setValue(strip_tags($item->get_description()));

            $output->push(new ArrayData(array(
               'Title'         => $title,
               'Date'         => $date,
               'Link'         => $item->get_link(),
               'Description'   => $desc
            )));
         }
         return $output;
      }
   }

This works ok, I think the way I was trying to do it before was incorrect, I was trying to load it in using the RestfulService class, which didn't seem to work :s.

Mo