Journal Articles to RSS Feed
RSS Feeds and Journal Content#
This entry will describe how to use an how to create an RSS feed using your Journal Articles. I am going to assume that you already know XSL.
Creating RSS Feeds using Journal Templates #
XSLT is a transform language to modify XML documents to another form of XML. Since Liferay's Journal is capable of returning search in an XML document, XSL is a great way to change the search results to an RSS feed.
The URL need to return search queries is below:
http://@portal_url@/c/journal/get_articles?
Immediately following the "?" is the criteria for the search in the format [parameter]=[variable]. In the example below we are asking for articles that have a display date less than 1/1/2003.
displayDateLT=20030101
Listed below are the most commonly used arguments. Multiple parameters can be used and should be separated by an escaped ampersand, "&". Note: To use the URL in your browser be sure to change each "&" to an non-escaped ampersand, "&".
- groupId
- This parameter searches a particular group. When set to @group_ID@ it will only search for content in the community where the article resides.
- templateId
- This parameter restricts the search to articles created with a certain template. Note: Be sure to set this to the templates ID and not the templates name.
- orderBy
- This parameter sorts the results by the method passed.
- type
- Much like templateID, this parameter will restrict the results to articles that are created with the specified type.
- displayDateGT
- This parameter will restrict articles that are greater then the specified time. Note: Takes the form, YYYYMMDD.
- displayDateLT
- This parameter will restrict articles that are less than the specified time. Note: Takes the form YYYYMMDD.
- delta
- This parameter will restrict the result set to a specified amount.
Example#
The following is an incomplete example illustrating how to create an RSS Feed using XSL.
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" omit-xml-declaration="no" media-type="application/rss+xml" indent="yes" />
<xsl:template match="/">
<xsl:variable name="articles" select="document('http://@portal_url@/c/journal/get_articles?groupId=@group_id@&templateId=BASIC-RSS-ITEM&delta=20&orderBy=display-date')/result-set/result"/>
<rss version="2.0">
<channel>
<title>
<xsl:value-of disable-output-escaping="no" select="root/dynamic-element[@name='rss-title']/dynamic-content"/>
</title>
<link>
<xsl:value-of disable-output-escaping="no" select="root/dynamic-element[@name='rss-link']/dynamic-content"/>
</link>
<description>
<xsl:value-of disable-output-escaping="no" select="root/dynamic-element[@name='rss-description']/dynamic-content"/>
</description>
<xsl:for-each select="$articles">
<item>
<title>
<xsl:value-of disable-output-escaping="no" select="root/dynamic-element[@name='headline']/dynamic-content"/>
</title>
<link>
<xsl:value-of disable-output-escaping="no" select="root/dynamic-element[@name='link']/dynamic-content"/>
</link>
<description>
<xsl:value-of disable-output-escaping="no" select="root/dynamic-element[@name='description']/dynamic-content"/>
</description>
<author>
<xsl:value-of disable-output-escaping="no" select="root/dynamic-element[@name='creator']/dynamic-content"/>
<xsl:text> <pr@liferay.com></xsl:text>
</author>
<guid isPermaLink="false">
<xsl:text>http://@portal_url@/c/journal/view_article_content?groupId=14&articleId=</xsl:text>
<xsl:value-of disable-output-escaping="no" select="root/dynamic-element[@name='reserved-article-id']/dynamic-content"/>
</guid>
</item>
</xsl:for-each>
</channel>
</rss>
</xsl:template>
</xsl:stylesheet>Journal Internal API shows in great detail on how the result set is formed.