CFFEED компонент / пользовательский тег для ColdFusion MX 7? - PullRequest
3 голосов
/ 11 августа 2009

Я работаю на сайте клиента, и обновление до ColdFusion 8 не вариант. То, что я ищу, - это что-то похожее на функциональность CFFEED CF8 через пользовательский тег или компонент, и я не особенно заинтересован в написании собственного читателя / парсера, если что-то уже существует.

Мне нужно прочитать в ленте RSS2 из блога и отобразить заголовок, описание и ссылку. Желательно, чтобы я мог установить кэш на 5-10 минут, чтобы не забивать ленту новостей (информация, которую я извлекаю из ленты, будет показана на сайте с высоким трафиком).

Ответы [ 2 ]

7 голосов
/ 11 августа 2009

Если вы ищете что-то из коробки, есть несколько проектов на RIAForge, быстрый поиск поднял эти два, но я думаю, вы могли бы найти больше:

http://cfrss.riaforge.org/

http://rssville.riaforge.org/

Если вы готовитесь сами (что, как я знаю, вы сказали, что не предпочитаете), не могли бы вы просто сделать запрос на подачу следующим образом:

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

и анализ результатов:

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

Перебрать:

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

Выход:

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

Очевидно, не проверено, но идея, тем не менее. Использовал что-то похожее на это, чтобы получить мои последние вкусные закладки. Что касается кэширования, есть несколько разных способов справиться с этим. Я бы, вероятно, запустил запланированное задание, чтобы поразить этот файл и записать вывод в отдельный включенный файл. Я уверен, что есть лучшие способы, но это быстрый и грязный, IMO.

0 голосов
/ 19 июня 2013

Я знаю, что это немного поздно, но столкнулся с такой ситуацией на моей работе (Coldfuison 7 и не будет обновляться). Но также необходимо сослаться на исходный пост из встроенного местоположения на нашем сайте.

Просто чтобы добавить еще немного к хорошему ответу, приведенному выше, вы можете добавить его, чтобы вернуться к статье (в нашем случае, на тумблере) В цикле:

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

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

А на выходе:

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

Полагаю, вы могли бы также использовать «ссылку» вместо «guid», но это сработало для меня. Я надеюсь, что это может помочь кому-то еще, нуждающемуся в обратной ссылке. Я довольно новичок в ColdFusion, и может быть лучший способ сделать это (на старых версиях CF).

...