Компонент CFFEED/пользовательский тег для ColdFusion MX 7?

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

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


person Jason Berry    schedule 11.08.2009    source источник


Ответы (2)


Если вы ищете что-то нестандартное, на 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>

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

person jyoseph    schedule 11.08.2009

Я знаю, что это немного поздно, но столкнулся с этой ситуацией на моей работе (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>

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

person adlyr    schedule 18.06.2013