2009-08-11 15 views
3

Je travaille sur le site d'un client et la mise à jour vers ColdFusion 8 n'est pas une option. Ce que je recherche est quelque chose de similaire à la fonctionnalité CFFEED de CF8 via une balise ou un composant personnalisé, et je ne suis pas particulièrement désireux d'écrire mon propre lecteur/analyseur si quelque chose existe déjà.Composant CFFEED/étiquette personnalisée pour ColdFusion MX 7?

Je dois lire le flux RSS2 à partir d'un blog et afficher le titre, la description et le lien. De préférence, je serais en mesure de définir un cache d'environ 5-10 minutes afin que je ne martelez pas le flux (les informations que je tire du flux seront affichées sur un site à fort trafic).

Répondre

7

Si vous cherchez quelque chose hors de la boîte il y a quelques projets sur RIAForge, une recherche rapide élevé ces deux, mais je devine que vous pouvez trouver plus:

http://cfrss.riaforge.org/

http://rssville.riaforge.org/

Si vous êtes pour rouler votre propre (que je sais que vous avez dit que vous ne préférez pas), ne pourriez-vous faire une demande pour l'alimentation comme ceci:

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

et analysent les résultats:

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

Parcoure:

<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> 

Sortie:

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

Il est évident que non testé, mais une idée quand même. Utilisé quelque chose de similaire à ceci pour obtenir mes derniers signets délicieux. En ce qui concerne la mise en cache, il existe plusieurs façons de gérer cela. J'exécuterais probablement une tâche planifiée pour frapper ce fichier et écrire la sortie dans un fichier séparé qui est inclus. Je suis sûr qu'il y a de meilleurs moyens, mais c'est le rapide n sale, imo.

0

Je sais que c'est un peu en retard, mais a couru dans cette situation un sur mon travail (Coldfuison 7 et ne sera pas mise à niveau). Mais également besoin de renvoyer à la publication originale à partir de son emplacement intégré sur notre site Web.

Juste pour ajouter un peu plus à la grande réponse ci-dessus, vous pouvez ajouter à un lien vers l'article (sur verre dans notre cas) Dans la boucle à travers:

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

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

Et dans la sortie :

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

Je crois que vous pouvez également utiliser "lien" à la place de "guid", mais cela a fonctionné pour moi. J'espère que cela pourrait aider quelqu'un d'autre ayant besoin de lier en arrière. Je suis assez nouveau à ColdFusion, et il pourrait y avoir une meilleure façon de le faire (sur les anciennes versions de CF).