Database Reference
In-Depth Information
def on _ end _ document()
puts "TOTAL: #{@count} records inserted"
exit(1)
end
end
parser = XML::SaxParser.io(ARGF)
parser.callbacks = JamendoCallbacks.new
parser.parse
{ Zum Auftakt laden wir das rubygems -Modul und die benötigten Gems.
| Standardmäßig nutzt man LibXML, indemman eine Callback-Klasse defi-
niert. Wir definieren eine JamendoCallbacks -Klasse, die unsere SAX-Hand-
ler für verschiedene Events kapselt.
} Während der Initialisierung stellt unsere Klasse mit Hilfe der CourchRest-
API zuerst die Verbindung mit unserem lokalen CouchDB-Server her und
erzeugt dann die music -Datenbank (wenn sie nicht bereits existiert). Da-
nach werden einige Instanzvariablen eingerichtet, die Statusinformatio-
nen während des Parsings speichern. Beachten Sie, dass alle Dokumente
(und nicht nur die ersten 100) importiert werden, wenn Sie den @max -
Parameter auf nil setzen.
~ Sobald das Parsing begonnen hat, verarbeitet die on _ start _ element() -
Methode alle öffnenden Tags. Hier achten wir auf uns besonders interes-
sierende Tags wie <artist> , <album> , <track> und <tag> . Wir ignorieren
bewusst Container-Elemente - <Artists> , <Albums> , <Tracks> und <Tags>
- und behandeln alle anderen als Properties, die für die nächstgelegenen
Container-Elemente gesetzt werden.
Sobald der Parser Zeichendaten erkennt, puffern wir sie, um sie dem
aktuellen Container-Element (dem Ende des @stack s) als Property hinzu-
zufügen.
Ein Großteil der interessanten Dinge passiert in der on _ end _ element() -
Methode. Hier schließen wir das aktuelle Container-Element, indem wir
es vom Stack entfernen. Schließt der Tag ein artist -Element, nutzen
wir die Gelegenheit, um das Dokument mit der @db.save _ doc() -Methode
in CouchDB abzuspeichern. Jedem Container-Element fügen wir außer-
dem eine random -Property hinzu, die eine frisch generierte Zufallszahl ent-
hält. Wir nutzen diesen Wert später, um einen Titel, ein Album oder einen
Künstler zufällig auszuwählen.
Rubys ARGF -Stream kombiniert die Standardeingabe und alle in der Kom-
mandozeile angegebenen Dateien. Wir übergeben das an LibXML und ge-
ben eine Instanz unserer JamendoCallbacks -Klasse an, um die Tokens -
Start-Tags, End-Tags und Zeichendaten - zu verarbeiten.
Search WWH ::




Custom Search