Seite 1 von 1

RSS -> HTML Modul gesucht...

Verfasst: Freitag 19. August 2005, 16:12
von jens
Wo finde ich denn ein einfaches Modul um aus RSS HTML zu generieren? Ich möchte meine PyLucid-Sourceforge-News auf meine Webseite packen. Also ein Modul für PyLucid dafür schreiben...

Verfasst: Freitag 19. August 2005, 16:37
von jens
Das ganze ich ja viel einfacher als ich dachte:
http://www.html-world.de/program/rss_3. ... ormatieren

Verfasst: Freitag 19. August 2005, 16:55
von Leonidas
Was willst du dennn haben? RSS 0.9x, RSS 1.0 oder RSS 2.0? Achtung, diese sind allesammt verschieden!

Vielleicht interessiert die ein Script von mir :)

Verfasst: Freitag 19. August 2005, 18:56
von jens
Die Pylucid-News von Sourceforge sind RSS 2.0:
http://sourceforge.net/export/rss2_proj ... _id=146328

Nach dem Artikel zu urteilen reicht es, die RSS Daten einfach ins HTML mit einzufädeln und mit CSS die Tags sinnvoll zu formatieren... Auf die schnelle ist mir das aber nicht gelungen...

Verfasst: Freitag 19. August 2005, 19:13
von Leonidas
Hmm, ich könnte mir eher vorstellen, dass du sowas mit XSLT bewerkstelligen kannst (in (X)HTML wandeln), dann noch mit CSS nachpolieren.

Verfasst: Sonntag 21. August 2005, 12:40
von fs111
Ich denke auch, das XSLT da der richtige Ansatz ist:

http://www.xml.com/pub/a/2003/01/02/tr.html

fs111

Verfasst: Sonntag 21. August 2005, 16:20
von jens
Danke für den Link... Werde ich mir mal in Ruhe anschauen...

