rakumarket 0.0.3 → 0.1.0

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.
@@ -1,449 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- module Rakumarket
3
- class ItemSearchClient < Client
4
-
5
- OPERATION = "ItemSearch"
6
- VERSION = "2010-09-15"
7
-
8
- INTERNATIONAL_DELIVERY_AREA_CODES = {
9
- "worldwide" => "ALL",
10
- "usa" => "US",
11
- "argentina" => "AR",
12
- "brazil" => "BR",
13
- "canada" => "CA",
14
- "mexico" => "MX",
15
- "austria" => "AT",
16
- "belgium" => "BE",
17
- "denmark" => "DK",
18
- "france" => "FR",
19
- "germany" => "DE",
20
- "greece" => "GR",
21
- "italy" => "IT",
22
- "morocco" => "MA",
23
- "netherlands" => "NL",
24
- "poland" => "PL",
25
- "portugal" => "PT",
26
- "russia" => "RU",
27
- "spain" => "ES",
28
- "sweden" => "SE",
29
- "switzerland" => "CH",
30
- "turkey" => "TR",
31
- "england" => "GB",
32
- "australia" => "AU",
33
- "china" => "CN",
34
- "hong kong" => "HK",
35
- "india" => "IN",
36
- "indonesia" => "ID",
37
- "south korea" => "KR",
38
- "malaysia" => "MY",
39
- "new zealand" => "NZ",
40
- "philipines" => "PH",
41
- "singapore" => "SG",
42
- "taiwan" => "TW",
43
- "thailand" => "TH",
44
- "vietnam" => "VN"
45
- }
46
-
47
- INTERNATIONAL_DELIVERY_AREA_NAMES = {
48
- "ワールドワイド" => "worldwide",
49
- "アメリカ" => "usa",
50
- "アルゼンチン" => "argentina",
51
- "ブラジル" => "brazil",
52
- "カナダ" => "canada",
53
- "メキシコ" => "mexico",
54
- "オーストリア" => "austria",
55
- "ベルギー" => "belgium",
56
- "デンマーク" => "denmark",
57
- "フランス" => "france",
58
- "ドイツ" => "germany",
59
- "ギリシャ" => "greece",
60
- "イタリア" => "italy",
61
- "モロッコ" => "morocco",
62
- "オランダ" => "netherlands",
63
- "ポーランド" => "poland",
64
- "ポルトガル" => "portugal",
65
- "ロシア" => "russia",
66
- "スペイン" => "spain",
67
- "スウェーデン" => "sweden",
68
- "スイス" => "switzerland",
69
- "トルコ" => "turkey",
70
- "英国" => "england",
71
- "オーストラリア" => "australia",
72
- "中国" => "china",
73
- "香港" => "hong kong",
74
- "インド" => "india",
75
- "インドネシア" => "indonesia",
76
- "韓国" => "south korea",
77
- "マレーシア" => "malaysia",
78
- "ニュージーランド" => "new zealand",
79
- "フィリピン" => "philipines",
80
- "シンガポール" => "singapore",
81
- "台湾" => "taiwan",
82
- "タイ" => "thailand",
83
- "ベトナム" => "vietnam",
84
- }
85
-
86
- ASURAKU_DELIVERY_AREA_CODES = {
87
- "all" => "0",
88
- "hokkaido" => "1",
89
- "tohoku" => "101",
90
- "aomori" => "2",
91
- "iwate" => "3",
92
- "miyagi" => "4",
93
- "akita" => "5",
94
- "yamagata" => "6",
95
- "fukushima" => "7",
96
- "kanto" => "102",
97
- "ibaraki" => "8",
98
- "tochigi" => "9",
99
- "gunma" => "10",
100
- "saitama" => "11",
101
- "chiba" => "12",
102
- "tokyo" => "13",
103
- "kanagawa" => "14",
104
- "koshinetsu" => "103",
105
- "niigata" => "15",
106
- "yamanashi" => "19",
107
- "nagano" => "20",
108
- "hokuriku" => "104",
109
- "toyama" => "16",
110
- "ishikawa" => "17",
111
- "fukui" => "18",
112
- "tokai" => "105",
113
- "gifu" => "21",
114
- "shizuoka" => "22",
115
- "aichi" => "23",
116
- "mie" => "24",
117
- "kansai" => "106",
118
- "shiga" => "25",
119
- "kyoto" => "26",
120
- "osaka" => "27",
121
- "hyogo" => "28",
122
- "nara" => "29",
123
- "wakayama" => "30",
124
- "chugoku" => "107",
125
- "tottori" => "31",
126
- "shimane" => "32",
127
- "okayama" => "33",
128
- "hiroshima" => "34",
129
- "yamaguchi" => "35",
130
- "shikoku" => "108",
131
- "tokushima" => "36",
132
- "kagawa" => "37",
133
- "ehime" => "38",
134
- "kochi" => "39",
135
- "kyushu" => "109",
136
- "fukuoka" => "40",
137
- "saga" => "41",
138
- "nagasaki" => "42",
139
- "kumamoto" => "43",
140
- "ooita" => "44",
141
- "miyaza" => "45",
142
- "kagoshima" => "46",
143
- "okinawa" => "47"
144
- }
145
-
146
- ASURAKU_DELIVERY_AREA_NAMES = {
147
- "全地域" => "all",
148
- "北海道エリアのすべて" => "hokkaido",
149
- "北海道" => "hokkaido",
150
- "東北エリアのすべて" => "tohoku",
151
- "青森県" => "aomori",
152
- "岩手県" => "iwate",
153
- "宮城県" => "miyagi",
154
- "秋田県" => "akita",
155
- "山形県" => "yamagata",
156
- "福島県" => "fukushima",
157
- "関東エリアのすべて" => "kanto",
158
- "茨城県" => "ibaraki",
159
- "栃木県" => "tochigi",
160
- "群馬県" => "gunma",
161
- "埼玉県" => "saitama",
162
- "千葉県" => "chiba",
163
- "東京都" => "tokyo",
164
- "神奈川県" => "kanagawa",
165
- "甲信越エリアのすべて" => "koshinetsu",
166
- "新潟県" => "niigata",
167
- "山梨県" => "yamanashi",
168
- "長野県" => "nagano",
169
- "北陸エリアのすべて" => "hokuriku",
170
- "富山県" => "toyama",
171
- "石川県" => "ishikawa",
172
- "福井県" => "fukui",
173
- "東海エリアのすべて" => "tokai",
174
- "岐阜県" => "gifu",
175
- "静岡県" => "shizuoka",
176
- "愛知県" => "aichi",
177
- "三重県" => "mie",
178
- "関西エリアのすべて" => "kansai",
179
- "滋賀県" => "shiga",
180
- "京都府" => "kyoto",
181
- "大阪府" => "osaka",
182
- "兵庫県" => "hyogo",
183
- "奈良県" => "nara",
184
- "和歌山県" => "wakayama",
185
- "中国エリアのすべて" => "chugoku",
186
- "鳥取県" => "tottori",
187
- "島根県" => "shimane",
188
- "岡山県" => "okayama",
189
- "広島県" => "hiroshima",
190
- "山口県" => "yamaguchi",
191
- "四国エリアのすべて" => "shikoku",
192
- "徳島県" => "tokushima",
193
- "香川県" => "kagawa",
194
- "愛媛県" => "ehime",
195
- "高知県" => "kochi",
196
- "九州エリアのすべて" => "kyushu",
197
- "福岡県" => "fukuoka",
198
- "佐賀県" => "saga",
199
- "長崎県" => "nagasaki",
200
- "熊本県" => "kumamoto",
201
- "大分県" => "ooita",
202
- "宮崎県" => "miyaza",
203
- "鹿児島県" => "kagoshima",
204
- "沖縄エリアのすべて" => "okinawa",
205
- "沖縄県" => "okinawa"
206
- }
207
-
208
- VALID_REQUEST_KEYS = [
209
- :developer_id,
210
- :affiliate_id,
211
- :operation,
212
- :call_back,
213
- :keyword,
214
- :version,
215
- :shop_code,
216
- :genre_id,
217
- :items_per_page,
218
- :page,
219
- :order,
220
- :price,
221
- :must_be_available,
222
- :deep_search,
223
- :mobile,
224
- :must_have_image,
225
- :or_search,
226
- :exclude_keyword,
227
- :include_genre_info,
228
- :purchase_type,
229
- :shipping,
230
- :must_have_point_multiplication,
231
- :point_multiplication_factor,
232
- :must_accept_credit_cards
233
- ]
234
-
235
- REQUEST_KEYS_TO_TRANSFORM = {
236
- :developer_id => :developerId,
237
- :affiliate_id => :affiliateId,
238
- :call_back => :callBack,
239
- :items_per_page => :hits,
240
- :shop_code => :shopCode,
241
- :genre_id => :genreId,
242
- :order => :sort,
243
- :must_be_available => :availability,
244
- :deep_search => :field,
245
- :mobile => :carrier,
246
- :must_have_image => :imageFlag,
247
- :or_search => :orFlag,
248
- :exclude_keyword => :NGKeyword,
249
- :include_genre_info => :genreInformationFlag,
250
- :purchase_type => :purchaseType,
251
- :must_have_point_multiplication => :pointRateFlag,
252
- :point_multiplication_factor => :pointRate,
253
- :must_accept_credit_cards => :creditCardFlag
254
- }
255
-
256
- REQUEST_VALUES_TO_TRANSFORM = {
257
- :availability => {true => 1, false => 0},
258
- :field => {true => 0, false => 1},
259
- :sort => { "affiliate_rate" => "+affiliateRate",
260
- "affiliate_rate asc" => "+affiliateRate",
261
- "affiliate_rate desc" => "-affiliateRate",
262
- "review_count" => "+reviewCount",
263
- "review_count asc" => "+reviewCount",
264
- "review_count desc" => "-reviewCount",
265
- "review_average" => "+reviewAverage",
266
- "review_average asc" => "+reviewAverage",
267
- "review_average desc" => "-reviewAverage",
268
- "price" => "+itemPrice",
269
- "price asc" => "+itemPrice",
270
- "price desc" => "-itemPrice",
271
- "updated_at" => "+updateTimestamp",
272
- "updated_at asc" => "+updateTimestamp",
273
- "updated_at desc" => "-updateTimestamp" },
274
- :carrier => {true => 1, false => 0},
275
- :imageFlag => {true => 1, false => 0},
276
- :orFlag => {true => 1, false => 0},
277
- :genreInformationFlag => {true => 1, false => 0},
278
- :purchaseType => {"normal" => 0, "regular" => 1, "distribution" => 2},
279
- :shipOverseasFlag => {false => 0, true => 1},
280
- :shipOverseasArea => INTERNATIONAL_DELIVERY_AREA_CODES,
281
- :asurakuFlag => {false => 0, true => 1},
282
- :asurakuArea => ASURAKU_DELIVERY_AREA_CODES,
283
- :pointRateFlag => {false => 0, true => 1},
284
- :postageFlag => {false => 0, true => 1},
285
- :creditCardFlag => {false => 0, true => 1}
286
- }
287
-
288
- RESPONSE_VALUES_TO_TRANSFORM = {
289
- 'carrier' => {0 => false, 1 => true},
290
- }
291
-
292
- RESPONSE_ITEM_VALUES_TO_TRANSFORM = {
293
- 'imageFlag' => {0 => false, 1 => true},
294
- 'availability' => {0 => false, 1 => true},
295
- 'taxFlag' => {0 => true, 1 => false},
296
- 'postageFlag' => {0 => true, 1 => false},
297
- 'creditCardFlag' => {0 => false, 1 => true},
298
- 'shopOfTheYearFlag' => {0 => false, 1 => true},
299
- 'shipOverseasFlag' => {0 => false, 1 => true},
300
- 'asurakuFlag' => {0 => false, 1 => true}
301
- }
302
-
303
- RESPONSE_KEYS_TO_TRANSFORM = {
304
- :developerId => :developer_id,
305
- :affiliateId => :affiliate_id,
306
- :Status => :status,
307
- :StatusMsg => :status_msg,
308
- :first => :first_page,
309
- :last => :last_page,
310
- :hits => :items_per_page,
311
- :carrier => :mobile?,
312
- :pageCount => :page_count,
313
- :Items => :items,
314
- :genreInformation => :genre_info
315
- }
316
-
317
- RESPONSE_ITEM_KEYS_TO_TRANSFORM = {
318
- :itemName => :name,
319
- :itemCode => :code,
320
- :itemPrice => :price,
321
- :itemCaption => :caption,
322
- :itemUrl => :url,
323
- :affiliateUrl => :affiliate_url,
324
- :imageFlag => :has_image?,
325
- :smallImageUrl => :small_image_url,
326
- :mediumImageUrl => :medium_image_url,
327
- :availability => :available?,
328
- :taxFlag => :tax_included?,
329
- :creditCardFlag => :credit_cards_accepted?,
330
- :shopOfTheYearFlag => :shop_of_the_year?,
331
- :affiliateRate => :affiliate_rate,
332
- :startTime => :start_time,
333
- :endTime => :end_time,
334
- :reviewCount => :review_count,
335
- :reviewAverage => :review_average,
336
- :pointRate => :point_multiplication_factor,
337
- :pointRateStartTime => :point_multiplication_start_time,
338
- :pointRateEndTime => :point_multiplication_end_time,
339
- :genreId => :genre_id
340
- }
341
-
342
-
343
- private
344
- def respond
345
- @response = @response['Body']['ItemSearch']
346
- super
347
- end
348
-
349
- def transform_request_keys!
350
- if price = @options.delete(:price)
351
- @options[:minPrice] = price[:minimum] if price[:minimum]
352
- @options[:maxPrice] = price[:maximum] if price[:maximum]
353
- end
354
- if shipping = @options.delete(:shipping)
355
- @options[:shipOverseasFlag] = shipping[:must_ship_international] if shipping[:must_ship_international]
356
- @options[:shipOverseasArea] = shipping[:country] if shipping[:country]
357
- @options[:asurakuFlag] = shipping[:must_ship_next_day] if shipping[:must_ship_next_day]
358
- @options[:asurakuArea] = shipping[:next_day_area] if shipping[:next_day_area]
359
- @options[:postageFlag] = shipping[:must_include_cost] if shipping[:must_include_cost]
360
- end
361
- @options[:order].downcase! if @options[:order].is_a?(String)
362
- super
363
- end
364
-
365
- def transform_response_values!
366
- transform_response_item_values!
367
- transform_response_genre_info_values! if @response.has_key?('genreInformation')
368
- super
369
- end
370
-
371
- def transform_response_item_values!
372
- @response['Items'] = @response['Items']['Item'].is_a?(Array) ? @response['Items']['Item'] : []
373
- @response['Items'].each do |item|
374
- custom_transform!(item,'shipOverseasArea'){|h,k| h[k].split('/').map{|a| INTERNATIONAL_DELIVERY_AREA_NAMES[a] || a } if h[k].is_a?(String) }
375
- custom_transform!(item,'asurakuArea'){|h,k| h[k].split('/').map{|a| ASURAKU_DELIVERY_AREA_NAMES[a] || a} if h[k].is_a?(String) }
376
- custom_transform!(item, 'startTime'){|h,k| Time.parse(h[k]) if h[k].present? }
377
- custom_transform!(item, 'endTime'){|h,k| Time.parse(h[k]) if h[k].present? }
378
- custom_transform!(item, 'pointRateStartTime'){|h,k| Time.parse(h[k]) if h[k].present? }
379
- custom_transform!(item, 'pointRateEndTime'){|h,k| Time.parse(h[k]) if h[k].present? }
380
- transform_values! item, RESPONSE_ITEM_VALUES_TO_TRANSFORM
381
- end
382
- end
383
-
384
- def transform_response_genre_info_values!
385
- genre_info = @response['genreInformation']
386
- custom_transform!(genre_info, 'parent'){|h,k| h[k].first }
387
- custom_transform!(genre_info, 'current'){|h,k| h[k].first }
388
- end
389
-
390
- def transform_response_keys!
391
- transform_response_item_keys!
392
- transform_response_genre_info_keys! if @response.has_key?('genreInformation')
393
- super
394
- end
395
-
396
- def transform_response_item_keys!
397
- @response['Items'].each do |item|
398
- item[:shipping] = {}
399
- custom_transform(item,'postageFlag'){|h,k| h[:shipping][:cost_included?] = h.delete(k) }
400
- custom_transform(item,'shipOverseasFlag'){|h,k| h[:shipping][:international?] = h.delete(k) }
401
- custom_transform(item,'shipOverseasArea'){|h,k| h[:shipping][:countries] = h.delete(k) }
402
- custom_transform(item,'asurakuFlag'){|h,k| h[:shipping][:next_day?] = h.delete(k) }
403
- custom_transform(item,'asurakuArea'){|h,k| h[:shipping][:next_day_areas] = h.delete(k) }
404
- item[:shop] = {}
405
- custom_transform(item,'shopName'){|h,k| h[:shop][:name] = h.delete(k) }
406
- custom_transform(item,'shopCode'){|h,k| h[:shop][:code] = h.delete(k) }
407
- custom_transform(item,'shopUrl'){|h,k| h[:shop][:url] = h.delete(k) }
408
- transform_keys! item, RESPONSE_ITEM_KEYS_TO_TRANSFORM
409
- end
410
- end
411
-
412
- def transform_response_genre_info_keys!
413
- genre_info = @response['genreInformation']
414
- custom_transform(genre_info,'child'){|h,k| h[:children] = h.delete(k) }
415
- genre_info['children'].each do |child|
416
- transform_keys! child, GenreSearchClient::RESPONSE_GENRE_KEYS_TO_TRANSFORM
417
- end
418
- transform_keys! genre_info['parent'], GenreSearchClient::RESPONSE_GENRE_KEYS_TO_TRANSFORM if genre_info['parent']
419
- transform_keys! genre_info['current'], GenreSearchClient::RESPONSE_GENRE_KEYS_TO_TRANSFORM if genre_info['current']
420
- end
421
-
422
- def default_options
423
- { :developer_id => @developer_id,
424
- :operation => OPERATION,
425
- :version => VERSION }
426
- end
427
-
428
- def valid_request_keys
429
- VALID_REQUEST_KEYS
430
- end
431
-
432
- def request_keys_to_transform
433
- REQUEST_KEYS_TO_TRANSFORM
434
- end
435
-
436
- def request_values_to_transform
437
- REQUEST_VALUES_TO_TRANSFORM
438
- end
439
-
440
- def response_keys_to_transform
441
- RESPONSE_KEYS_TO_TRANSFORM
442
- end
443
-
444
- def response_values_to_transform
445
- RESPONSE_VALUES_TO_TRANSFORM
446
- end
447
-
448
- end
449
- end