News feeds

Indlæs andet indhold på denne side:

Når vi snakker om news feeds, er det en sag med to sider:

  1. Det feed, som indeholder nyhedsreferaterne - skrives i xml
  2. En funktion, som kan læse feedet. Her er der tre forskellige muligheder:
    • Et script, som oversætter xml-filen til html, der kan vises i enhver browser.
    • Et plugin til browseren, så feedet kan læses umiddelbart i browseren.
    • Et specielt program - en news aggregator, som kan vise et news feed på samme måde, som en browser viser html-sider.

Feed Reader - asp

Siden er opdateret 15. 6. 2006

Dette script er afprøvet på flere forskellige rss'er og virker upåklageligt, hvis rss-filen er fejlfri (hvilket jeg af gode grunde ikke kan garantere for).

Du starter med at lave en tom side (ikke noget indhold i body) og gemmer den som eks. hss.php.

Over sidens header-sektion indsætter du denne kode:

<!--#include file="feedreader.inc"-->

Derefter indsætter du denne kode i sidens body:

<% visRSS("http://hjemmesideskolen.net/feed/hss-feed.xml") %>

Url'en i parentesen viser det feed, som skal vises på siden. Indsæt selv det rss, som du vil læse. Lav et antal kopier af siden med hver sit rss indlæst efter dit eget behov.

Nu mangler du bare at lave det asp-script, som læser xml-filen og oversætter den til html. Gem dette script som feedreader.inc:

<%

session.LCID = 1030

function printImage(imgItem)
  Dim item, strReturnImage
  strReturnImage = ""
  If imgItem.hasChildNodes Then
  Dim strLink, strURL, strDescription, strTitle, strWidth, strHeight
  For each Item in imgItem.childNodes
    Select Case lcase(Item.tagName)
    case "link"
      strLink = Item.text
    case "url"
      strURL = Item.Text
    case "title"
      strTitle = Item.Text
    case "description"
      strDescription = Item.Text
    case "width"
      strWidth = Item.Text
    case "height"
      strHeight = Item.Text
    }
  Next

  If strURL <> "" Then
    strReturnImage = "<img src=""" & Server.HTMLencode(strURL) & """"
    IF strWidth <> "" and strHeight <> "" Then
    strReturnImage = strReturnImage & " width=""" & strWidth & """ height=""" & strHeight & """"
    End If
    IF strDescription <> "" Then
    strReturnImage = strReturnImage & " alt=""" & strDescription & """ title=""" & strDescription & """"
    Else
    strReturnImage = strReturnImage & " alt="""""
    End IF
    IF strLink <> "" Then
    strReturnImage = "<a href=""" & Server.HTMlencode(strLink) & """>" & strReturnImage & " /></a>"
    Else
    strReturnImage = strReturnImage & ">"
    End IF
  End IF

  End IF
  printImage = strReturnImage
end function

function formatXMLdate(xmlDate)

end function

sub visRSS(extURL)

//' Erklær variable
Dim xmlDoc, channelNodes, entry, strChannelTitle, strChannelDescription, strChannelLink, strChannelImage
Dim itemNodes, item, ItemPubdate, PubDate, arrTmp(), arrTime()
Dim strItemTitle, strItemLink, strItemDescription, strItemPubdate, strItemImage
Dim arrItemTitle, arrItemLink, arrItemDescription, arrItemPubdate, arrItemImage, arrPubDate

//' Sæt defaultværdier
strItemTitle = ""
strItemLink = ""
strItemDescription = ""
strItemPubdate = ""
strItemImage = ""

strChannelImage = ""
//' RSS-feedet loades
set xmlDoc = createObject("Msxml.DOMDocument")
xmlDoc.async = false
xmlDoc.setProperty "ServerHTTPRequest", true
xmlDoc.load(extURL)

//' Check at RSS-feedet er loadet korrekt
If (xmlDoc.parseError.errorCode <> 0) then
  ' Udskriv eventuelle fejl (for nem fejlretning)
   echo $"XML error: " & xmlDoc.parseError.reason
//' Fortsæt hvis alt er ok
Else

  ' Åbn elementet <channel>
  set channelNodes = xmlDoc.selectNodes("//channel/*")

  for each entry in channelNodes
  ' De tre obligatoriske elementer i channel lægges i variable
  if entry.tagName = "title" then
    strChannelTitle = entry.text
  elseif entry.tagName = "description" then
    strChannelDescription = entry.text
  elseif entry.tagName = "link" then
    strChannelLink = entry.text
  elseif entry.tagName = "image" then
    strChannelImage = printImage(entry)
  end if
  next

  ' De tre obligatoriske elementer i channel udskrives
   echo $"<h2>" & strChannelTitle & "</h2>" & vbCrLf & vbCrLf
   echo $"<p>" & strChannelDescription & "</p>" & vbCrLf & vbCrLf
   echo $"<p><a href='" & strChannelLink & "'>Besøg " & strChannelTitle & "</a></p>"
  If strChannelImage <> "" Then
   echo $"<p>" & strChannelImage & "</p>" & vbCrLf & vbCrLf
  End IF

   echo $"<hr />" & vbCrLf & vbCrLf

  ' Åbn elementerne <item>
  set itemNodes = xmlDoc.selectNodes("//item/*")

  For each item in itemNodes
  ' Elementerne i channel lægges i variable med #%# som adskillelse
  if item.tagName = "title" then
    strItemTitle = strItemTitle & item.text & "#%#"
  elseif item.tagName = "link" then
    strItemLink = strItemLink & item.text & "#%#"
  elseif item.tagName = "description" then
    strItemDescription = strItemDescription & item.text & "#%#"
  elseif item.tagName = "pubDate" or item.tagName = "dc:date" then
    strItemPubdate = strItemPubdate & item.text & "#%#"
  elseif item.tagName = "image" then
    strItemImage = strItemImage & item.text & "#%#"
  end if
  next

  ' Elementerne i channel splittes i arrays
  arrItemTitle = split(strItemTitle,"#%#")
  arrItemLink = split(strItemLink,"#%#")
  arrItemDescription = split(strItemDescription,"#%#")
  arrItemPubdate = split(strItemPubdate,"#%#")
  arrItemImage = split(strItemImage,"#%#")

  ' Elementerne i channel udskrives
  Dim i
   echo $"<ul>" & vbCrLf & vbCrLf
  for i = 0 to UBound(arrItemTitle) - 1
     echo $"<li>"
     echo $"<a href='" & arrItemLink(i) & "'>" & arrItemTitle(i) & "</a> "
    'Pubdate udskrives hvis den eksisterer
    If strItemPubdate <> "" Then
     echo $"<span><br />" & (arrItemPubdate(i)) & "</span>"
    End If
    ' Description udskrives hvis den eksisterer
    if strItemDescription <> "" then
       echo $"<br />" & arrItemDescription(i)
    elseif strItemImage <> "" then
       echo $arrItemImage(i)
    end if
     echo $"</li>" & vbCrLf & vbCrLf
  next
   echo $"</ul>"

  ' Vi rydder op
  set channelNodes = nothing
  set itemNodes = nothing

End If
End Sub
%>

Du skulle hermed være køreklar. I din asp-sides body kan du indsætte et nyt feed og give din side et nyt navn, så du har en asp-side for hvert feed, du ønsker at abonnere på.

Hvis du vil være en smule doven, kan du downloade et køreklar script.

^ Tilbage til sidens top

Valid XHTML og CSS / Copyright © Hjemmesideskolen marts 2006
Hjemmesideskolen
Du er her: Forsiden - scripts - News feeds
Brugere lige nu: 1
Home Mail