Edurep:Implementaties/Ruby: verschil tussen versies

Uit Kennisnet Developers Documentatie
Ga naar: navigatie, zoeken
(new)
 
(https overstap)
 
Regel 13: Regel 13:
 
require 'rexml/document'
 
require 'rexml/document'
 
require 'net/http'
 
require 'net/http'
@url = '<nowiki>http://wszoeken.edurep.kennisnet.nl:8000/edurep/srwns</nowiki>'
+
@url = '<nowiki>https://wszoeken.edurep.kennisnet.nl/edurep/srwns</nowiki>'
 
@content = Net::HTTP.get(URI.parse(@url))
 
@content = Net::HTTP.get(URI.parse(@url))
 
doc = REXML::Document.new(@content)
 
doc = REXML::Document.new(@content)

Huidige versie van 20 jan 2020 om 15:01

Deze pagina laat zien hoe een ruby-client kan worden gebruikt om met de SRU-interface te communiceren. De support vanuit ruby voor SOAP is nog niet heel erg goed. Het implementeren van de SRW-interface lukt in ieder geval niet met de standaard soap4r library. Daarom is het aan te bevelen de SRU-interface te gebruiken voor Ruby.

SRU-client

Voor de voorbeeld-SRU-client worden de volgende libraries gebruikt:

  • net/http: voor het communiceren over HTTP.
  • rexml: voor het parsen van XML documenten.
  • htmlentities: voor het decoden van de brondocumenten.

Het voorbeeld sru.rb client ziet er dan als volgt uit:

require 'htmlentities/string'
require 'rexml/document'
require 'net/http'
@url = '<nowiki>https://wszoeken.edurep.kennisnet.nl/edurep/srwns</nowiki>'
@content = Net::HTTP.get(URI.parse(@url))
doc = REXML::Document.new(@content)
  
## Use xpath to get the number of records and put them in an array.
data = doc.elements.to_a("//srw:numberOfRecords")[0]
puts "Aantal gevonden resultaten: #{data[0]}"
  
## Use xpath to get all titles inside the recordData elements and parse the XML doc.
data = doc.elements.to_a("//srw:recordData")
data.each do |c|
#  Use the html entities decode to get an XML document.
lom = REXML::Document.new(c[0].to_s.decode_entities)
title = lom.elements.to_a("//oai_czp:title/oai_czp:langstring")[0]
puts "titel: #{title[0]}"
end

Het uitvoeren van deze code kan eenvoudig met "ruby sru.rb".