#!/usr/bin/env ruby #encoding: utf-8 require 'savon' require 'pry' RefDataPartnerService = 'http://refdatabase.refdata.ch/Service/Partner.asmx?WSDL' puts RefDataPartnerService client = Savon.client(wsdl: RefDataPartnerService) body = %( ALL ALL ) if false response = client.call(:download, xml: body) puts "found #{response.body[:partner][:item].size} partners" File.open("partner.txt", 'w+') do |f| response.body[:partner][:item].each{ | item| f.puts item } end end RefDataArticleService = 'http://refdatabase.refdata.ch/Service/Article.asmx?WSDL' x = %( Für die Integration in Softwarelösungen von Dritten ist die refdatabase auch via Webservices verfügbar. Diese Services sind mit dem Standard WSDL dokumentiert (via untenstehende Links, dort jeweils „Service Description“ anwählen). Beim Datenbezug sind die Auswahlkriterien mitzugeben (TYPE: Suchfeld, TERM: Suchbegriff, ATYPE bzw. PTYPE: Typ der Suchresultate). Zudem ist mit TYPE = ALL ein vollständiger Datendownload möglich und mit TYPE = DATE können später alle Mutationen seit dem letzten Downloaddatum gesucht werden. Diese Services sind via folgende URLs öffentlich verfügbar: ) puts Time.now client = Savon.client(wsdl: RefDataArticleService) body = %( ALL ) response = client.call(:download, xml: body) puts "found #{response.body[:article][:item].size} articles" puts Time.now File.open("article.txt", 'w+') do |f| response.body[:article][:item].each{ | item| f.puts item } end puts Time.now exit binding.pry # Not working class ServiceRequest def to_s builder = Builder::XmlMarkup.new builder.instruct!(:xml, encoding: "UTF-8") builder.Body { |body| body.DownloadArticleInput { |b| b.ATYPE("PHARMA") } } builder end end ServiceRequest.new client.call(:download, message: ServiceRequest.new) # http://refdatabase.refdata.ch/Article_in response = client.call(:download_article_input, message(:ATYPE => 'PHARMA')) # client.call(:download, message: { TYPE: 'ALL', ATYPE: 'PHARMA' }) -> Invalid Parameter pp response.body