2009-08-11 13 views
3

Ich arbeite an der Site eines Kunden und eine Aktualisierung auf ColdFusion 8 ist keine Option. Was ich suche, ist etwas, das der CFFEED-Funktionalität von CF8 über ein benutzerdefiniertes Tag oder eine Komponente ähnlich ist, und ich bin nicht besonders scharf darauf, meinen eigenen Leser/Parser zu schreiben, wenn etwas bereits existiert.CFFEED-Komponente/benutzerdefiniertes Tag für ColdFusion MX 7?

Ich muss den RSS2-Feed von einem Blog lesen und den Titel, die Beschreibung und den Link anzeigen. Am liebsten würde ich einen Cache von ca. 5-10 Minuten einstellen, damit ich den Feed nicht hämmere (die Informationen, die ich aus dem Feed ziehe, werden auf einer viel besuchten Website angezeigt).

Antwort

7

Wenn Sie etwas aus der Box gibt es ein paar Projekte auf RIAForge, eine schnelle Suche brachte diese beiden suchen, aber ich vermute, Sie mehr finden konnte:

http://cfrss.riaforge.org/

http://rssville.riaforge.org/

Wenn Sie Ihre eigenen sind bis zum Walzen (was ich weiß, Sie sagten, Sie lieber nicht), könnte man nicht nur eine Anfrage, wie so für das Futter machen:

<cfhttp 
    url = "http://example.com" 
    resolveurl="no" 
    throwOnError = "yes" 
    timeout = "10" > 
</cfhttp> 

und analysieren die Ergebnisse:

<cfset feedData = CFHTTP.FileContent> 
<cfset xmlData = XMLParse(feedData)> 

Schleife durch:

<cfset result = queryNew("title,description")> 
<cfset items = xmlSearch(xmlData,"//*[local-name() = 'item']")> 

<cfloop index="x" from="1" to="#arrayLen(items)#"> 

    <cfif structKeyExists(items[x],"title")> 
     <cfset node.title = items[x].title.XmlText> 
    <cfelse> 
     <cfset node.title = ""> 
    </cfif> 

    <cfif structKeyExists(items[x],"description")> 
     <cfset node.description = items[x].description.XmlText> 
    <cfelse> 
     <cfset node.description = ""> 
    </cfif> 

    <cfset queryAddRow(result)> 
    <cfset querySetCell(result,"title",node.title)> 
    <cfset querySetCell(result,"description",node.description)> 

</cfloop> 

Ausgang:

<cfoutput query="result"> 
    <ul> 
     <li><strong>#title#</strong> - #description#</li> 
    </ul> 
</cfoutput> 

Offensichtlich nicht getestet, aber dennoch eine Idee. Benutzte etwas ähnliches, um meine neuesten leckeren Lesezeichen zu bekommen. Was das Caching betrifft, gibt es ein paar verschiedene Möglichkeiten, damit umzugehen. Ich würde wahrscheinlich eine geplante Aufgabe ausführen, um diese Datei zu treffen und die Ausgabe in eine separate Datei zu schreiben, die enthalten ist. Ich bin mir sicher, dass es bessere Wege gibt, aber das ist das schnelle n dreckig, imo.

0

Ich weiß, das ist ein bisschen spät, aber lief in dieser Situation ein auf meiner Arbeit (Coldfuison 7 und wird nicht aktualisiert werden). Aber auch benötigt, um zurück zu dem ursprünglichen Beitrag von seinem eingebetteten Standort auf unserer Website zu verlinken.

Nur ein wenig mehr auf die große Antwort oben hinzufügen, können Sie diese hinzufügen können (in unserem Fall auf Zuhaltung) zu dem Artikel Link zurück In the Loop durch:

<cfif structKeyExists(items[x],"guid")> 
    <cfset node.guid = items[x].guid.XmlText> 
<cfelse> 
    <cfset node.guid = ""> 
</cfif> 

<cfset querySetCell(result,"guid",node.guid)> 

Und in Ausgabe :

<a href="#guid#">#title#</a> 

Ich glaube, Sie könnten auch "Link" anstelle von "Guid" verwenden, aber das hat für mich funktioniert. Ich hoffe, dass dies jemand anderen helfen könnte, zurück zu verbinden. Ich bin ziemlich neu in ColdFusion, und es könnte eine bessere Möglichkeit sein, dies zu tun (auf älteren Versionen von CF).