cffeed
Description
Reads or creates an RSS or Atom syndication feed. This tag can read RSS versions 0.90, 0.91, 0.92, 0.93, 0.94, 1.0, and 2.0, and Atom 0.3 or 1.0. It can create RSS 2.0 or Atom 1.0 feeds.
Categories
History
ColdFusion
8: Added this tag.
Syntax
create
required
<cffeed
action = "create"
name = "#structure#"
One or both of the following: outputFile = "path"
xmlVar = "variable name"
optional
overwrite = "no|yes">
escapeChars = "true|false">
OR
required
<cffeed
action = "create"
properties = "#metadata structure#"
query = "#items/entries query name#"
One or both of the following: outputFile = "path"
xmlVar = "variable name"
optional
columnMap = "mapping structure"
overwrite = "no|yes">
read
required
<cffeed
source = "feed source"
One or more of the following: name = "structure"
properties = "metadata structure"
query = "items/entries query"
outputFile = "path"
xmlVar = "variable name"
optional
action = "read"
enclosureDir = "path"
ignoreEnclosureError = "no|yes"
overwrite = "no|yes"
overwriteEnclosure = "no|yes"
proxyServer = "IP address or server name for proxy host"
proxyPassword = "password for the proxy host"
proxyPort = "port of the proxy host"
proxyUser = "user name for the proxy host"
timeout = "request time-out in seconds"
userAgent = "HTTP user agent identifier">
Note: You can specify this tag’s attributes in an attributeCollection attribute
whose value is a structure. Specify the structure name in the attributeCollection attribute
and use the tag’s attribute names as structure keys.
Attributes
| Attribute | Description | Required | Default |
|---|---|---|---|
| action | The action to take, one of the following values: create: creates an RSS 2.0 or Atom 1.0 feed XML document and saves it in a variable, writes it to a file, or both. read: parses an RSS or Atom feed from a URL or an XML file and saves it in a structure or query. You can also get feed metadata in a separate structure. | Optional | read |
| columnMap | Used only for the create action with a query attribute. A structure that specifies a mapping between the names of the columns in the object specified by the query attribute and the columns of the ColdFusion feed format (see the section Query object rules. The key for each field must be a column name (see the table in the Query object rules section). The value of the field must be the name of the corresponding column in the query object used as input to the create action. | Optional | |
| enclosureDir | Used only for the read action. Path to the directory in which to save any enclosures that are available in the feed being read. The path can be absolute or relative to the CFML file. If the directory does not exist, ColdFusion generates an error. If you omit this attribute, ColdFusion does not save enclosures. To specify the directory that contains the current page, set this attribute to “ .” (period). | Optional | |
| escapeChar | Used only for the create action. If this attribute is true, escapes/replaces all the invalid characters as per W3C specification. Note: Japanese characters that are not part of UTF-8 encoding are replaced. Non-UTF-8 Japanese characters remain in the feed as they are. If this attribute is false, does not escape invalid characters and tries to generate feed. If JDOM fails to write the file with these invalid characters, the error message “Invalid Character in Input” is displayed. | Optional | false |
| ignoreEnclosureError | If this attribute is yes, ColdFusion attempts to save all enclosures. If it encounters an error downloading one enclosure, it continues downloading other enclosures and writes the error information in the server log. If this attribute is no, when ColdFusion encounters an error downloading an enclosure, it stops downloading all enclosures and generates an error. Note: Enclosure errors can occur if the specified enclosure is of a type that the web server does not allow to be downloaded. | Optional | no |
| name | A structure that contains complete feed data: The output of a read action. The input definition of the feed to create. When you specify the name attribute for a create action, enclose it in number signs (#). For more information, see Name and properties structure rules section. | See Note | |
| outputFile | Path of the file in which to write the feed as XML text. The path can be absolute, or relative to the CFML file. | See Note | |
| overwrite | Whether to overwrite the XML feed file if it exists. If you do not set this attribute to yes and the cffeed tag tries to write to a file that exists, ColdFusion generates an error. | Optional | no |
| overwriteEnclosure | Used only for the read action. Whether to overwrite files in the enclosure directory if they exist. If you do not set this attribute to yes and the cffeed tag tries to write to a file that exists, ColdFusion generates an error. | Optional | no |
| properties | A structure that contains the feed metadata, the information about the entire feed. Can contain either of the following: The output of a read action. Input to a create action. The properties and query attributes combined provide complete feed information. When you specify the properties attribute for a create action, enclose it in number signs (#). For more information, see Name and properties structure rules section. | See Note | |
| proxyPassword | Password required by the proxy server. | Optional | |
| proxyPort | The port to connect to on the proxy server. | Optional | 80 |
| proxyServer | Host name or IP address of a proxy server to which to send the request. | Optional | |
| proxyUser | User name to provide to the proxy server. | Optional | |
| query | A query object that contains the Atom entries or RSS items in the feed. Can contain either of the following: The output of a read action. Input to a create action. The properties and query attributes combined provide complete feed information. When you specify the query attribute for a create action, enclose it in number signs (#). For more information, see section Query object rules. | See Note | |
| source | Used only for the read action. The URL of the feed or the path to the XML file that contains the feed contents. A path can be absolute, or relative to the CFML file. | Required | |
| timeout | The number of seconds to wait for a response from the feed source. A value of 0 specifies that the request does not time out. By default, ColdFusion uses the request time-out setting of the ColdFusion Administrator Server Settings > Settings page. | Optional | Request time-out |
| userAgent | Text to put in the HTTP User-Agent request header field. Used to identify the request client software. | Optional | Cold Fusion |
| xmlVar | A variable in which to save the read or created feed as XML text. | See Note |
Usage
Use the following syntax to specify an in-memory file, which is not written to disk. In-memory files speed processing of transient data.
ram:///filepath The filepath can include directories, for example ram:///petStore/images/poodle.jpg. Create the directories in the path before you specify the file. For more information on using in-memory files, see Optimizing transient files in the Developing ColdFusion Applications.
When you create a feed
You specify the feed data in either of the following ways:
By putting all metadata and entry or item data in a single structure specified by the name attribute.
By putting the metadata in a structure specified by the properties structure and the entries or items as rows in a query object specified by the query attribute.
You save the resulting feed XML in one or both of the following places:
A file specified by the OutputFile attribute. The cffeed tag saves the data in UTF-8 encoding.
An variable specified by the xmlVar attribute
When you read a feed
You can save the feed data in any combination of the following forms:
By saving all entry or item data and metadata in a single structure specified by the name attribute
By saving entries or items as rows in a query object specified by the query attribute
By saving the metadata in a structure specified by the properties structure
By writing the feed XML in a file specified by the OutputFile attribute. The cffeed tag saves the data in UTF-8 encoding.
By saving the feed XML in a ColdFusion XML variable specified by the xmlVar attribute
When you save feed data, you do not have to save both the metadata and the entry or item data. You can specify only the properties attribute, or only the query attribute.
ram:///filepath The filepath can include directories, for example ram:///petStore/images/poodle.jpg. Create the directories in the path before you specify the file. For more information on using in-memory files, see Optimizing transient files in the Developing ColdFusion Applications.
When you create a feed
You specify the feed data in either of the following ways:
By putting all metadata and entry or item data in a single structure specified by the name attribute.
By putting the metadata in a structure specified by the properties structure and the entries or items as rows in a query object specified by the query attribute.
You save the resulting feed XML in one or both of the following places:
A file specified by the OutputFile attribute. The cffeed tag saves the data in UTF-8 encoding.
An variable specified by the xmlVar attribute
When you read a feed
You can save the feed data in any combination of the following forms:
By saving all entry or item data and metadata in a single structure specified by the name attribute
By saving entries or items as rows in a query object specified by the query attribute
By saving the metadata in a structure specified by the properties structure
By writing the feed XML in a file specified by the OutputFile attribute. The cffeed tag saves the data in UTF-8 encoding.
By saving the feed XML in a ColdFusion XML variable specified by the xmlVar attribute
When you save feed data, you do not have to save both the metadata and the entry or item data. You can specify only the properties attribute, or only the query attribute.
Example
The
following example creates an RSS feed. Enter fields for the feed
title, link, and description elements. Also enter title, link, and
description fields for one item. A second item is optional. The
application saves the feed in a createRSSOutput.xml file in the
feedTest subdirectory of the directory that contains the CFML page.
<!--- Generate the feed when the user submits a filled in form. --->
<cfif isDefined("Form.Submit")>
<cfscript>
// Create the feed data structure and add the metadata.
myStruct = StructNew();
mystruct.link = form.link;
myStruct.title = form.title;
mystruct.description = form.description;
mystruct.pubDate = Now();
mystruct.version = "rss_2.0";
/* Add the feed items. A more sophisticated application would use dynamic variables
and support varying numbers of items. */
myStruct.item = ArrayNew(1);
myStruct.item[1] = StructNew();
myStruct.item[1].description = StructNew();
myStruct.item[1].description.value = form.item1text;
myStruct.item[1].link = form.item1link;
myStruct.item[1].pubDate = Now();
myStruct.item[1].title = form.item1title;
myStruct.item[2] = StructNew();
myStruct.item[2].description = StructNew();
myStruct.item[2].description.value = form.item2text;
myStruct.item[2].link = form.item2link;
myStruct.item[2].pubDate = Now();
myStruct.item[2].title = form.item2title;
</cfscript>
<!--- Generate the feed and save it to a file and variable. --->
<cffeed action = "create"
name = "#myStruct#"
outputFile = "feedTest/createRSSOutput.xml"
overwrite = "yes"
xmlVar = "myXML">
</cfif>
<!--- The user input form. --->
<cfform format="xml" preservedata="yes" style="width:500" height="700">
<cfformitem type = "text"> Enter The Feed Metadata</cfformitem>
<cfinput type = "text" label = "title" name = "title"
style = "width:435" required = "yes"> <br />
<cfinput type = "text" label = "link" name = "link"
style = "width:435" required = "yes" validate = "url"> <br />
<cftextarea name = "description"
style = "width:435; height:70" required = "yes" />
<cfformitem type = "text"> Enter Item 1</cfformitem>
<cfinput type="text" label="title" name="item1title"
style="width:435" required="yes"> <br />
<cfinput type="text" label="link" name="item1link"
style="width:435" required="yes" validate="url"> <br />
<cftextarea name = "item1text"
style = "width:435; height:70" required = "yes" /> <br />
<cfformitem type = "text"> Enter Item 2</cfformitem>
<cfinput type = "text" label = "title" name = "item2title" style = "width:435"> <br />
<cfinput type = "text" label = "link" name = "item2link" style = "width:435"
validate = "url"> <br />
<cftextarea name = "item2text" style = "width:435; height:70" /> <br />
<cfinput type = "Submit" name = "submit" value = "Submit" >
</cfform>
The following application is a simple
feed reader that handles RSS and Atom feeds. It displays the feed
title; for each item or entry, it shows the title as a link, and
shows the published date and the item or entry contents. To use
this example to read the feed created by the first application,
enter the URL for the file the application created, for example, http://localhost:8500/cffeed/feedTest/createRSSOutput.xml.
<!--- Process the feed data if the user submitted the form --->
<cfif isDefined("Form.Submit")>
<cffeed source = "#theURL#"
properties = "myProps"
query = "myQuery">
<!--- Display the feed output.
Use conditional logic for to handle different feed formats. --->
<cfoutput>
<h2>#myProps.title#</h2>
</cfoutput>
<cfoutput query = "myQuery">
<cfif myProps.version IS "atom_1.0">
<h3><a href = "#linkhref#">#title#</a></h3>
<b>Published:</b> #DateFormat(publisheddate)#</p>
<cfelse>
<h3><a href = "#rsslink#">#title#</a></h3>
<b>Published:</b> #publisheddate#</p>
</cfif>
#content#</p>
</cfoutput>
</cfif>
<!--- The form for specifying the feed URL or file --->
<cfform name = "SetFeed" preserveData = "yes">
Enter Feed URL:
<cfinput type = "text" size = "60" name = "theURL"><br><br>
<cfinput type = "Submit" name = "submit" value = "Submit">
</cfform>