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

StackOverflow https://stackoverflow.com/questions/1258040

  •  12-09-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

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

Просто чтобы добавить немного больше к замечательному ответу выше, вы можете добавить это для обратной ссылки на статью (в нашем случае на tumbler) В цикле через:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top