fb:porticula NoPaste
mini-atom-reader (braucht curl)
Uploader: | The_Muh |
Datum/Zeit: | 06.01.2010 22:50:31 |
'getestet mit feeds von heise und golem
'Copyright (c) 2009 The_Muh
'Hiermit wird unentgeltlich, jeder Person, die eine Kopie der Software
'und der zugehörigen Dokumentationen (die "Software") erhält, die
'Erlaubnis erteilt, uneingeschränkt zu benutzen, inklusive und ohne
'Ausnahme, dem Recht, sie zu verwenden, kopieren, ändern, fusionieren,
'verlegen, verbreiten, unterlizenzieren und/oder zu verkaufen, und
'Personen, die diese Software erhalten, diese Rechte zu geben, unter den
'folgenden Bedingungen:
'Der obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in alle
'Kopien oder Teilkopien der Software beizulegen.
'DIE SOFTWARE WIRD OHNE JEDE AUSDRÜCKLICHE ODER IMPLIZIERTE GARANTIE
'BEREITGESTELLT, EINSCHLIESSLICH DER GARANTIE ZUR BENUTZUNG FÜR DEN
'VORGESEHENEN ODER EINEM BESTIMMTEN ZWECK SOWIE JEGLICHER RECHTSVERLETZUNG,
'JEDOCH NICHT DARAUF BESCHRÄNKT. IN KEINEM FALL SIND DIE AUTOREN ODER
'COPYRIGHTINHABER FÜR JEGLICHEN SCHADEN ODER SONSTIGE ANSPRÜCHE HAFTBAR
'ZU MACHEN, OB INFOLGE DER ERFÜLLUNG EINES VERTRAGES, EINES DELIKTES
'ODER ANDERS IM ZUSAMMENHANG MIT DER SOFTWARE ODER SONSTIGER VERWENDUNG
'DER SOFTWARE ENTSTANDEN.
'obige lizenz gilt für den gesamten code, außer der funktion "replace", diese ist von ThePuppetMaster
Function replace(ByVal V_Data As String, ByVal V_Expression As String, ByVal V_ReplaceBy As String) As String
Dim X As Long
Dim SL As Long
Dim D as String
D = V_Data
SL = Len(V_Expression)
X = 0
Do
X = X + 1
If X > Len(D) - SL + 1 Then Exit Do
If Mid(D, X, SL) = V_Expression Then
D = Mid(D, 1, X - 1) & V_ReplaceBy & Mid(D, X + SL)
X = X - (SL - 1)
If X < 0 then X = 0
End If
Loop
Return D
End Function
type news_type
title as string
link as string
summary as string
updated as string
end type
dim news() as news_type
dim nr as integer
Nr = FREEFILE
open pipe "curl -s ""http://rss.golem.de/rss.php?tp=oss&feed=ATOM1.0""" FOR INPUT AS #Nr
DIM AS STRING s, value
dim as integer parse, add, posi
dim id as integer
dim tag as string
DO UNTIL EOF(Nr)
LINE INPUT #Nr, s
if instr(s,"<feed") then
parse = 1
end if
if instr(s,"</feed>") then exit do
if parse = 1 then
posi = instr(s,"<")+1
tag = mid(s,posi, instr(s, ">")- posi)
if instr(tag, "type=") then
dim content_type as string
posi = instr(tag, " ")
content_type = mid(tag, instr(tag,"""")+1, len(tag)- instr(tag,"""")-1)
tag = trim(left(tag, posi))
value = right(s, len(s) - instr(s, ">"))
value = left(value, instr(value, "<") -1)
if content_type = "html" then
do
posi = instr(value, "<")
if posi then
dim as string htmltag
htmltag = mid(value, posi, instr(value, ">")+4 - posi)
value = replace(value, htmltag, "")
else
exit do
end if
loop
end if
elseif instr(tag, " ") then
posi = instr(tag, " ")
value = right(tag, len(tag)- posi)
tag = left(tag, posi)
else
value = right(s, len(s) - instr(s, ">"))
value = left(value, instr(value, "<") -1)
end if
if tag = "/entry" then
add = 0
end if
if add = 1 then
select case tag
case "title"
news(id).title = value
case "id"
news(id).link = value
case "summary"
news(id).summary = value
case "updated"
dim as string datum, uhrzeit
posi = instr(value, "T")
datum = left(value, posi-1)
uhrzeit = mid(value,posi +1, len(value) - instr(value, "+"))
news(id).updated = datum &" - "& uhrzeit
end select
end if
if instr(s, "<entry>") and add = 0 then
id = ubound(news)+1
redim preserve news(id)
add = 1
end if
if tag = "entry" and add = 0 then
id = ubound(news)+1
redim preserve news(id)
add = 1
end if
end if
LOOP
CLOSE Nr
for i as integer = 1 to ubound(news)
? string(len(str(ubound(news)))-len(str(i)), "0") & i &" - "& news(i).title
? string(len(str(ubound(news))), " ") & " | " & news(i).updated
? string(len(str(ubound(news))), " ") & " | " & news(i).summary
? ""
next