bol 0.0.1.beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/CHANGELOG.md +1 -0
- data/Gemfile +2 -0
- data/Guardfile +7 -0
- data/LICENSE.md +19 -0
- data/README.md +170 -0
- data/Rakefile +6 -0
- data/bol.gemspec +25 -0
- data/lib/bol.rb +52 -0
- data/lib/bol/category.rb +5 -0
- data/lib/bol/configuration.rb +55 -0
- data/lib/bol/parser.rb +34 -0
- data/lib/bol/parsers.rb +7 -0
- data/lib/bol/parsers/categories.rb +17 -0
- data/lib/bol/parsers/products.rb +34 -0
- data/lib/bol/parsers/refinements.rb +24 -0
- data/lib/bol/product.rb +51 -0
- data/lib/bol/proxy.rb +37 -0
- data/lib/bol/query.rb +79 -0
- data/lib/bol/refinement.rb +5 -0
- data/lib/bol/refinement_group.rb +5 -0
- data/lib/bol/request.rb +90 -0
- data/lib/bol/requests.rb +7 -0
- data/lib/bol/requests/list.rb +26 -0
- data/lib/bol/requests/product.rb +16 -0
- data/lib/bol/requests/search.rb +11 -0
- data/lib/bol/scope.rb +55 -0
- data/lib/bol/signature.rb +44 -0
- data/lib/bol/version.rb +3 -0
- data/spec/bol/configuration_spec.rb +46 -0
- data/spec/bol/parsers/products_spec.rb +77 -0
- data/spec/bol/product_spec.rb +71 -0
- data/spec/bol/proxy_spec.rb +34 -0
- data/spec/bol/query_spec.rb +129 -0
- data/spec/bol/request_spec.rb +119 -0
- data/spec/bol/scope_spec.rb +84 -0
- data/spec/bol/signature_spec.rb +27 -0
- data/spec/bol_spec.rb +55 -0
- data/spec/fixtures/categorylist.xml +232 -0
- data/spec/fixtures/productlists.xml +164 -0
- data/spec/fixtures/products.xml +72 -0
- data/spec/fixtures/searchproducts-music.xml +108 -0
- data/spec/fixtures/searchproducts.xml +322 -0
- data/spec/spec_helper.rb +16 -0
- data/spec/support.rb +6 -0
- metadata +177 -0
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bol::Scope do
|
4
|
+
describe 'combining categories' do
|
5
|
+
it 'should add two categories for a combined scope' do
|
6
|
+
cat = Bol::Scope.new(1) + Bol::Scope.new(2)
|
7
|
+
cat.ids.should == [1, 2]
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should not duplicate IDs when adding' do
|
11
|
+
cat = Bol::Scope.new(1) + Bol::Scope.new(2) + Bol::Scope.new(2)
|
12
|
+
cat.ids.should == [1,2]
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should subtract two categories to reduce scope' do
|
16
|
+
a = Bol::Scope.new(1) + Bol::Scope.new(2)
|
17
|
+
b = Bol::Scope.new(2)
|
18
|
+
(a - b).ids.should == [1]
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should join ids in a string' do
|
22
|
+
Bol::Scope.new([1,2,3]).to_s.should == '1+2+3'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#search' do
|
27
|
+
it 'should default to root category from the class' do
|
28
|
+
query = Bol::Scope.new.search 'foo'
|
29
|
+
query.should be_instance_of Bol::Proxy
|
30
|
+
query.category_id.should == '0'
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should set query term' do
|
34
|
+
Bol::Requests::Search.should_receive(:new).with(instance_of(Bol::Query)).and_return(stub(proxy: nil, query: nil))
|
35
|
+
Bol::Scope.new.search 'foo'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'default category' do
|
40
|
+
it 'should set request category scope to 0' do
|
41
|
+
Bol::Scope.new.ids.should == [0]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe 'lists' do
|
46
|
+
let(:cat) { Bol::Scope.new.top_products }
|
47
|
+
|
48
|
+
it 'should create a list request' do
|
49
|
+
cat.should be_instance_of Bol::Proxy
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should be scoped to the category' do
|
53
|
+
cat.category_id.should == '0'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe 'categories' do
|
58
|
+
let(:cat) { Bol::Scope.new.categories }
|
59
|
+
|
60
|
+
it 'should create category list request' do
|
61
|
+
cat.request.should be_instance_of Bol::Requests::List
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'should use a query with a param to limit to categories' do
|
65
|
+
cat.query.params[:includeCategories].should == true
|
66
|
+
cat.query.params[:includeProducts].should == false
|
67
|
+
cat.query.params[:includeRefinements].should == false
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe 'refinements' do
|
72
|
+
let(:cat) { Bol::Scope.new.refinements }
|
73
|
+
|
74
|
+
it 'should create refinement list request' do
|
75
|
+
cat.request.should be_instance_of Bol::Requests::List
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'should use a query with a param to limit to refinements' do
|
79
|
+
cat.query.params[:includeCategories].should == false
|
80
|
+
cat.query.params[:includeProducts].should == false
|
81
|
+
cat.query.params[:includeRefinements].should == true
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bol::Signature do
|
4
|
+
let(:subject) { described_class.new('date', 'path', {}) }
|
5
|
+
|
6
|
+
def configure
|
7
|
+
Bol.configuration.access_key = 'foo'
|
8
|
+
Bol.configuration.secret = 'bar'
|
9
|
+
end
|
10
|
+
|
11
|
+
before { configure }
|
12
|
+
|
13
|
+
it 'should return a string' do
|
14
|
+
subject.generate.should be_instance_of(String)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should validate configuration' do
|
18
|
+
Bol.reset_configuration
|
19
|
+
expect {
|
20
|
+
described_class.new(1, 2, {})
|
21
|
+
}.to raise_error(Bol::ConfigurationError)
|
22
|
+
configure
|
23
|
+
expect {
|
24
|
+
described_class.new(1, 2, {})
|
25
|
+
}.not_to raise_error
|
26
|
+
end
|
27
|
+
end
|
data/spec/bol_spec.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bol do
|
4
|
+
describe '#configure' do
|
5
|
+
it 'should create configuration object' do
|
6
|
+
Bol.configure access_key: 'foo'
|
7
|
+
Bol.configuration.access_key.should == 'foo'
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should reset configuration' do
|
11
|
+
Bol.configure access_key: 'foo'
|
12
|
+
expect {
|
13
|
+
Bol.reset_configuration
|
14
|
+
}.to change {
|
15
|
+
Bol.configuration.access_key
|
16
|
+
}.to nil
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should yield config object without argument' do
|
20
|
+
Bol.configure do |c|
|
21
|
+
c.should == Bol.configuration
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should raise with non-hash argument' do
|
26
|
+
expect { Bol.configure 'foo' }.to raise_error ArgumentError
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should not yield with argument' do
|
30
|
+
Bol.configure(access_key: 'foo') { |c| flunk }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe 'shortcut methods' do
|
35
|
+
it 'should delegate search to a new scope object' do
|
36
|
+
Bol::Scope.any_instance.should_receive(:search).with('foo')
|
37
|
+
Bol.search('foo')
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should delegate categories to a new scope object' do
|
41
|
+
Bol::Scope.any_instance.should_receive(:categories)
|
42
|
+
Bol.categories
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should delegate find to a new scope object' do
|
46
|
+
Bol::Scope.any_instance.should_receive(:search).with(1)
|
47
|
+
Bol.search(1)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should delegate refinements to a new scope object' do
|
51
|
+
Bol::Scope.any_instance.should_receive(:refinements)
|
52
|
+
Bol.refinements
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,232 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
2
|
+
<CategoryListResponse xmlns="http://openapi.bol.com/openapi-3.0.0">
|
3
|
+
<SessionId>2957E300-B2AC-4749-99C5-12831D6286A2</SessionId>
|
4
|
+
<Category>
|
5
|
+
<Id>1</Id>
|
6
|
+
<Name>categorieen</Name>
|
7
|
+
<CategoryRefinement>
|
8
|
+
<Id>1430</Id>
|
9
|
+
<Name>Nederlandse boeken</Name>
|
10
|
+
</CategoryRefinement>
|
11
|
+
<CategoryRefinement>
|
12
|
+
<Id>3131</Id>
|
13
|
+
<Name>Buitenlandse boeken</Name>
|
14
|
+
</CategoryRefinement>
|
15
|
+
</Category>
|
16
|
+
<Category>
|
17
|
+
<Id>1312</Id>
|
18
|
+
<Name>taal</Name>
|
19
|
+
<CategoryRefinement>
|
20
|
+
<Id>8293</Id>
|
21
|
+
<Name>Nederlandse boeken</Name>
|
22
|
+
</CategoryRefinement>
|
23
|
+
<CategoryRefinement>
|
24
|
+
<Id>8292</Id>
|
25
|
+
<Name>Engelse boeken</Name>
|
26
|
+
</CategoryRefinement>
|
27
|
+
<CategoryRefinement>
|
28
|
+
<Id>8296</Id>
|
29
|
+
<Name>Duitse boeken</Name>
|
30
|
+
</CategoryRefinement>
|
31
|
+
<CategoryRefinement>
|
32
|
+
<Id>8294</Id>
|
33
|
+
<Name>Franse boeken</Name>
|
34
|
+
</CategoryRefinement>
|
35
|
+
<CategoryRefinement>
|
36
|
+
<Id>8298</Id>
|
37
|
+
<Name>Spaanse boeken</Name>
|
38
|
+
</CategoryRefinement>
|
39
|
+
<CategoryRefinement>
|
40
|
+
<Id>8297</Id>
|
41
|
+
<Name>Turkse boeken</Name>
|
42
|
+
</CategoryRefinement>
|
43
|
+
</Category>
|
44
|
+
<Category>
|
45
|
+
<Id>4852</Id>
|
46
|
+
<Name>prijs</Name>
|
47
|
+
<CategoryRefinement>
|
48
|
+
<Id>7143</Id>
|
49
|
+
<Name>Tot € 10</Name>
|
50
|
+
</CategoryRefinement>
|
51
|
+
<CategoryRefinement>
|
52
|
+
<Id>4854</Id>
|
53
|
+
<Name>Tot € 20</Name>
|
54
|
+
</CategoryRefinement>
|
55
|
+
<CategoryRefinement>
|
56
|
+
<Id>4855</Id>
|
57
|
+
<Name>Tot € 30</Name>
|
58
|
+
</CategoryRefinement>
|
59
|
+
<CategoryRefinement>
|
60
|
+
<Id>4856</Id>
|
61
|
+
<Name>Tot € 40</Name>
|
62
|
+
</CategoryRefinement>
|
63
|
+
<CategoryRefinement>
|
64
|
+
<Id>4857</Id>
|
65
|
+
<Name>Tot € 50</Name>
|
66
|
+
</CategoryRefinement>
|
67
|
+
<CategoryRefinement>
|
68
|
+
<Id>4858</Id>
|
69
|
+
<Name>Tot € 100</Name>
|
70
|
+
</CategoryRefinement>
|
71
|
+
<CategoryRefinement>
|
72
|
+
<Id>5014</Id>
|
73
|
+
<Name>Tot € 200</Name>
|
74
|
+
</CategoryRefinement>
|
75
|
+
<CategoryRefinement>
|
76
|
+
<Id>4860</Id>
|
77
|
+
<Name>Tot € 300</Name>
|
78
|
+
</CategoryRefinement>
|
79
|
+
<CategoryRefinement>
|
80
|
+
<Id>4861</Id>
|
81
|
+
<Name>Tot € 400</Name>
|
82
|
+
</CategoryRefinement>
|
83
|
+
<CategoryRefinement>
|
84
|
+
<Id>4862</Id>
|
85
|
+
<Name>Tot € 500</Name>
|
86
|
+
</CategoryRefinement>
|
87
|
+
<CategoryRefinement>
|
88
|
+
<Id>4863</Id>
|
89
|
+
<Name>Tot € 750</Name>
|
90
|
+
</CategoryRefinement>
|
91
|
+
<CategoryRefinement>
|
92
|
+
<Id>4864</Id>
|
93
|
+
<Name>Tot € 1000</Name>
|
94
|
+
</CategoryRefinement>
|
95
|
+
<CategoryRefinement>
|
96
|
+
<Id>4865</Id>
|
97
|
+
<Name>Tot € 1500</Name>
|
98
|
+
</CategoryRefinement>
|
99
|
+
<CategoryRefinement>
|
100
|
+
<Id>4866</Id>
|
101
|
+
<Name>Tot € 2000</Name>
|
102
|
+
</CategoryRefinement>
|
103
|
+
<CategoryRefinement>
|
104
|
+
<Id>7346</Id>
|
105
|
+
<Name>Tot € 2500</Name>
|
106
|
+
</CategoryRefinement>
|
107
|
+
<CategoryRefinement>
|
108
|
+
<Id>4867</Id>
|
109
|
+
<Name>€ 2500 en meer</Name>
|
110
|
+
</CategoryRefinement>
|
111
|
+
</Category>
|
112
|
+
<Category>
|
113
|
+
<Id>1317</Id>
|
114
|
+
<Name>onderwerp</Name>
|
115
|
+
<CategoryRefinement>
|
116
|
+
<Id>4294965600</Id>
|
117
|
+
<Name>2012</Name>
|
118
|
+
</CategoryRefinement>
|
119
|
+
<CategoryRefinement>
|
120
|
+
<Id>4294965780</Id>
|
121
|
+
<Name>De beste luisterboeken voor in de file</Name>
|
122
|
+
</CategoryRefinement>
|
123
|
+
<CategoryRefinement>
|
124
|
+
<Id>4294966229</Id>
|
125
|
+
<Name>De leukste luisterboeken voor op vakantie</Name>
|
126
|
+
</CategoryRefinement>
|
127
|
+
<CategoryRefinement>
|
128
|
+
<Id>4294966964</Id>
|
129
|
+
<Name>Economie & Management</Name>
|
130
|
+
</CategoryRefinement>
|
131
|
+
<CategoryRefinement>
|
132
|
+
<Id>4294966963</Id>
|
133
|
+
<Name>Gedrag & Maatschappij</Name>
|
134
|
+
</CategoryRefinement>
|
135
|
+
<CategoryRefinement>
|
136
|
+
<Id>4294966967</Id>
|
137
|
+
<Name>Gezondheidszorg</Name>
|
138
|
+
</CategoryRefinement>
|
139
|
+
<CategoryRefinement>
|
140
|
+
<Id>4294965025</Id>
|
141
|
+
<Name>Girl's only</Name>
|
142
|
+
</CategoryRefinement>
|
143
|
+
<CategoryRefinement>
|
144
|
+
<Id>4294965588</Id>
|
145
|
+
<Name>Happinez</Name>
|
146
|
+
</CategoryRefinement>
|
147
|
+
<CategoryRefinement>
|
148
|
+
<Id>4294964522</Id>
|
149
|
+
<Name>Jaarkalenders</Name>
|
150
|
+
</CategoryRefinement>
|
151
|
+
<CategoryRefinement>
|
152
|
+
<Id>4294964509</Id>
|
153
|
+
<Name>Je eigen lichaam</Name>
|
154
|
+
</CategoryRefinement>
|
155
|
+
<CategoryRefinement>
|
156
|
+
<Id>4294965319</Id>
|
157
|
+
<Name>Kalenders</Name>
|
158
|
+
</CategoryRefinement>
|
159
|
+
<CategoryRefinement>
|
160
|
+
<Id>4294966309</Id>
|
161
|
+
<Name>Koopjeskelder uitverkoop</Name>
|
162
|
+
</CategoryRefinement>
|
163
|
+
<CategoryRefinement>
|
164
|
+
<Id>4294965337</Id>
|
165
|
+
<Name>Luchtfotoboeken</Name>
|
166
|
+
</CategoryRefinement>
|
167
|
+
<CategoryRefinement>
|
168
|
+
<Id>4294965561</Id>
|
169
|
+
<Name>Luisterboekenvoordeel!</Name>
|
170
|
+
</CategoryRefinement>
|
171
|
+
<CategoryRefinement>
|
172
|
+
<Id>4294966965</Id>
|
173
|
+
<Name>Overige uittreksels</Name>
|
174
|
+
</CategoryRefinement>
|
175
|
+
<CategoryRefinement>
|
176
|
+
<Id>4294966948</Id>
|
177
|
+
<Name>Rechten</Name>
|
178
|
+
</CategoryRefinement>
|
179
|
+
<CategoryRefinement>
|
180
|
+
<Id>4294965978</Id>
|
181
|
+
<Name>Roman</Name>
|
182
|
+
</CategoryRefinement>
|
183
|
+
<CategoryRefinement>
|
184
|
+
<Id>4294966940</Id>
|
185
|
+
<Name>Scandinavische thrillers</Name>
|
186
|
+
</CategoryRefinement>
|
187
|
+
<CategoryRefinement>
|
188
|
+
<Id>4294966380</Id>
|
189
|
+
<Name>Scheurkalenders</Name>
|
190
|
+
</CategoryRefinement>
|
191
|
+
<CategoryRefinement>
|
192
|
+
<Id>4294964608</Id>
|
193
|
+
<Name>Seizoenen</Name>
|
194
|
+
</CategoryRefinement>
|
195
|
+
<CategoryRefinement>
|
196
|
+
<Id>4294965664</Id>
|
197
|
+
<Name>Spanning</Name>
|
198
|
+
</CategoryRefinement>
|
199
|
+
<CategoryRefinement>
|
200
|
+
<Id>4294965612</Id>
|
201
|
+
<Name>Techniek & Informatica</Name>
|
202
|
+
</CategoryRefinement>
|
203
|
+
<CategoryRefinement>
|
204
|
+
<Id>4294964491</Id>
|
205
|
+
<Name>Vanaf 24 maanden</Name>
|
206
|
+
</CategoryRefinement>
|
207
|
+
<CategoryRefinement>
|
208
|
+
<Id>4294965320</Id>
|
209
|
+
<Name>Verjaardagskalenders</Name>
|
210
|
+
</CategoryRefinement>
|
211
|
+
<CategoryRefinement>
|
212
|
+
<Id>4294966079</Id>
|
213
|
+
<Name>Voordelige bestsellers</Name>
|
214
|
+
</CategoryRefinement>
|
215
|
+
</Category>
|
216
|
+
<Category>
|
217
|
+
<Id>7287</Id>
|
218
|
+
<Name>aanraders</Name>
|
219
|
+
<CategoryRefinement>
|
220
|
+
<Id>7288</Id>
|
221
|
+
<Name>Te reserveren</Name>
|
222
|
+
</CategoryRefinement>
|
223
|
+
<CategoryRefinement>
|
224
|
+
<Id>7290</Id>
|
225
|
+
<Name>Bestbeoordeeld</Name>
|
226
|
+
</CategoryRefinement>
|
227
|
+
<CategoryRefinement>
|
228
|
+
<Id>7289</Id>
|
229
|
+
<Name>Nieuw verschenen</Name>
|
230
|
+
</CategoryRefinement>
|
231
|
+
</Category>
|
232
|
+
</CategoryListResponse>
|
@@ -0,0 +1,164 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
2
|
+
<ProductListResponse xmlns="http://openapi.bol.com/openapi-3.0.0">
|
3
|
+
<SessionId>BEFA78E4-FA97-46E6-8C82-1792F485B16C</SessionId>
|
4
|
+
<TotalResultSize>12128</TotalResultSize>
|
5
|
+
<Product>
|
6
|
+
<Id>1001004011242363</Id>
|
7
|
+
<Title>In mijn dromen</Title>
|
8
|
+
<Type>book</Type>
|
9
|
+
<Publisher>Anthos</Publisher>
|
10
|
+
<ShortDescription>Rosalie heeft een kapperszaak in de Pijp in
|
11
|
+
Amsterdam en is getrouwd met de zakelijke en ordelijke Jeroen.
|
12
|
+
Een vakantie naar Marrakech zou hun relatie weer passie moeten
|
13
|
+
geven maar de reis eindigt in een nachtmerrie. Jeroen wil geen
|
14
|
+
gehoor geven aan Rosalies slechte voorgevoel en het vliegtuig
|
15
|
+
waarin Jeroen alleen terugkeert stort neer. Terug in
|
16
|
+
Amsterdam beseft Rosalie dat ze haar voorspellende dromen niet
|
17
|
+
langer kan negeren. Haar besluit om de politie in te lichten
|
18
|
+
over haar vermoeden dat het v...</ShortDescription>
|
19
|
+
<LongDescription>Rosalie heeft een kapperszaak in de Pijp in
|
20
|
+
Amsterdam en is getrouwd met de zakelijke en ordelijke Jeroen.
|
21
|
+
Een vakantie naar Marrakech zou hun relatie weer passie moeten
|
22
|
+
geven maar de reis eindigt in een nachtmerrie. Jeroen wil geen
|
23
|
+
gehoor geven aan Rosalies slechte voorgevoel en het vliegtuig
|
24
|
+
waarin Jeroen alleen terugkeert stort neer.<br/ >Terug in
|
25
|
+
Amsterdam beseft Rosalie dat ze haar voorspellende dromen niet
|
26
|
+
langer kan negeren. Haar besluit om de politie in te lichten
|
27
|
+
over haar vermoeden dat het vliegtuigongeluk geen ongeluk was,
|
28
|
+
maakt haar echter alleen maar wanhopiger, want men neemt haar
|
29
|
+
niet serieus. Intussen probeert ze met behulp van haar vrienden
|
30
|
+
en collega"s de draad van het leven weer op te pakken, maar
|
31
|
+
haar voorspellende dromen vergemakkelijken haar situatie
|
32
|
+
niet</LongDescription>
|
33
|
+
<ReleaseDate>2011-06-23+02:00</ReleaseDate>
|
34
|
+
<Ean>9789041416841</Ean>
|
35
|
+
<BindingCode>ING</BindingCode>
|
36
|
+
<BindingDescription>Paperback</BindingDescription>
|
37
|
+
<LanguageCode>nl</LanguageCode>
|
38
|
+
<LanguageDescription>Nederlands</LanguageDescription>
|
39
|
+
<Offers>
|
40
|
+
<Offer>
|
41
|
+
<State>new</State>
|
42
|
+
<Price>19.95</Price>
|
43
|
+
<AvailabilityCode>170</AvailabilityCode>
|
44
|
+
<AvailabilityDescription>Op werkdagen voor 22.30 uur
|
45
|
+
besteld, morgen in huis</AvailabilityDescription>
|
46
|
+
<Supplier>
|
47
|
+
<Id>-1</Id>
|
48
|
+
<Name>bol.com</Name>
|
49
|
+
</Supplier>
|
50
|
+
</Offer>
|
51
|
+
</Offers>
|
52
|
+
<Urls>
|
53
|
+
<Main>
|
54
|
+
http://www.bol.com/nl/p/nederlandse-boeken/in-mijn-dromen/1001004011242363/index.html</Main>
|
55
|
+
</Urls>
|
56
|
+
<Authors>
|
57
|
+
<Author>
|
58
|
+
<Id>55945</Id>
|
59
|
+
<Name>Simone van der Vlugt</Name>
|
60
|
+
</Author>
|
61
|
+
</Authors>
|
62
|
+
<Images>
|
63
|
+
<ExtraSmall>
|
64
|
+
http://s-bol.com/imgbase0/imagebase/mini/FC/3/6/3/2/1001004011242363.jpg</ExtraSmall>
|
65
|
+
<Small>
|
66
|
+
http://s-bol.com/imgbase0/imagebase/tout/FC/3/6/3/2/1001004011242363.jpg</Small>
|
67
|
+
<Medium>
|
68
|
+
http://s-bol.com/imgbase0/imagebase/thumb/FC/3/6/3/2/1001004011242363.jpg</Medium>
|
69
|
+
<Large>
|
70
|
+
http://s-bol.com/imgbase0/imagebase/regular/FC/3/6/3/2/1001004011242363.jpg</Large>
|
71
|
+
<ExtraLarge>
|
72
|
+
http://s-bol.com/imgbase0/imagebase/large/FC/3/6/3/2/1001004011242363.jpg</ExtraLarge>
|
73
|
+
</Images>
|
74
|
+
</Product>
|
75
|
+
<Product>
|
76
|
+
<Id>1001004011459347</Id>
|
77
|
+
<Title>Kort</Title>
|
78
|
+
<Type>book</Type>
|
79
|
+
<Publisher>Bezige Bij B.V., Uitgeverij De</Publisher>
|
80
|
+
<ShortDescription>Tomas Ross is al meer dan dertig jaar een van
|
81
|
+
de meest toonaangevende thrillerauteurs in ons land. Hij is de
|
82
|
+
Godfather van de Nederlandse faction; in zijn spannende en
|
83
|
+
gedurfde thrillers balanceert hij op de scheidslijn tussen feit
|
84
|
+
en fictie. Vele politieke kwesties nam hij al onder
|
85
|
+
vuur en ook het koningshuis ontkomt niet aan zijn kritische oog
|
86
|
+
en scherpe pen. In Kort zijn twintig van Ross beste
|
87
|
+
verhalen voor het eerst gebundeld in een
|
88
|
+
uitgave. Twintig verhalen over kleine criminaliteit en
|
89
|
+
georganiseerde misdaad, de bvd en het koningshuis, stom toeval
|
90
|
+
en het werk van een meesterbrein. Twintig verhalen die waar
|
91
|
+
gebeurd (hadden kunnen) zijn. Een meesterproef van een
|
92
|
+
schrijver op de toppen van zijn talent.</ShortDescription>
|
93
|
+
<LongDescription>Tomas Ross is al meer dan dertig jaar een van
|
94
|
+
de meest toonaangevende thrillerauteurs in ons land. Hij is de
|
95
|
+
Godfather van de Nederlandse faction; in zijn spannende en
|
96
|
+
gedurfde thrillers balanceert hij op de scheidslijn tussen feit
|
97
|
+
en fictie. Vele politieke kwesties nam hij al onder
|
98
|
+
vuur en ook het koningshuis ontkomt niet aan zijn kritische oog
|
99
|
+
en scherpe pen. In Kort zijn twintig van Ross beste
|
100
|
+
verhalen voor het eerst gebundeld in een
|
101
|
+
uitgave. Twintig verhalen over kleine criminaliteit en
|
102
|
+
georganiseerde misdaad, de bvd en het koningshuis, stom toeval
|
103
|
+
en het werk van een meesterbrein. Twintig verhalen die waar
|
104
|
+
gebeurd (hadden kunnen) zijn. Een meesterproef van een
|
105
|
+
schrijver op de toppen van zijn talent.</LongDescription>
|
106
|
+
<ReleaseDate>2011-06-02+02:00</ReleaseDate>
|
107
|
+
<Ean>9789023472315</Ean>
|
108
|
+
<BindingCode>EBOOK</BindingCode>
|
109
|
+
<BindingDescription>Digitaal boek</BindingDescription>
|
110
|
+
<LanguageCode>nl</LanguageCode>
|
111
|
+
<LanguageDescription>Nederlands</LanguageDescription>
|
112
|
+
<FormatCode>Adobe ePub</FormatCode>
|
113
|
+
<Offers>
|
114
|
+
<Offer>
|
115
|
+
<State>new</State>
|
116
|
+
<Price>4.95</Price>
|
117
|
+
<ListPrice>7.95</ListPrice>
|
118
|
+
<AvailabilityCode>140</AvailabilityCode>
|
119
|
+
<AvailabilityDescription>Direct te
|
120
|
+
downloaden.</AvailabilityDescription>
|
121
|
+
<Supplier>
|
122
|
+
<Id>-1</Id>
|
123
|
+
<Name>bol.com</Name>
|
124
|
+
</Supplier>
|
125
|
+
</Offer>
|
126
|
+
</Offers>
|
127
|
+
<Urls>
|
128
|
+
<Main>
|
129
|
+
http://www.bol.com/nl/p/nederlandse-boeken/kort/1001004011459347/index.html</Main>
|
130
|
+
</Urls>
|
131
|
+
<Authors>
|
132
|
+
<Author>
|
133
|
+
<Id>30715</Id>
|
134
|
+
<Name>Tomas Ross</Name>
|
135
|
+
</Author>
|
136
|
+
</Authors>
|
137
|
+
<Images>
|
138
|
+
<ExtraSmall>
|
139
|
+
http://s-bol.com/imgbase0/imagebase/mini/FC/7/4/3/9/1001004011459347.jpg</ExtraSmall>
|
140
|
+
<Small>
|
141
|
+
http://s-bol.com/imgbase0/imagebase/tout/FC/7/4/3/9/1001004011459347.jpg</Small>
|
142
|
+
<Medium>
|
143
|
+
http://s-bol.com/imgbase0/imagebase/thumb/FC/7/4/3/9/1001004011459347.jpg</Medium>
|
144
|
+
<Large>
|
145
|
+
http://s-bol.com/imgbase0/imagebase/regular/FC/7/4/3/9/1001004011459347.jpg</Large>
|
146
|
+
<ExtraLarge>
|
147
|
+
http://s-bol.com/imgbase0/imagebase/large/FC/7/4/3/9/1001004011459347.jpg</ExtraLarge>
|
148
|
+
</Images>
|
149
|
+
<Promotions>
|
150
|
+
<Promotion>
|
151
|
+
<Title>Het is Zomerzotheid bij bol.com!</Title>
|
152
|
+
<Description>Ik ga met vakantie en neem
|
153
|
+
mee. Bol.com heeft de artikelen die in
|
154
|
+
elke koffer thuishoren nu extra scherp geprijsd. Bekijk
|
155
|
+
daarom nu onze vakantie-aanbiedingen en profiteer van
|
156
|
+
kortingen tot 50%.</Description>
|
157
|
+
<Url>
|
158
|
+
http://www.bol.com/nl/m/service/zomerzotheid/index.html</Url>
|
159
|
+
<UrlText>Bekijk alle actie-artikelen tijdens de
|
160
|
+
Zomerzotheid</UrlText>
|
161
|
+
</Promotion>
|
162
|
+
</Promotions>
|
163
|
+
</Product>
|
164
|
+
</ProductListResponse>
|