Listing 1

<cfcomponent extends="basecomponent">

<cfscript>
 variables.instance.ItemID = "";
 variables.instance.RSSFeedID = "";
 variables.instance.Title = "";
 variables.instance.link = "";
 variables.instance.description = "";
</cfscript>

<cffunction name="Init" access="public" returntype="Boolean">
 <cfargument name="ItemID" type="string" required="true">
 <cfargument name="dsn" type="string" required="true">
  <cfset var qGetItem = "">

 <cfquery name="qGetItem" datasource="#arguments.dsn#">
  select *
  from items
  where items.ItemID = <cfqueryparam value="#arguments.itemID#" cfsqltype="cf_sql_varchar">
</cfquery>

 <cfif qGetItem.recordcount is 0>
  <cfreturn false>
 </cfif>

 <cfscript>
  variables.instance.ItemID = qGetItem.ItemID;
 variables.instance.RSSFeedID = qGetItem.RSSFeedID;
  variables.instance.Title = qGetItem.Title;
  variables.instance.link = qGetItem.link;
  variables.instance.description = qGetItem.description;
 </cfscript>

 <cfreturn true>

</cffunction>

<cffunction name="Commit" access="public" returntype="Boolean">
 <cfargument name="dsn" type="string" required="true">

 <cfset var qUpdateItem = "">
 
 <cfif variables.instance.ItemID is "">
  <cfset variables.instance.ItemID = createuuid()>
  <cfquery name="qUpdateItem" datasource="#arguments.dsn#">
   insert into items (ItemID, RSSFeedID, Title, Link, Description)
   values (
    '#variables.instance.ItemID#', 
    <cfqueryparam value="#variables.instance.RSSFeedID#" cfsqltype="cf_sql_varchar">,
    <cfqueryparam value="#variables.instance.Title#" cfsqltype="cf_sql_varchar">,
    <cfqueryparam value="#variables.instance.Link#" cfsqltype="cf_sql_varchar">,
    <cfqueryparam value="#variables.instance.Description#" cfsqltype="cf_sql_varchar"> )
  </cfquery>
 <cfelse>
  <cfquery name="qUpdateItem" datasource="#arguments.dsn#">
   update items 
   set RSSFeedID = <cfqueryparam value="#variables.instance.RSSFeedID#" cfsqltype="cf_sql_varchar">,
    Title = <cfqueryparam value="#variables.instance.Title#" cfsqltype="cf_sql_varchar">, 
    Link = <cfqueryparam value="#variables.instance.Link#" cfsqltype="cf_sql_varchar">,
    Description = <cfqueryparam value="#variables.instance.Description#" cfsqltype="cf_sql_varchar">
   
   where ItemID = <cfqueryparam value="#variables.instance.ItemID#" cfsqltype="cf_sql_varchar">

  </cfquery>
 </cfif>

 <cfreturn true>

</cffunction>

</cfcomponent>


Listing 2

<cfcomponent extends="basecomponent">

<cffunction name="GetAllFeeds" access="private" returntype="query">
  <cfargument name="dsn" type="string" required="true">
  
  <cfset var qGetFeeds = "">
  
  <cfquery name="qGetFeeds" datasource="#arguments.dsn#">
   select * from RSSFeeds
 </cfquery>

  <cfreturn qGetFeeds>
 </cffunction>

 <cffunction name="ItemExists" access="private" returntype="Boolean">
  <cfargument name="item" type="item" required="true">
  <cfargument name="dsn" type="string" required="true">
 
  <cfset var qCheckItem = "">

  <cfquery name="qCheckItem" datasource="#arguments.dsn#">
   select itemID
   from items
   where items.link = <cfqueryparam value="#arguments.item.get('link')#" cfsqltype="cf_sql_varchar">
  </cfquery>

  <cfif qCheckItem.recordcount gte 1>
   <cfreturn true>
  </cfif>
  <cfreturn false>

 </cffunction>

 <cffunction name="Init" access="public" returntype="void" hint="Gets all RSS feeds, parses them, and saves new
  items in the database">
  <cfargument name="dsn" type="string" required="true">
  
  <cfset var GetAllFeeds = GetAllFeeds(arguments.dsn)>
  <cfset var error = false>
  <cfset var TempItem = CreateObject('component','item')>
  <cfset var ItemArray = "">
  <cfset var TempItemindex = 0>
  <cfset var MyXMLVar = "">

  <cfloop query="GetAllFeeds">
   <cfset error = false>
   <cftry>
    <cfhttp url="#GetAllFeeds.link#" timeout="30"></cfhttp>
   
    <cfcatch type="any">
     <!--- most likely cause of error is server timeout ---->
     <cfset error = true>

    </cfcatch>
 
   </cftry>
  
   <cfif error is false>
    <cfset MyXMLVar = xmlparse(cfhttp.filecontent)>

    <cfif MyXMLVar.xmlroot.xmlname is "rss">
     <cfset ItemArray = MyXMLVar.xmlroot.channel.item>
    <cfelseif MyXMLVar.xmlroot.xmlname is "rdf:RDF">
     <cfset ItemArray = MyXMLVar.xmlroot.item>
</cfif>
 
    <cfloop from="1" to="#arraylen(ItemArray)#" index="TempItemindex">
  
     <cfset TempItem = CreateObject('component','item')>
     <cfset TempItem.set('RSSFeedID',GetAllFeeds.RSSFeedID)>
     <cfset TempItem.set('Title',ItemArray[TempItemindex].Title.xmlText)>
     <cfset TempItem.set('link',ItemArray[TempItemindex].link.xmlText)>
     <cfset TempItem.set('description',ItemArray[TempItemindex].description.xmlText)>
    <cfif not ItemExists(TempItem ,arguments.dsn)>
      <cfset TempItem.commit(arguments.dsn)>
     </cfif>

   </cfloop>
   <cfelse>
    <!---- should add some type of error handling here ---->
</cfif>

  </cfloop>

 </cffunction>

</cfcomponent>