oddb2xml 1.8.1 → 1.8.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +1 -1
- data/Gemfile.lock +7 -7
- data/README.md +14 -2
- data/Rakefile +10 -1
- data/bin/oddb2xml +2 -2
- data/lib/oddb2xml/builder.rb +36 -26
- data/lib/oddb2xml/cli.rb +19 -4
- data/lib/oddb2xml/compressor.rb +7 -7
- data/lib/oddb2xml/downloader.rb +77 -58
- data/lib/oddb2xml/extractor.rb +31 -21
- data/lib/oddb2xml/util.rb +18 -13
- data/lib/oddb2xml/version.rb +1 -1
- data/oddb2xml.gemspec +8 -5
- data/spec/builder_spec.rb +68 -31
- data/spec/cli_spec.rb +43 -69
- data/spec/compressor_spec.rb +36 -13
- data/spec/data/compressor/oddb2xml_files_bm_update.txt +4 -0
- data/spec/data/compressor/oddb2xml_files_lppv.txt +4 -0
- data/spec/data/compressor/oddb2xml_files_nonpharma.xls +0 -0
- data/spec/data/{oddb_article.xml → compressor/oddb_article.xml} +0 -0
- data/spec/data/{oddb_fi.xml → compressor/oddb_fi.xml} +0 -0
- data/spec/data/{oddb_fi_product.xml → compressor/oddb_fi_product.xml} +0 -0
- data/spec/data/{oddb_limitation.xml → compressor/oddb_limitation.xml} +0 -0
- data/spec/data/{oddb_product.xml → compressor/oddb_product.xml} +0 -0
- data/spec/data/{oddb_substance.xml → compressor/oddb_substance.xml} +0 -0
- data/spec/data/epha_interactions.csv +4 -1
- data/spec/data/swissindex_nonpharma.xml +13 -1
- data/spec/data/swissindex_pharma.xml +12 -0
- data/spec/data/{swissmedic_fridges.xlsx → swissmedic_fridge.xlsx} +0 -0
- data/spec/data/swissmedic_orphan.xlsx +0 -0
- data/spec/data/{swissmedic_packages.xlsx → swissmedic_package.xlsx} +0 -0
- data/spec/data/zurrose_transfer.dat +12 -11
- data/spec/downloader_spec.rb +48 -13
- data/spec/extractor_spec.rb +10 -11
- data/spec/spec_helper.rb +44 -15
- data/test_options.rb +24 -8
- metadata +71 -45
- checksums.yaml +0 -15
- data/spec/data/Gestrichene_Packungen_Emballages_radies.xls +0 -1
- data/spec/data/Publications.xls +0 -1
- data/spec/data/swissmedic_fridges.xls +0 -0
- data/spec/data/swissmedic_packages.xls +0 -0
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
oddb2xml (1.8.
|
5
|
-
archive-tar-minitar
|
4
|
+
oddb2xml (1.8.2)
|
5
|
+
archive-tar-minitar (~> 0.5.2)
|
6
6
|
mechanize (~> 2.5.1)
|
7
7
|
nokogiri (~> 1.5.10)
|
8
8
|
rubyXL (~> 2.5)
|
9
|
-
rubyzip (~> 1.
|
10
|
-
savon (~> 2.0)
|
11
|
-
sax-machine
|
12
|
-
spreadsheet
|
9
|
+
rubyzip (~> 1.1.3)
|
10
|
+
savon (~> 2.4.0)
|
11
|
+
sax-machine (~> 0.1.0)
|
12
|
+
spreadsheet (~> 0.9.7)
|
13
13
|
|
14
14
|
GEM
|
15
15
|
remote: https://rubygems.org/
|
@@ -79,7 +79,7 @@ GEM
|
|
79
79
|
rubyzip (>= 1.0.0)
|
80
80
|
rubyntlm (0.3.4)
|
81
81
|
rubyzip (1.1.3)
|
82
|
-
safe_yaml (1.0.
|
82
|
+
safe_yaml (1.0.3)
|
83
83
|
savon (2.4.0)
|
84
84
|
akami (~> 1.2.0)
|
85
85
|
builder (>= 2.1.2)
|
data/README.md
CHANGED
@@ -20,7 +20,7 @@ and
|
|
20
20
|
* oddb2xml -f dat
|
21
21
|
* oddb2xml -f dat -a nonpharma
|
22
22
|
|
23
|
-
creates .dat files according to ([IGM-11](http://dev.ywesee.com/uploads/att/IGM.pdf))
|
23
|
+
creates .dat files according to ([IGM-11](http://dev.ywesee.com/uploads/att/IGM.pdf)). IGM-11 describes the structure of the zurrose_transfer.dat.
|
24
24
|
|
25
25
|
* oddb.dat
|
26
26
|
* oddb_with_migel.dat
|
@@ -43,7 +43,7 @@ The following additional data is in the files:
|
|
43
43
|
see `--help`.
|
44
44
|
|
45
45
|
```
|
46
|
-
/usr/local/bin/oddb2xml ver.1.
|
46
|
+
/usr/local/bin/oddb2xml ver.1.8.2
|
47
47
|
Usage:
|
48
48
|
oddb2xml [option]
|
49
49
|
produced files are found under data
|
@@ -87,6 +87,18 @@ FR
|
|
87
87
|
Pharma products: 14801
|
88
88
|
```
|
89
89
|
|
90
|
+
## Supported ruby version
|
91
|
+
|
92
|
+
We run tests on travis-ci.org for the Ruby versions mentioned in the .travis.yml file. These are
|
93
|
+
* 1.9.3
|
94
|
+
* 2.0.0
|
95
|
+
* 2.1
|
96
|
+
* ruby-head
|
97
|
+
|
98
|
+
If you are running an older Ruby-Version (eg. 1.8 or 1.9.1), please upgrade before reporting a bug.
|
99
|
+
See also http://bugs.ruby-lang.org/projects/ruby/wiki/ReleaseEngineering
|
100
|
+
|
101
|
+
|
90
102
|
## XSD files
|
91
103
|
If you need the XSD files, generate them yourself using the javabeans tool:
|
92
104
|
|
data/Rakefile
CHANGED
@@ -19,16 +19,25 @@ task :spec => :clean
|
|
19
19
|
|
20
20
|
desc 'Run oddb2xml with all commonly used combinations'
|
21
21
|
task :test => [:clean, :spec, :gem] do
|
22
|
-
|
22
|
+
log_file = 'test_options.log'
|
23
|
+
puts "Running test_options.rb with Output redirected to #{log_file}. This will take some time (e.g. 20 minutes)"
|
24
|
+
# must use bash -o pipefail to catch error in test_options.rb and not tee
|
25
|
+
# see http://stackoverflow.com/questions/985876/tee-and-exit-status
|
26
|
+
res = system("bash -c 'set -o pipefail && ./test_options.rb 2>&1 | tee #{log_file}'")
|
27
|
+
puts "Running test_options.rb returned #{res.inspect}. Output was redirected to #{log_file}"
|
28
|
+
exit 1 unless res
|
23
29
|
end
|
24
30
|
|
25
31
|
require 'rake/clean'
|
32
|
+
CLEAN.include FileList['pkg/*.gem']
|
33
|
+
CLEAN.include FileList['*.zip*']
|
26
34
|
CLEAN.include FileList['*.xls*']
|
27
35
|
CLEAN.include FileList['*.xml*']
|
28
36
|
CLEAN.include FileList['*.dat*']
|
29
37
|
CLEAN.include FileList['*.tar.gz']
|
30
38
|
CLEAN.include FileList['*.txt.*']
|
31
39
|
CLEAN.include FileList['*.csv.*']
|
40
|
+
CLEAN.include FileList['*.zip.*']
|
32
41
|
CLEAN.include FileList['ruby*.tmp']
|
33
42
|
CLEAN.include FileList['data/download']
|
34
43
|
CLEAN.include FileList['duplicate_ean13_from_zur_rose.txt']
|
data/bin/oddb2xml
CHANGED
@@ -28,8 +28,8 @@ Usage:
|
|
28
28
|
-x N, --context=N context N {product|address}. product is default.
|
29
29
|
|
30
30
|
For debugging purposes
|
31
|
-
--skip-download skips downloading files it the file is already under
|
32
|
-
Downloaded files are saved under
|
31
|
+
--skip-download skips downloading files it the file is already under downloads.
|
32
|
+
Downloaded files are saved under downloads
|
33
33
|
--log log important actions
|
34
34
|
-h, --help Show this help message.
|
35
35
|
EOS
|
data/lib/oddb2xml/builder.rb
CHANGED
@@ -39,6 +39,7 @@ module Oddb2xml
|
|
39
39
|
@companies = []
|
40
40
|
@people = []
|
41
41
|
@tag_suffix = nil
|
42
|
+
@pharmacode = {} # index pharmacode => item
|
42
43
|
if block_given?
|
43
44
|
yield self
|
44
45
|
end
|
@@ -78,6 +79,7 @@ module Oddb2xml
|
|
78
79
|
obj[:seq] = seq
|
79
80
|
end
|
80
81
|
@articles << obj
|
82
|
+
@pharmacode[phar] = obj
|
81
83
|
end
|
82
84
|
# add
|
83
85
|
@migel.values.compact.each do |migel|
|
@@ -117,37 +119,44 @@ module Oddb2xml
|
|
117
119
|
Oddb2xml.log("prepare_articles extended")
|
118
120
|
@prices.each{
|
119
121
|
|ean13, info|
|
122
|
+
pharmacode = info[:pharmacode]
|
123
|
+
if @pharmacode[pharmacode]
|
124
|
+
@pharmacode[pharmacode][:price] = info[:price]
|
125
|
+
@pharmacode[pharmacode][:pub_price] = info[:pub_price]
|
126
|
+
next
|
127
|
+
end
|
120
128
|
obj = {}
|
121
129
|
found = false
|
122
130
|
%w[de fr].each do |lang|
|
123
131
|
# existing = @articles.find{|art| art[lang.intern] and art[lang.intern][0][:ean] == ean13 }
|
124
|
-
|
132
|
+
|
133
|
+
existing = local_index[lang][ean13]
|
125
134
|
if existing
|
126
135
|
found = true
|
127
|
-
existing[:price]
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
end
|
145
|
-
unless found
|
146
|
-
@articles << obj
|
147
|
-
nrAdded += 1
|
148
|
-
end
|
149
|
-
}
|
136
|
+
existing[:price] = info[:price]
|
137
|
+
existing[:pub_price] = info[:pub_price]
|
138
|
+
else
|
139
|
+
entry = {
|
140
|
+
:desc => info[:description],
|
141
|
+
:status => 'A', # for ZurRose 'A' means aktive, aka available in trade
|
142
|
+
:atc_code => '',
|
143
|
+
:ean => ean13,
|
144
|
+
:lang => lang.capitalize,
|
145
|
+
:pharmacode => pharmacode,
|
146
|
+
:price => info[:price],
|
147
|
+
:pub_price => info[:pub_price],
|
148
|
+
:type => info[:type],
|
149
|
+
}
|
150
|
+
obj[lang.intern] = [entry]
|
151
|
+
@index[lang.upcase][ean13] = entry
|
152
|
+
end
|
150
153
|
end
|
154
|
+
unless found
|
155
|
+
@articles << obj
|
156
|
+
nrAdded += 1
|
157
|
+
end
|
158
|
+
}
|
159
|
+
end
|
151
160
|
end
|
152
161
|
Oddb2xml.log("prepare_articles done. Added #{nrAdded} prices. Total #{@articles.size}")
|
153
162
|
end
|
@@ -604,7 +613,7 @@ module Oddb2xml
|
|
604
613
|
'PROD_DATE' => datetime,
|
605
614
|
'VALID_DATE' => datetime
|
606
615
|
) {
|
607
|
-
|
616
|
+
@articles.each do |obj|
|
608
617
|
idx += 1
|
609
618
|
Oddb2xml.log "build_article #{idx} of #{@articles.size} articles" if idx % 500 == 0
|
610
619
|
obj[:de].each_with_index do |de_idx, i|
|
@@ -612,6 +621,7 @@ module Oddb2xml
|
|
612
621
|
pac,no8 = nil,de_idx[:ean][4..11] # BAG-XML(SL/LS)
|
613
622
|
ppac = nil # Packungen
|
614
623
|
ean = de_idx[:ean]
|
624
|
+
pharma_code = de_idx[:pharmacode]
|
615
625
|
ean = nil if ean.match(/^000000/)
|
616
626
|
if obj[:seq]
|
617
627
|
pac = obj[:seq][:packages][de_idx[:pharmacode]]
|
@@ -777,7 +787,7 @@ module Oddb2xml
|
|
777
787
|
}
|
778
788
|
end
|
779
789
|
}
|
780
|
-
end
|
790
|
+
end if obj[:de]
|
781
791
|
end
|
782
792
|
xml.RESULT {
|
783
793
|
xml.OK_ERROR 'OK'
|
data/lib/oddb2xml/cli.rb
CHANGED
@@ -9,6 +9,7 @@ require 'oddb2xml/util'
|
|
9
9
|
require 'rubyXL'
|
10
10
|
|
11
11
|
module Oddb2xml
|
12
|
+
|
12
13
|
class Cli
|
13
14
|
SUBJECTS = %w[product article]
|
14
15
|
ADDITIONS = %w[substance limitation interaction code]
|
@@ -89,6 +90,7 @@ module Oddb2xml
|
|
89
90
|
end
|
90
91
|
private
|
91
92
|
def build
|
93
|
+
Oddb2xml.log("Start build")
|
92
94
|
begin
|
93
95
|
files.each_pair do |sbj, file|
|
94
96
|
builder = Builder.new(@options) do |builder|
|
@@ -141,7 +143,7 @@ module Oddb2xml
|
|
141
143
|
else
|
142
144
|
output = builder.to_xml
|
143
145
|
end
|
144
|
-
File.open(file, 'w:utf-8'){ |fh| fh << output }
|
146
|
+
File.open(File.join(WorkDir, file), 'w:utf-8'){ |fh| fh << output }
|
145
147
|
end
|
146
148
|
rescue Interrupt
|
147
149
|
files.values.each do |file|
|
@@ -171,6 +173,7 @@ module Oddb2xml
|
|
171
173
|
@mutex.synchronize do
|
172
174
|
hsh = SwissmedicInfoExtractor.new(xml).to_hash
|
173
175
|
@infos = hsh
|
176
|
+
Oddb2xml.log("SwissmedicInfoExtractor added #{@infos.size} fachinfo")
|
174
177
|
end
|
175
178
|
end
|
176
179
|
when :orphan, :fridge
|
@@ -182,6 +185,7 @@ module Oddb2xml
|
|
182
185
|
"@#{var}".intern,
|
183
186
|
SwissmedicExtractor.new(bin, what).to_arry
|
184
187
|
)
|
188
|
+
# Oddb2xml.log("SwissmedicExtractor added #{self.instance_variable_get("@#{var}".intern).size} #{var}. File #{bin} was #{File.size(bin)} bytes")
|
185
189
|
end
|
186
190
|
when :interaction
|
187
191
|
Thread.new do
|
@@ -189,6 +193,7 @@ module Oddb2xml
|
|
189
193
|
str = downloader.download
|
190
194
|
@mutex.synchronize do
|
191
195
|
@actions = EphaExtractor.new(str).to_arry
|
196
|
+
Oddb2xml.log("EphaExtractor added #{@actions.size} interactions")
|
192
197
|
end
|
193
198
|
end
|
194
199
|
when :migel
|
@@ -197,6 +202,7 @@ module Oddb2xml
|
|
197
202
|
bin = downloader.download
|
198
203
|
@mutex.synchronize do
|
199
204
|
@migel = MigelExtractor.new(bin).to_hash
|
205
|
+
Oddb2xml.log("MigelExtractor added #{@migel.size} migel items")
|
200
206
|
end
|
201
207
|
end
|
202
208
|
when :package
|
@@ -205,6 +211,7 @@ module Oddb2xml
|
|
205
211
|
bin = downloader.download
|
206
212
|
@mutex.synchronize do
|
207
213
|
@packs = SwissmedicExtractor.new(bin, :package).to_hash
|
214
|
+
# Oddb2xml.log("SwissmedicExtractor added #{@packs.size} packs. File #{bin} was #{File.size(bin)} bytes")
|
208
215
|
end
|
209
216
|
end
|
210
217
|
when :bm_update
|
@@ -213,6 +220,7 @@ module Oddb2xml
|
|
213
220
|
str = downloader.download
|
214
221
|
@mutex.synchronize do
|
215
222
|
@flags = BMUpdateExtractor.new(str).to_hash
|
223
|
+
Oddb2xml.log("BMUpdateExtractor added #{@flags.size} flags")
|
216
224
|
end
|
217
225
|
end
|
218
226
|
when :lppv
|
@@ -221,6 +229,7 @@ module Oddb2xml
|
|
221
229
|
str = downloader.download
|
222
230
|
@mutex.synchronize do
|
223
231
|
@lppvs = LppvExtractor.new(str).to_hash
|
232
|
+
Oddb2xml.log("LppvExtractor added #{@lppvs.size} lppvs")
|
224
233
|
end
|
225
234
|
end
|
226
235
|
when :bag
|
@@ -230,16 +239,18 @@ module Oddb2xml
|
|
230
239
|
@mutex.synchronize do
|
231
240
|
hsh = BagXmlExtractor.new(xml).to_hash
|
232
241
|
@items = hsh
|
242
|
+
Oddb2xml.log("BagXmlDownloader added #{@items.size} items")
|
233
243
|
end
|
234
244
|
end
|
235
245
|
when :zurrose
|
236
246
|
Thread.new do
|
237
247
|
downloader = ZurroseDownloader.new(@options, @options[:transfer_dat])
|
238
248
|
xml = downloader.download
|
249
|
+
Oddb2xml.log("zurrose xml #{xml.size} bytes")
|
239
250
|
@mutex.synchronize do
|
240
251
|
hsh = ZurroseExtractor.new(xml, @options[:extended]).to_hash
|
241
252
|
@prices = hsh
|
242
|
-
Oddb2xml.log("zurrose added #{@prices.size} prices")
|
253
|
+
Oddb2xml.log("zurrose added #{@prices.size} prices from xml with #{xml.size} bytes")
|
243
254
|
end
|
244
255
|
end
|
245
256
|
when :index
|
@@ -265,8 +276,9 @@ module Oddb2xml
|
|
265
276
|
def compress
|
266
277
|
compressor = Compressor.new(prefix, @options)
|
267
278
|
files.values.each do |file|
|
268
|
-
|
269
|
-
|
279
|
+
work_file = File.join(WorkDir, file)
|
280
|
+
if File.exists?(work_file)
|
281
|
+
compressor.contents << work_file
|
270
282
|
end
|
271
283
|
end
|
272
284
|
compressor.finalize!
|
@@ -319,6 +331,9 @@ module Oddb2xml
|
|
319
331
|
end
|
320
332
|
end
|
321
333
|
end
|
334
|
+
if @options[:extended]
|
335
|
+
lines << sprintf("\tPrices zur Rose: %i", @prices.length)
|
336
|
+
end
|
322
337
|
else
|
323
338
|
{
|
324
339
|
'Betrieb' => :@companies,
|
data/lib/oddb2xml/compressor.rb
CHANGED
@@ -12,13 +12,14 @@ module Oddb2xml
|
|
12
12
|
@options = options
|
13
13
|
@options[:compress_ext] ||= 'tar.gz'
|
14
14
|
@options[:format] ||= :xml
|
15
|
-
@compress_file = "#{prefix}_#{@options[:format].to_s}_" +
|
16
|
-
|
15
|
+
@compress_file = "#{prefix}_#{@options[:format].to_s}_" + Time.now.strftime("%d.%m.%Y_%H.%M.#{@options[:compress_ext]}")
|
16
|
+
# @compress_file = File.join(WorkDir, "#{prefix}_#{@options[:format].to_s}_" +
|
17
|
+
#Time.now.strftime("%d.%m.%Y_%H.%M.#{@options[:compress_ext]}"))
|
17
18
|
@contents = []
|
18
19
|
super()
|
19
20
|
end
|
20
21
|
def finalize!
|
21
|
-
if @contents.empty?
|
22
|
+
if @contents.empty? and @contents.size == 0
|
22
23
|
return false
|
23
24
|
end
|
24
25
|
begin
|
@@ -34,13 +35,12 @@ module Oddb2xml
|
|
34
35
|
end
|
35
36
|
end
|
36
37
|
end
|
37
|
-
if File.exists? @compress_file
|
38
|
+
if File.exists? @compress_file and not defined?(Rspec)
|
38
39
|
@contents.each do |file|
|
39
|
-
|
40
|
+
FileUtils.rm(file)
|
40
41
|
end
|
41
42
|
end
|
42
|
-
|
43
|
-
Oddb2xml.download_finished(@compress_file)
|
43
|
+
rescue Errno::ENOENT, StandardError => e
|
44
44
|
return false
|
45
45
|
end
|
46
46
|
return true
|
data/lib/oddb2xml/downloader.rb
CHANGED
@@ -8,8 +8,11 @@ module Oddb2xml
|
|
8
8
|
module DownloadMethod
|
9
9
|
private
|
10
10
|
def download_as(file, option='r')
|
11
|
-
|
11
|
+
tempFile = File.join(WorkDir, File.basename(file))
|
12
|
+
file2save = File.join(Downloads, File.basename(file))
|
13
|
+
Oddb2xml.log "download_as file #{file2save} via #{tempFile} from #{@url}"
|
12
14
|
data = nil
|
15
|
+
FileUtils.rm_f(tempFile, :verbose => false)
|
13
16
|
if Oddb2xml.skip_download(file)
|
14
17
|
io = File.open(file, option)
|
15
18
|
data = io.read
|
@@ -24,7 +27,7 @@ module Oddb2xml
|
|
24
27
|
retrievable? ? retry : raise
|
25
28
|
ensure
|
26
29
|
io.close if io and !io.closed? # win
|
27
|
-
Oddb2xml.download_finished(
|
30
|
+
Oddb2xml.download_finished(tempFile)
|
28
31
|
end
|
29
32
|
end
|
30
33
|
return data
|
@@ -63,12 +66,29 @@ module Oddb2xml
|
|
63
66
|
false
|
64
67
|
end
|
65
68
|
end
|
66
|
-
def
|
69
|
+
def read_xml_from_zip(target, zipfile)
|
70
|
+
Oddb2xml.log "read_xml_from_zip target is #{target} zip: #{zipfile} #{File.exists?(zipfile)}"
|
71
|
+
if Oddb2xml.skip_download?
|
72
|
+
entry = nil
|
73
|
+
Dir.glob(File.join(Downloads, '*')).each { |name| if target.match(name) then entry = name; break end }
|
74
|
+
if entry
|
75
|
+
dest = "#{Downloads}/#{File.basename(entry)}"
|
76
|
+
if File.exists?(dest)
|
77
|
+
Oddb2xml.log "read_xml_from_zip return content of #{dest} #{File.size(dest)} bytes "
|
78
|
+
return IO.read(dest)
|
79
|
+
else
|
80
|
+
Oddb2xml.log "read_xml_from_zip could not read #{dest}"
|
81
|
+
end
|
82
|
+
else
|
83
|
+
Oddb2xml.log "read_xml_from_zip could not find #{target.to_s}"
|
84
|
+
end
|
85
|
+
end
|
67
86
|
xml = ''
|
68
87
|
if RUBY_PLATFORM =~ /mswin|mingw|bccwin|cygwin/i
|
69
88
|
Zip::File.open(zipfile) do |zipFile|
|
70
89
|
zipFile.each do |entry|
|
71
90
|
if entry.name =~ target
|
91
|
+
Oddb2xml.log "read_xml_from_zip reading #{__LINE__}: #{entry.name}"
|
72
92
|
io = entry.get_input_stream
|
73
93
|
until io.eof?
|
74
94
|
bytes = io.read(1024)
|
@@ -76,13 +96,20 @@ module Oddb2xml
|
|
76
96
|
bytes = nil
|
77
97
|
end
|
78
98
|
io.close if io.respond_to?(:close)
|
99
|
+
dest = "#{Downloads}/#{File.basename(target)}"
|
100
|
+
File.open(dest, 'w+') { |f| f.write xml }
|
101
|
+
Oddb2xml.log "read_xml_from_zip saved as #{dest}"
|
79
102
|
end
|
80
103
|
end
|
81
104
|
end
|
82
105
|
else
|
83
106
|
Zip::File.foreach(zipfile) do |entry|
|
84
107
|
if entry.name =~ target
|
108
|
+
Oddb2xml.log "read_xml_from_zip #{__LINE__}: reading #{entry.name}"
|
109
|
+
dest = "#{Downloads}/#{File.basename(entry.name)}"
|
85
110
|
entry.get_input_stream { |io| xml = io.read }
|
111
|
+
File.open(dest, 'w+') { |f| f.write xml }
|
112
|
+
Oddb2xml.log "read_xml_from_zip saved as #{dest}"
|
86
113
|
end
|
87
114
|
end
|
88
115
|
end
|
@@ -123,9 +150,12 @@ module Oddb2xml
|
|
123
150
|
@url ||= 'http://zurrose.com/fileadmin/main/lib/download.php?file=/fileadmin/user_upload/downloads/ProduktUpdate/IGM11_mit_MwSt/Vollstamm/transfer.dat'
|
124
151
|
unless @url =~ /^http/
|
125
152
|
io = File.open(@url, 'r:iso-8859-1:utf-8')
|
126
|
-
io.read
|
153
|
+
content = io.read
|
154
|
+
Oddb2xml.log("ZurroseDownloader #{__LINE__} download #{@url} @url returns #{content.bytes}")
|
155
|
+
content
|
127
156
|
else
|
128
|
-
|
157
|
+
Oddb2xml.log("ZurroseDownloader #{__LINE__} download #{@url} @url")
|
158
|
+
download_as('zurrose_transfer.dat', 'r:iso-8859-1:utf-8')
|
129
159
|
end
|
130
160
|
end
|
131
161
|
end
|
@@ -154,30 +184,23 @@ module Oddb2xml
|
|
154
184
|
@url ||= 'http://bag.e-mediat.net/SL2007.Web.External/File.axd?file=XMLPublications.zip'
|
155
185
|
end
|
156
186
|
def download
|
157
|
-
file = 'XMLPublications.zip'
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
if @options[:skip_download]
|
170
|
-
FileUtils.makedirs(Backup)
|
171
|
-
outfile = File.join(Backup, 'Preparations.xml')
|
172
|
-
Oddb2xml.log "Downloader saving outfile #{outfile} for #{self.class}"
|
173
|
-
File.open(outfile, 'w+') { |file| file.write inhalt}
|
187
|
+
file = File.join(WorkDir, 'XMLPublications.zip')
|
188
|
+
Oddb2xml.log "BagXmlDownloader #{__LINE__}: #{file}"
|
189
|
+
unless Oddb2xml.skip_download(file)
|
190
|
+
Oddb2xml.log "BagXmlDownloader #{__LINE__}: #{file}"
|
191
|
+
begin
|
192
|
+
response = @agent.get(@url)
|
193
|
+
response.save_as(file)
|
194
|
+
response = nil # win
|
195
|
+
rescue Timeout::Error, Errno::ETIMEDOUT
|
196
|
+
retrievable? ? retry : raise
|
197
|
+
ensure
|
198
|
+
Oddb2xml.download_finished(file)
|
174
199
|
end
|
175
|
-
inhalt
|
176
|
-
rescue Timeout::Error, Errno::ETIMEDOUT
|
177
|
-
retrievable? ? retry : raise
|
178
|
-
ensure
|
179
|
-
Oddb2xml.download_finished(file)
|
180
200
|
end
|
201
|
+
content = read_xml_from_zip(/Preparations.xml/, File.join(Downloads, File.basename(file)))
|
202
|
+
FileUtils.rm_f(file, :verbose => false) unless defined?(Rspec)
|
203
|
+
content
|
181
204
|
end
|
182
205
|
end
|
183
206
|
class SwissIndexDownloader < Downloader
|
@@ -199,9 +222,10 @@ module Oddb2xml
|
|
199
222
|
end
|
200
223
|
def download
|
201
224
|
begin
|
202
|
-
|
203
|
-
|
204
|
-
|
225
|
+
filename = "swissindex_#{@type}_#{@lang}.xml"
|
226
|
+
file2save = File.join(Downloads, "swissindex_#{@type}_#{@lang}.xml")
|
227
|
+
return IO.read(file2save) if Oddb2xml.skip_download? and File.exists?(file2save)
|
228
|
+
FileUtils.rm_f(file2save, :verbose => false)
|
205
229
|
soap = <<XML
|
206
230
|
<?xml version="1.0" encoding="utf-8"?>
|
207
231
|
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
@@ -214,12 +238,8 @@ XML
|
|
214
238
|
if response.success?
|
215
239
|
if xml = response.to_xml
|
216
240
|
response = nil # win
|
217
|
-
|
218
|
-
|
219
|
-
FileUtils.makedirs(File.dirname(file2save)) unless File.directory?(File.dirname(file2save))
|
220
|
-
File.open(file2save, 'w+') { |file| file.puts xml }
|
221
|
-
end
|
222
|
-
return xml
|
241
|
+
FileUtils.makedirs(Downloads)
|
242
|
+
File.open(file2save, 'w+') { |file| file.write xml }
|
223
243
|
else
|
224
244
|
# received broken data or internal error
|
225
245
|
raise StandardError
|
@@ -232,6 +252,7 @@ XML
|
|
232
252
|
rescue Timeout::Error, Errno::ETIMEDOUT
|
233
253
|
retrievable? ? retry : raise
|
234
254
|
end
|
255
|
+
xml
|
235
256
|
end
|
236
257
|
end
|
237
258
|
class SwissmedicDownloader < Downloader
|
@@ -257,11 +278,9 @@ XML
|
|
257
278
|
page = @agent.get(@url)
|
258
279
|
if link_node = page.search(@xpath).first
|
259
280
|
link = Mechanize::Page::Link.new(link_node, @agent, page)
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
response = nil # win
|
264
|
-
end
|
281
|
+
response = link.click
|
282
|
+
response.save_as(file)
|
283
|
+
response = nil # win
|
265
284
|
end
|
266
285
|
return File.expand_path(file)
|
267
286
|
rescue Timeout::Error, Errno::ETIMEDOUT
|
@@ -269,6 +288,7 @@ XML
|
|
269
288
|
ensure
|
270
289
|
Oddb2xml.download_finished(file, false)
|
271
290
|
end
|
291
|
+
return File.expand_path(file)
|
272
292
|
end
|
273
293
|
end
|
274
294
|
class SwissmedicInfoDownloader < Downloader
|
@@ -278,32 +298,31 @@ XML
|
|
278
298
|
@url ||= "http://download.swissmedicinfo.ch/Accept.aspx?ReturnUrl=%2f"
|
279
299
|
end
|
280
300
|
def download
|
281
|
-
file = "swissmedic_info.zip"
|
301
|
+
file = File.join(Downloads, "swissmedic_info.zip")
|
302
|
+
FileUtils.rm_f(file, :verbose => false) unless Oddb2xml.skip_download?
|
282
303
|
begin
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
response = form.submit(bttn)
|
292
|
-
end
|
293
|
-
end
|
294
|
-
if response
|
295
|
-
response.save_as(file)
|
296
|
-
response = nil # win
|
304
|
+
response = nil
|
305
|
+
if home = @agent.get(@url)
|
306
|
+
form = home.form_with(:id => 'Form1')
|
307
|
+
bttn = form.button_with(:name => 'ctl00$MainContent$btnOK')
|
308
|
+
if page = form.submit(bttn)
|
309
|
+
form = page.form_with(:id => 'Form1')
|
310
|
+
bttn = form.button_with(:name => 'ctl00$MainContent$BtnYes')
|
311
|
+
response = form.submit(bttn)
|
297
312
|
end
|
298
313
|
end
|
299
|
-
|
314
|
+
if response
|
315
|
+
response.save_as(file)
|
316
|
+
response = nil # win
|
317
|
+
end
|
300
318
|
rescue Timeout::Error, Errno::ETIMEDOUT
|
301
319
|
retrievable? ? retry : raise
|
302
320
|
rescue NoMethodError
|
303
321
|
# pass
|
304
322
|
ensure
|
305
323
|
Oddb2xml.download_finished(file)
|
306
|
-
end
|
324
|
+
end unless File.exists?(file)
|
325
|
+
read_xml_from_zip(/^AipsDownload_/iu, file)
|
307
326
|
end
|
308
327
|
end
|
309
328
|
end
|