RSS-Reader mit PB-XML-Funktionen?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

RSS-Reader mit PB-XML-Funktionen?

Beitrag von Delle »

Hallo,

hat hier jemand schon mal einen RSS-Reader programmiert oder es versucht?

Meine sowas hier: http://www.spiegel.de/thema/startup_pio ... /index.rss

Wären dafür nicht die XML-Funktione von PB geeignet?

Danke,
Delle
PB 6.21 | Win 11
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: RSS-Reader mit PB-XML-Funktionen?

Beitrag von Kiffi »

Delle hat geschrieben:Wären dafür nicht die XML-Funktione von PB geeignet?
ich weiß nicht...

Code: Alles auswählen

EnableExplicit

InitNetwork()

Define XML
Define ItemNode, ItemCounter

If ReceiveHTTPFile("http://www.spiegel.de/thema/startup_pioniere_2012/index.rss", GetTemporaryDirectory() + "index.rss")
  
  XML = LoadXML(#PB_Any, GetTemporaryDirectory() + "index.rss")
  
  If XML
    
    ItemCounter = 1
    
    Repeat
      
      ItemNode = XMLNodeFromPath(RootXMLNode(XML), "rss/channel/item[" + Str(ItemCounter) + "]")
      
      If ItemNode = 0
        Break
      EndIf
      
      ItemCounter  + 1
      
      Debug "Titel:"
      Debug GetXMLNodeText(XMLNodeFromPath(ItemNode, "title"))
      
      Debug "Beschreibung:"
      Debug GetXMLNodeText(XMLNodeFromPath(ItemNode, "description"))
      
      Debug "-------------"
      
    ForEver
    
    FreeXML(XML)
    
  EndIf
  
  DeleteFile(GetTemporaryDirectory() + "index.rss")
  
EndIf
;-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Re: RSS-Reader mit PB-XML-Funktionen?

Beitrag von Delle »

Kiffi hat geschrieben:
Delle hat geschrieben:Wären dafür nicht die XML-Funktione von PB geeignet?
ich weiß nicht...
Doch Du weißt! ;) :praise: :allright:
PB 6.21 | Win 11
Benutzeravatar
Darky
Beiträge: 210
Registriert: 18.09.2004 20:53
Wohnort: Gelsenkirchen / NRW
Kontaktdaten:

Re: RSS-Reader mit PB-XML-Funktionen?

Beitrag von Darky »

Ich hab vor Jahren mal einen Newsreader und einen Newsticker geschrieben damals hatte Purebasic noch keine Nativen XML Befehle :)

Wenn du interesse hast lade ich die dinge die Tage wieder hoch weil der alte Webspace nicht so funzt ...


Hier die Links zu den Threads

Newsreader :
http://forums.purebasic.com/german/view ... 87e555e3c4

Deskticker :
http://forums.purebasic.com/german/view ... 87e555e3c4


Wie gesagt sind nur die Threads kann die sachen gerne neu hochladen


Gruß Darky
pws32
Beiträge: 52
Registriert: 27.09.2004 12:33

Re: RSS-Reader mit PB-XML-Funktionen?

Beitrag von pws32 »

Hallo,
wäre schön wenn Du Deinen Newsreader und Newsticker wieder irgendwo hochladen könntest wäre sehr interessiert

Gruss PWS
ich weis das ich nix weis
Benutzeravatar
Darky
Beiträge: 210
Registriert: 18.09.2004 20:53
Wohnort: Gelsenkirchen / NRW
Kontaktdaten:

Re: RSS-Reader mit PB-XML-Funktionen?

Beitrag von Darky »

Sehr gerne :) ... schreibe dir die Tage die URLs =)
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Re: RSS-Reader mit PB-XML-Funktionen?

Beitrag von Delle »

So ich hol es mal wieder aus der Versenkung ;)

Das Script zeigt für einige RSS-Feeds nicht die "description" an, weil der Text darin nochmals in ein CDATA gepackt ist:

https://www.data2type.de/xml-xslt-xslfo ... abschnitte

Wie kommt man trotzdem an die Beschreibung ran?

Wenn GetXMLNodeText(XMLNodeFromPath(ItemNode, "description")) = LEER dann versuche das CDATA-Array?

Wie muss das dann aussehen? Debug GetXMLNodeText(XMLNodeFromPath(ItemNode, "description[CDATA]")) oder so?

Danke!
PB 6.21 | Win 11
Benutzeravatar
TroaX
Beiträge: 684
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
Wohnort: NRW
Kontaktdaten:

Re: RSS-Reader mit PB-XML-Funktionen?

Beitrag von TroaX »

Warum ist die Description in einem CDATA Block? Kommt mir irgendwie nicht valide vor.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Re: RSS-Reader mit PB-XML-Funktionen?

Beitrag von Delle »

TroaX hat geschrieben: 19.12.2024 17:26 Warum ist die Description in einem CDATA Block? Kommt mir irgendwie nicht valide vor.
Es scheint aber "valide" zu sein, vermutlich damit die jeweiligen Feeds vorher die HTML-Tags aus ihre Kurzbeschreibungen nicht entfernen müssen #faulheit

Beispiel: https://maschinist.blog/feed/

"CDATA stands for Character Data and it means that the data in between these strings includes data that could be interpreted as XML markup, but should not be."

Die PB-Debug-Funktion zeigt es anscheinend einfach nicht an, auch wenn es vorhanden ist...

PHP-Erklärung dazu:
You are probably being misled into thinking that the CDATA is missing by using print_r or one of the other "normal" PHP debugging functions. These cannot see the full content of a SimpleXML object, as it is not a "real" PHP object.

If you run echo $nodes[0]->Description, you'll find your CDATA comes out fine. What's happening is that PHP knows that echo expects a string, so asks SimpleXML for one; SimpleXML responds with all the string content, including CDATA.

To get at the full string content reliably, simply tell PHP that what you want is a string using the (string) cast operator, e.g. $description = (string)$nodes[0]->Description.
Wie kann man das für PB ummodeln?
PB 6.21 | Win 11
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: RSS-Reader mit PB-XML-Funktionen?

Beitrag von Andesdaf »

Die PB-XML-Funktionen unterstützen CDATA. Ich habe damit noch nicht gearbeitet, aber wenn ich es recht verstehe, dann kannst du ausgehend vom description-Node noch einmal ChildXMLNode() aufrufen und erhältst dann einen Node vom Typ #PB_XML_CData. Dessen Inhalt kannst du dann mit GetXMLNodeText() beziehen.
Win11 x64 | PB 6.20
Antworten