json 데이터
// 20221001100706 // http://localhost/api/mainProducts [ { "id": "13837691", "thumbLink": "https://prod.danawa.com/info/?pcode=13837691&cate=11236452", "thumbImage": "//img.danawa.com/prod_img/500000/691/837/img/13837691_1.jpg?shrink=130:130&_v=20220621104623", "prodName": "레노버 V15 Gen2 82KD000UKR 8GB램", "specList": "노트북 / 운영체제(OS): 미포함(프리도스) / 구성변경상품 / 용도: 사무/인강용 / 화면정보 39.62cm(15.6인치) / 1920x1080(FHD) / NTSC: 45% / 250nit / 눈부심 방지 / TN / 슬림형 베젤 / 프로세서 AMD / 라이젠5-4세대 / 루시엔 / 5500U (2.1GHz) / 헥사코어 / 메모리 DDR4 / 메모리 용량: 8GB / 메모리 교체: 가능(1슬롯) / 저장장치 M.2(NVMe) / 256GB / 저장 슬롯: 2개 / 그래픽 내장그래픽 / Radeon Graphics / 네트워크 무선랜: 802.11ac(Wi-Fi 5) / 유선랜: 기가비트 / 영상입출력 HDMI / 웹캠 / 단자 USB-C: 지원 / USB 3.0 / USB 2.0 / 부가기능 웹캠OFF 지원 / 고속충전 / 입력장치 침수지연키보드 / ㅡ형 방향키 / 숫자 키패드(4열) / 파워 배터리: 38Wh / 충전단자: DC / 주요제원 두께: 19.9mm / 무게: 1.7kg / 색상: 그레이", "mtDate": "2021.03.", "price": 440940, "boost": 0, "siteLogo": null, "deliveryPrice": null, "pimg": null }, { "id": "12625265", "thumbLink": "https://prod.danawa.com/info/?pcode=12625265&cate=112747", "thumbImage": "//img.danawa.com/prod_img/500000/265/625/img/12625265_1.jpg?shrink=130:130", "prodName": "AMD 라이젠5-4세대 5600X (버미어) (멀티팩(정품))", "specList": "AMD(소켓AM4) / 4세대(Zen3) / 7nm / 6코어 / 12쓰레드 / 기본 클럭: 3.7GHz / 최대 클럭: 4.6GHz / L3 캐시: 32MB / TDP: 65W / PCIe4.0 / 메모리 규격: DDR4 / 3200MHz / 내장그래픽: 미탑재 / 기술 지원: StoreMI, Ryzen Master, VR Ready 프리미엄 / 쿨러: Wraith Stealth 포함", "mtDate": "2020.11.", "price": 218990, "boost": 0, "siteLogo": null, "deliveryPrice": null, "pimg": null }, { "id": "16084070", "thumbLink": "https://prod.danawa.com/info/?pcode=16084070&cate=112751", "thumbImage": "//img.danawa.com/prod_img/500000/070/084/img/16084070_1.jpg?shrink=130:130", "prodName": "ASUS PRIME B660M-K D4 인텍앤컴퍼니", "specList": "인텔(소켓1700) / 인텔 B660 / M-ATX (24.4x21.1cm) / 전원부: 6+1+1페이즈 / 메모리 DDR4 / 5333MHz (PC4-42600) / 2개 / 메모리 용량: 최대 64GB / XMP / 옵테인 / 확장슬롯 VGA 연결: PCIe4.0 x16 / PCIe버전: PCIe4.0, PCIe3.0, PCIe / PCIex16: 1개 / PCIex1: 2개 / 저장장치 SATA3: 4개 / M.2: 2개 / PCIe / NVMe / PCIe4.0 / 후면단자 D-SUB / HDMI / USB 3.0 / USB 2.0 / RJ-45 / 오디오잭 / PS/2 / 랜/오디오 Realtek 계열 / 최대 기가비트 / RJ-45: 1개 / Realtek 계열 / 7.1채널(8ch) / 내부I/O RGB 헤더(4핀): 1개 / 시스템팬 헤더(4핀): 1개 / USB2.0 헤더: 2개 / USB3.0 헤더: 1개 / 특징 UEFI / LED 헤더 / TPM헤더", "mtDate": "2022.01.", "price": 136720, "boost": 0, "siteLogo": null, "deliveryPrice": null, "pimg": null }, { "id": "13612532", "thumbLink": "https://prod.danawa.com/info/?pcode=13612532&cate=112753", "thumbImage": "//img.danawa.com/prod_img/500000/532/612/img/13612532_1.jpg?shrink=130:130", "prodName": "ASUS DUAL 지포스 RTX 3060 O12G OC D6 12GB", "specList": "RTX 3060 / 8nm / 부스트클럭: 1867MHz / 스트림 프로세서: 3584개 / PCIe4.0x16 / GDDR6(DDR6) / 출력단자: HDMI2.1, DP1.4 / 부가기능: 제로팬(0-dB기술), 8K 해상도 지원, 4K 해상도 지원, HDR 지원, HDCP 2.3 / 정격파워 650W 이상 / 전원 포트: 8핀 x1개 / 2개 팬 / 가로(길이): 200mm / 백플레이트 / LED 라이트 / AURA SYNC / 2021년 7월부로 LHR(채굴제한) 모델 유통", "mtDate": "2021.03.", "price": 448900, "boost": 0, "siteLogo": null, "deliveryPrice": null, "pimg": null }, { "id": "16587548", "thumbLink": "https://prod.danawa.com/info/?pcode=16587548&cate=112760", "thumbImage": "//img.danawa.com/prod_img/500000/548/587/img/16587548_1.jpg?shrink=130:130", "prodName": "Western Digital WD BLACK SN770 M.2 NVMe (500GB)", "specList": "내장형SSD / M.2 (2280) / PCIe4.0x4 (64GT/s) / NVMe 1.4 / 3D낸드 / [성능] 순차읽기: 5,000MB/s / 순차쓰기: 4,000MB/s / 읽기IOPS: 460K / 쓰기IOPS: 800K / [지원기능] TRIM / S.M.A.R.T / 전용 S/W / [환경특성] MTBF: 175만시간 / TBW: 300TB / A/S기간: 5년, 제한보증 / 방열판 미포함 / 두께: 2.38mm / 5.5g", "mtDate": "2022.03.", "price": 81150, "boost": 0, "siteLogo": null, "deliveryPrice": null, "pimg": null }, { "id": "16304876", "thumbLink": "https://prod.danawa.com/info/?pcode=16304876&cate=11236849", "thumbImage": "//img.danawa.com/prod_img/500000/876/304/img/16304876_1.jpg?shrink=130:130", "prodName": "다나와표준PC 온라인강의용 220208 (8GB, SSD 500GB)", "specList": "인텔 / 코어i5-12세대 / 엘더레이크 / i5-12400 (2.5GHz) / (인텔) H610 / DDR4 / 8GB / SSD / 500GB / UHD 그래픽스 730 / 1Gbps 유선 / HDMI / DP포트 / DVI / D-SUB / USB 3.0(5Gbps) / 500W / 운영체제 미포함 / 미들타워 / 용도: 사무/인강용", "mtDate": "2022.01.", "price": 666270, "boost": 0, "siteLogo": null, "deliveryPrice": null, "pimg": null }, { "id": "17535233", "thumbLink": "https://prod.danawa.com/info/?pcode=17535233&cate=112752", "thumbImage": "//img.danawa.com/prod_img/500000/233/535/img/17535233_1.jpg?shrink=130:130", "prodName": "TeamGroup DDR5-4800 CL40 Elite 서린 (16GB)", "specList": "데스크탑용 / DDR5 / 4800MHz (PC5-38400) / 램타이밍: CL40-40-40-77 / 1.10V / 램개수: 1개 / 온다이ECC / 히트싱크: 미포함", "mtDate": "2022.07.", "price": 97000, "boost": 0, "siteLogo": null, "deliveryPrice": null, "pimg": null }, { "id": "15462545", "thumbLink": "https://prod.danawa.com/info/?pcode=15462545&cate=11236463", "thumbImage": "//img.danawa.com/prod_img/500000/545/462/img/15462545_1.jpg?shrink=130:130&_v=20220628155302", "prodName": "APPLE 2021 맥북프로16 MK183KH/A", "specList": "노트북 / 운영체제(OS): macOS Monterey / 일반유통상품 / 용도: 그래픽작업용, 사무/인강용 / 화면정보 41.05cm(16.2인치) / 3456x2234 / DCI-P3: 지원 / 1000nit / 주사율: 120Hz / miniLED / 트루톤 / 프로세서 애플(ARM) / 실리콘 M1 PRO / APL1103 / 10코어(8+2) / 메모리 메모리 용량: 16GB / 메모리 교체: 불가능 / 저장장치 SSD / 512GB / 그래픽 내장그래픽 / M1 PRO 16 core / 네트워크 무선랜: 802.11ax(Wi-Fi 6) / 영상입출력 HDMI / 웹캠(FHD) / 단자 썬더볼트4: 3개(USB-C겸용) / USB 4.0 / SD카드 / 부가기능 지문 인식 / 고속충전 / USB-PD / DP Alt Mode / 입력장치 키보드 라이트 / ㅗ형 방향키 / 파워 배터리: 100Wh / 어댑터: 140W / 충전단자: MagSafe 3 / 주요제원 두께: 16.8mm / 무게: 2.1kg / 쿨링팬: 2개 / 색상: 그레이 / 16코어 Neural Engine / 최대 200GB/s 메모리 대역폭 / 미디어 엔진 (디코딩+인코딩+ProRes) / 노치형 디스플레이", "mtDate": "2021.10.", "price": 2831740, "boost": 0, "siteLogo": null, "deliveryPrice": null, "pimg": null } ]
package com.pcw.prod; import java.io.BufferedWriter; import java.io.FileWriter; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import org.springframework.core.io.ClassPathResource; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.pcw.prod.model.DanawProductDTO; import com.pcw.utils.DanawProductCrawling; @RestController @RequestMapping("/api") public class DanawProductApiController { public static String getIndexCachData(){ StringBuffer result=new StringBuffer(); try { ClassPathResource resource = new ClassPathResource("data/cache.txt"); Path path = Paths.get(resource.getURI()); List<String> content= Files.readAllLines(path); content.forEach(s ->result.append(s)); } catch (Exception ie) { ie.printStackTrace(); } return result.toString(); } public static int setIndexCachData(String content){ int resultCount = 0; try { ClassPathResource resource = new ClassPathResource("data/cache.txt"); Path path = Paths.get(resource.getURI()); BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(path.toString(), false)); bufferedWriter.write(content); bufferedWriter.newLine(); bufferedWriter.flush(); bufferedWriter.close(); } catch (Exception ie) { ie.printStackTrace(); } return resultCount; } /** * 인덱스 메인화면 cache 데이터 상품 목록 가져오기 * @return * url :/api/mainProducts * @throws JsonProcessingException * @throws JsonMappingException */ @GetMapping(value = "/mainProducts") public ResponseEntity<?> mainProducts(DanawProductCrawling danawProductCrawling) throws Exception { String data=getIndexCachData(); if(data!=null && !data.equals("")) { ObjectMapper objectMapper =new ObjectMapper(); List<DanawProductDTO> getDataJson=objectMapper.readValue(data, new TypeReference<List<DanawProductDTO>>(){}); return ResponseEntity.status(HttpStatus.OK).body(getDataJson); } return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); } /** * 인덱스 메인화면 cache 데이터 상품 목록 업데이트 * @param danawProductCrawling * @return * @throws Exception */ @GetMapping(value = "/mainProductsUpdate") public ResponseEntity<?> mainProductsUpdate(DanawProductCrawling danawProductCrawling) throws Exception { //다나와 메인 인덱스 화면 제품만 가져오기 List<DanawProductDTO> product=danawProductCrawling.getMainProducts(); ObjectMapper obj =new ObjectMapper(); String json= obj.writeValueAsString(product); setIndexCachData(json); return ResponseEntity.status(HttpStatus.OK).body(product); } // vga 데이터를 최저가 순으로 가져온다. @GetMapping(value = "/vga") public ResponseEntity<List<DanawProductDTO>> getVga(DanawProductCrawling danawProductCrawling) { List<DanawProductDTO> product=danawProductCrawling.getVga(); return ResponseEntity.status(HttpStatus.OK).body(product); } // vga 데이터를 부스트클럭순으로 역순으로 정렬하여 가져온다. @GetMapping(value = "/vga2") public ResponseEntity<List<DanawProductDTO>> getVga2(DanawProductCrawling danawProductCrawling) { List<DanawProductDTO> product=danawProductCrawling.getVga2(); return ResponseEntity.status(HttpStatus.OK).body(product); } //탑메뉴 클릭시 categoryProducts @GetMapping(value = "/categoryProducts/{product}") public ResponseEntity<List<DanawProductDTO>> categoryProducts(DanawProductCrawling danawProductCrawling, @PathVariable String product) { List<DanawProductDTO> products=danawProductCrawling.getTopMeunProductList(product); return ResponseEntity.status(HttpStatus.OK).body(products); } }
댓글 ( 4)
댓글 남기기