Open tonykang22 opened 1 year ago
B00M6I5SNI
B000YZK47U
B07GZXDQ1Y
B08QJ8Z65K
B09ZPCR9BH
B07CTZM76P
B082VMG9DT
B09CS7YRQT
B09HGYNLVZ
순수 배송비
베네수엘라 화폐
Applied Weight
Actual Weight
Weight/Price Difference
로게인 여성
솔트 마스크
밀키트
전체 비교
$ 1.6 차이
1 LB 차이
밀레 세제
$ 4.8 / 6 LB
(volumeWeight : 0.963855421686747, productWeight : 1.76, ceiledWeight : 2.0, deliveryPrice : $7.6)
(volumeWeight : 0.7190379759036145, productWeight : 4.0, ceiledWeight : 4.0, deliveryPrice : $10.8)
(volumeWeight : 1.1566265060240963, productWeight : null, ceiledWeight : 2.0, deliveryPrice : $7.6)
(volumeWeight : 1.3012048192771084, productWeight : null, ceiledWeight : 2.0, deliveryPrice : $7.6)
(volumeWeight : 4.6248289156626505, productWeight : null, ceiledWeight : 5.0, deliveryPrice : $12.4)
(volumeWeight : 1.67685378313253, productWeight : null, ceiledWeight : 2.0, deliveryPrice : $7.6)
productWeight: null
productWeight
Google search : B082VMG9DT
Item Weight: 6.87 LB
납득할 만한 오차
오마이집 측정값: 8 LB
specification
https://app.rainforestapi.com/playground : B082VMG9DT
value
Ounces
2.5 LB
"specifications": [ { "name": "Is Discontinued By Manufacturer", "value": "No" }, { "name": "Product Dimensions", "value": "6 x 4 x 8 inches; 11.68 Ounces" } ]
Pounds
"specifications": [ { "name": "Is Discontinued By Manufacturer", "value": "No" }, { "name": "Package Dimensions", "value": "6 x 6 x 6 inches; 2.5 Pounds" } ]
pounds
"specifications": [ { "name": "Is Discontinued By Manufacturer", "value": "No" }, { "name": "Package Dimensions", "value": "12.2 x 8.74 x 7.2 inches; 2.93 Pounds" } ]
모두
dimension / weight
Dimensions
dimensions = [10.28, 7.24, 3.74]
private List<Double> transDimensions(AmazonProductResponseDto dto) { String dimensions = dto.getDimensions(); if (dimensions == null) { List<AmazonProductResponseDto.NameValue> specifications = dto.getSpecifications(); List<AmazonProductResponseDto.NameValue> dimensionsEntry = specifications.stream() .filter(nv -> nv.getName().contains("Dimensions")) .collect(Collectors.toList()); if (dimensionsEntry.isEmpty()) { return null; } else { dimensions = dimensionsEntry.stream().findFirst().get().getValue(); } } return Arrays.stream(dimensions.split(";")[0].split("x")) .map(s -> Double.parseDouble(s.replaceAll("[^\\d.]", ""))) .collect(Collectors.toList()); }
Weight
weight = null
로게인 남성
private Double transWeight(AmazonProductResponseDto dto) { String originalWeight = dto.getWeight(); if (originalWeight == null) { List<AmazonProductResponseDto.NameValue> specifications = dto.getSpecifications(); List<AmazonProductResponseDto.NameValue> weightEntry = specifications.stream() .filter(nv -> nv.getName().contains("Weight")) .collect(Collectors.toList()); if (weightEntry.isEmpty()) { return null; } else { originalWeight = weightEntry.stream().findFirst().get().getValue(); } } return Double.parseDouble(originalWeight.replaceAll("[^\\d.]", "")); }
1 LB
납득할 만한 수준의 오차
1 LB 의 차이 = $ 1.6 차이
+ 1 LB
$ 5
$ 79.50
$ 13.52
private Double mapWeight(AmazonProductResponse dto) { String originalWeight = dto.getWeight(); if (originalWeight != null) { return Double.parseDouble(originalWeight.replaceAll("[^\\d.]", "")); } List<AmazonProductResponse.NameValue> specifications = dto.getSpecifications(); Double poundsWeightByName = getWeightByName(specifications, "pounds"); if (poundsWeightByName != null) { return poundsWeightByName; } Double ouncesWeightByName = getWeightByName(specifications, "ounces"); if (ouncesWeightByName != null) { return ounceToPound(ouncesWeightByName); } Double ouncesWeightByValue = getWeightByValue(specifications, "ounces"); if (ouncesWeightByValue != null) { return ounceToPound(ouncesWeightByValue); } return getWeightByValue(specifications, "pounds"); } private Double getWeightByName(List<AmazonProductResponse.NameValue> specifications, String weightUnit) { List<AmazonProductResponse.NameValue> weightEntry = specifications .stream() .filter(nv -> nv.getName().toLowerCase().contains("weight")) .collect(Collectors.toList()); if (weightEntry.isEmpty()) { return null; } String originalWeight = weightEntry.stream() .findFirst() .get() .getValue(); return originalWeight.contains(weightUnit) ? Double.parseDouble(originalWeight.replaceAll("[^\\d.]", "")) : null; } private Double getWeightByValue(List<AmazonProductResponse.NameValue> specifications, String weightUnit) { List<AmazonProductResponse.NameValue> weightEntry = specifications.stream() .filter(nv -> nv.getValue().toLowerCase().contains(weightUnit)) .collect(Collectors.toList()); if (weightEntry.isEmpty()) { return null; } String originalWeight = weightEntry.stream() .findFirst() .get() .getValue(); String[] splitValue = originalWeight.split(";"); return Double.parseDouble(splitValue[splitValue.length - 1].replaceAll("[^\\d.]", "")); } private Double ounceToPound(Double ounce) { return ounce * 0.0625; }
납득할 만한 오차 1 LB
오마이집 실결제금액 비교
개요
실 결제 금액과 비교
판매 현황
B00M6I5SNI
: [로게인 여성] - 12 건 외 나머지 1 건B000YZK47U
: [로게인 남성]B07GZXDQ1Y
: [미녹시딜 남성]B08QJ8Z65K
: [파스타 제면기]B09ZPCR9BH
: [솔트 마스크]B07CTZM76P
: [밀키트]B082VMG9DT
: [밀레 세제]B09CS7YRQT
: [아로마 디퓨저]B09HGYNLVZ
: [베네수엘라 화폐]비교 기준
순수 배송비
만 가져와 비교한다.베네수엘라 화폐
는 아직 배송 중으로, 실 결제가 되지 않아 포함하지 않음Applied Weight
: 가격 책정을 위해 반올림한 무게Actual Weight
: 실제 무게Weight/Price Difference
: 계산 값 - 실제 값전체 비교
로게인 여성
솔트 마스크
밀키트
만 계산보다 저렴했다.가격 차이의 원인?
전체 비교
에서 가격 차이가 존재(계산과 다른)하는 6 종의 상품이다.$ 1.6 차이
=1 LB 차이
, 수치 값과 실측 사이에서 충분히 발생할 수 있는 오차라고 이해된다.밀레 세제
의 경우,$ 4.8 / 6 LB
로 차이가 매우 크다.상세히 확인해보면...
(volumeWeight : 0.963855421686747, productWeight : 1.76, ceiledWeight : 2.0, deliveryPrice : $7.6)
(volumeWeight : 0.7190379759036145, productWeight : 4.0, ceiledWeight : 4.0, deliveryPrice : $10.8)
(volumeWeight : 1.1566265060240963, productWeight : null, ceiledWeight : 2.0, deliveryPrice : $7.6)
(volumeWeight : 1.3012048192771084, productWeight : null, ceiledWeight : 2.0, deliveryPrice : $7.6)
(volumeWeight : 4.6248289156626505, productWeight : null, ceiledWeight : 5.0, deliveryPrice : $12.4)
(volumeWeight : 1.67685378313253, productWeight : null, ceiledWeight : 2.0, deliveryPrice : $7.6)
밀레 세제
의 log를 살펴보면productWeight: null
임을 알 수 있다.productWeight
정보가 부재한 것을 확인할 수 있다.productWeight: null ??
Help me Google
밀레 세제
의 경우 무게를 명시하지 않을 이유가 없을 상품으로 판단되어 직접 검색해보았다.Item Weight: 6.87 LB
로 분명히 명시되어 있는 것을 확인할 수 있었다.납득할 만한 오차
1 LB 가 나는 것(오마이집 측정값: 8 LB
)도 확인할 수 있다.Help me Rainforest
specification
아래 해당 정보 존재다른 상품들은?
로게인 남성
value
에Ounces
로 표기2.5 LB
과는 오차가 크다.미녹시딜 남성
value
에Pounds
로 표기밀키트
value
에pounds
로 표기중간 결론
모두
weight 정보가 존재했다.PA 구현
dimension / weight
를 매핑하는 메서드는 아래와 같다.Dimensions
Dimensions
단어가 있는 경우 값을 가져온다.밀레 세제
의 경우:dimensions = [10.28, 7.24, 3.74]
Weight
Weight
단어가 있는 경우 값을 가져온다.밀레 세제
의 경우:weight = null
밀레 세제
의 경우: value 값에Pounds
정보가 존재한다.로게인 남성
의 경우: value 값에Ounces
정보가 존재한다.결론
납득할 만한 오차
1 LB
의납득할 만한 수준의 오차
가 발생할 수 있다.1 LB 의 차이 = $ 1.6 차이
는 매우 큰 값이라 판단된다.+ 1 LB
를 적용해 배송비 항목에 편입하도록 한다.밀레 세제?
productWeight
이 부재한 비중이 높은 액체의 상품으로 수익에서 약$ 5
가 감소한다.$ 79.50
로, rough 하게 수익으로 계산하면$ 13.52
(79.50 * 0.17) 이다.기존 로직 리팩토링