Für mein derzeitiges Softwareprojekt arbeite ich mit RSS- und Atom-Feeds. Dabei entdeckte ich, dass Ruby in der Standardbibliothek ein Modul zum Arbeiten mit diesen Formaten hat.
Es gibt einen Parser zum Lesen (Beispielcode aus der Dokumentation):
require 'rss'
require 'open-uri'
url = 'http://www.ruby-lang.org/en/feeds/news.rss'
open(url) do |rss|
feed = RSS::Parser.parse(rss)
puts "Title: #{feed.channel.title}"
feed.items.each do |item|
puts "Item: #{item.title}"
end
end
Und eine Klasse zum Erstellen:
require "rss"
rss = RSS::Maker.make("rss2.0") do |maker|
maker.channel.updated = Time.now.to_s
maker.channel.title = 'Testing the RSS 2.0 maker'
maker.channel.link = 'http://www.ruby-lang.org/en/feeds/news.rss'
maker.channel.description = 'An important description'
maker.items.new_item do |newItem|
newItem.title = 'Item title'
newItem.updated = Time.now.to_s
newItem.link = 'https://www.onli-blogging.de/1641/Space-Hulk-Ascension.html'
newItem.content_encoded = 'A mediocre game'
newItem.guid.content = 'https://www.onli-blogging.de/1641/Space-Hulk-Ascension.html'
end
end
puts rss
Allerdings ist dieses Modul nicht unproblematisch. Abgesehen von der Readme gibt es nahezu keine Dokumentation. Auch Google findet kaum Diskussionen über den Code, das macht das Arbeiten damit schwierig. Ein Beispiel, in das ich heute gerannt bin, steckt im obigen Beispielcode: In bestimmten Situationen gibt der RSS-Bauer einfach nichts aus.
Deswegen ist es eine wichtige maker.channel.description
. Ist diese nämlich nil
oder leer (""
), scheitert die Erstellung ohne Fehlermeldung und es gibt keine Ausgabe.
Eine weitere Stolperstelle steckt in der guid
. Normalerweise würde man die ja einfach über newItem.guid = 'die guid'
setzen. Weil dieser Setter aber nicht implementiert ist, muss stattdessen newItem.guid.content
aufgerufen werden.
Den Parser nutze ich gar nicht erst direkt, weil ich eine Normalisierung von Atom und RSS brauche. Das kleine Gem feedparser kann das, nutzt ihn allerdings intern. Ansonsten hätte ich auf feedjira gesetzt, das normalisiert wohl auch, wirbt aber nicht explizit damit, was mich zögern lässt.
Zum Erstellen hätte ich aber keinen anderen Weg, außer das wie bei ursprung manuell über ein Template zu erledigen.
Trotzdem: Sehr schön, so etwas in der Standardbibliothek zu haben. Jetzt müsste es nur noch dokumentiert sein.
onli blogging am : Categories setzen mit Rubys RSS-Modul
Vorschau anzeigen