Verfasst: Montag 22. August 2005, 15:30
von jens
So....
Man benötigt also PyXML :( Nur für das einblenden von RSS ein bischen viel zusätzliche Module. Außerdem soll es ja wieder in einer Python CGI Umgebung funktionieren...

Kann man mit Python-Bordmitteln XSLT Verarbeitung vornehmen?

Verfasst: Montag 22. August 2005, 16:41
von jens
Also ich überlege über eine ganze einfache Filterung die RSS Daten in die Webseite "einzukopieren" um die Tags dann per CSS zu Formatieren.

Also ein RSS sieht so aus:

Code: Alles auswählen

<rss version="2.0">
	<channel>
		<title>SourceForge.net: SF.net Project News: PyLucid</title>
		<link>http://sourceforge.net/projects/pylucid/</link>
		<description>SF.net Project News: [...]</description>
		<copyright>Copyright and [...]</copyright>
		<lastBuildDate>Mon, 22 Aug 2005 14:19:49 GMT</lastBuildDate>
		<generator>SourceForge.net RSS generator</generator>
		<image>
			<title>SourceForge.net logo</title>
			<url>http://images.sourceforge.net/images/sflogo-88-1.png</url>
			<link>http://sourceforge.net/</link>
			<width>88</width>
			<height>31</height>
			<description>The world's largest Open Source software development website</description>
		</image>
		<item>
			<title>Maillist eingerichtet.</title>
			<description>Habe die Maillingliste eingerichtet... Somit kann nun jeder, unter http://lists.sourceforge.net/lists/listinfo/pylucid-news sich eintragen. (0 comments)</description>
			<author>pylucid@users.sourceforge.net (Jens Diemer)</author>
			<link>http://sourceforge.net/forum/forum.php?forum_id=489815</link>
			<guid isPermaLink="true">http://sourceforge.net/forum/forum.php?forum_id=489815</guid>
			<pubDate>Fri, 19 Aug 2005 14:58:21 GMT</pubDate>
			<comments>http://sourceforge.net/forum/forum.php?forum_id=489815</comments>
		</item>
		<item>
			<title>Einrichten...</title>
			<description>Nachdem ich neben meiner Homepage http://www.jensdiemer.de/Programmieren/Python/PyLucid eine extra Seite für PyLucid: http://www.pylucid.org eingerichtet hab, startete ich nun hier bei SourceForge ein offizielles Projekt... (0 comments)</description>
			<author>pylucid@users.sourceforge.net (Jens Diemer)</author>
			<link>http://sourceforge.net/forum/forum.php?forum_id=489612</link>
			<guid isPermaLink="true">http://sourceforge.net/forum/forum.php?forum_id=489612</guid>
			<pubDate>Fri, 19 Aug 2005 08:31:04 GMT</pubDate>
			<comments>http://sourceforge.net/forum/forum.php?forum_id=489612</comments>
		</item>
	</channel>
</rss>
Mal angekommen ich definiere folgenden Filter:

Code: Alles auswählen

<channel>
    <item>
        <title></title>
        <description></description>
    </item>
</channel>
Also ich will nur die Zeilen channel.item.title und chanel.item.description haben... Kann man das mit den Python XML Basis Modulen machen???

Verfasst: Donnerstag 25. August 2005, 11:57
von jens
Hab nun was verblüffend einfaches gefunden, es basiert auf http://www.xml.com/pub/a/2002/12/18/div ... ?page=last

Code: Alles auswählen

import xml.dom.minidom
import sys,os, urllib

class RSS:
    DEFAULT_NAMESPACES = (
        None, # RSS 0.91, 0.92, 0.93, 0.94, 2.0
        'http://purl.org/rss/1.0/', # RSS 1.0
        'http://my.netscape.com/rdf/simple/0.9/' # RSS 0.90
    )
    DUBLIN_CORE = ('http://purl.org/dc/elements/1.1/',)

    def getElementsByTagName( self, node, tagName, possibleNamespaces=DEFAULT_NAMESPACES ):
        for namespace in possibleNamespaces:
            children = node.getElementsByTagNameNS(namespace, tagName)
            if len(children): return children
        return []

    def node_data( self, node, tagName, possibleNamespaces=DEFAULT_NAMESPACES):
        children = self.getElementsByTagName(node, tagName, possibleNamespaces)
        node = len(children) and children[0] or None
        return node and "".join([child.data.encode("utf_8") for child in node.childNodes]) or None

    def get_txt( self, node, tagName, default_txt="" ):
        """
        Liefert den Inhalt >tagName< des >node< zurück, ist dieser nicht
        vorhanden, wird >default_txt< zurück gegeben.
        """
        return self.node_data( node, tagName ) or self.node_data( node, tagName, self.DUBLIN_CORE ) or default_txt

    def print_txt( self, node, tagName, print_string ):
        """
        Formatierte Ausgabe
        """
        item_data = self.get_txt( node, tagName )
        if item_data == "":
            return
        print print_string % {
            "tag"   : tagName,
            "data"  : item_data
        }

    def print_rss( self, url ):
        rssDocument = xml.dom.minidom.parse( urllib.urlopen( url ) )

        for node in self.getElementsByTagName(rssDocument, 'item'):
            print '<ul class="RSS">'

            print '<li><h1><a href="%s">' % self.get_txt( node, "link", "#" )
            print self.get_txt( node, "title", "<no title>" )
            print "</a></h1></li>"

            self.print_txt( node, "date",           '<li><small>%(data)s</li>' )
            self.print_txt( node, "description",    '<li>%(data)s</li>' )
            print "</ul>"


RSS().print_rss( "http://sourceforge.net/export/rss2_projnews.php?group_id=146328" )
Hab's direkt in PyLucid als Modul eingebaut. SourceCode hier:
http://cvs.sourceforge.net/viewcvs.py/p ... iew=markup

Wie das hinterher auf einer Webseite aussehen kann, ist hier zu sehen:
http://www.pylucid.org/?p=/about/news
http://www.pylucid.org/?p=/Download