RSS -> HTML Modul gesucht...

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 19. August 2005, 16:12

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 19. August 2005, 16:37

Das ganze ich ja viel einfacher als ich dachte:
http://www.html-world.de/program/rss_3. ... ormatieren

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 19. August 2005, 16:55

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 :)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 19. August 2005, 18:56

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 19. August 2005, 19:13

Hmm, ich könnte mir eher vorstellen, dass du sowas mit XSLT bewerkstelligen kannst (in (X)HTML wandeln), dann noch mit CSS nachpolieren.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
fs111
User
Beiträge: 170
Registriert: Samstag 15. November 2003, 11:42
Kontaktdaten:

Sonntag 21. August 2005, 12:40

Ich denke auch, das XSLT da der richtige Ansatz ist:

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

fs111
Pydoc-Integration in vim - Feedback willkommen: http://www.vim.org/scripts/script.php?script_id=910
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Sonntag 21. August 2005, 16:20

Danke für den Link... Werde ich mir mal in Ruhe anschauen...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 22. August 2005, 15:30

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?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 22. August 2005, 16:41

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 25. August 2005, 11:57

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten