4-frame-photos-map / backend

네컷지도(전국 네컷사진관 정보 제공, 리뷰 공유 사이트) 백엔드 API 개발
6 stars 3 forks source link

feat : 브랜드 별 크롤링 #114

Closed zuminzi closed 1 year ago

zuminzi commented 1 year ago

목적

공공데이터 지점명 문제로 인해 각 즉석사진 브랜드 공식사이트에서 지점명과 주소 크롤링

작업 상세 내용

  • feat : 크롤링
  • [x] jsoup 자료조사
  • [x] 즉석사진 브랜드 크롤링
  • refactor : Shop 도메인
  • [x] DB Shop vs Kakao API Shop 비교 로직 수정
  • DB 데이터가 공공 데이터에서 크롤링 데이터로 바뀌었으므로 크롤링 데이터 특성(지점명, 주소 정확도)에 맞게 수정
  • [x] 카카오맵 API 조회 결과 필터링 카테고리명 즉석사진 대신 사진으로 변경
  • 즉석사진(셀프포토부스)인데 카카오맵 API에서는 사진관,포토스튜디오 카테고리에 분류되어있는 경우 있음
  • e.g. 인스포토, 셀픽스
  • 조회 키워드가 광범위해져도 DB 데이터는 모두 즉석사진 브랜드이므로 사용자에게는 즉석사진만 반환하게 됨
  • [x] Shop 테이블의 주소 컬럼 roadAddressName에서 지번 주소도 포괄하는 address로 변경, 관련 코드 수정
  • refactor : 키워드 조회 API, 반경 2km 내 브랜드 별 조회 API
  • [x] DB 데이터와 일치하는 데이터일 시 카카오맵 바로가기 Url, 지점 위도/경도 shop-id로 캐시
  • [x] 홈 탭과 내 주변 탭의 반경값을 다르게 사용하기 위해 브랜드 별 조회 API 반경 파라미터 추가하여 프론트에서 반경 값 유연하게 조정할 수 있도록 수정
  • refactor : 찜 목록 조회 API, 상세조회 API
  • [x] 카카오 API 호출 전에 캐시된 데이터 있는지 확인하여 없으면 기존 로직대로 응답 반환, 있으면 자체적으로 거리값 계산하여 반환
  • [x] 상세조회 API에서 거리값 정확성을 위해 거리 파라미터 제거 후 사용자 위도, 경도로 직접 계산하도록 수정

참고 사항

I. 크롤링 이후 개선 지점

II. 브랜드 별 정적 크롤링 가능 및 구현 여부

즉석사진 브랜드 정적 크롤링 가능 및 구현 여부
인생네컷 구현완료
하루필름 구현완료
포토이즘박스/포토이즘컬러드 구현완료
포토그레이 구현완료
셀픽스 구현완료
인스포토(내컷인생 포함) 구현완료
포토스트리트 구현완료
포토드링크 구현완료
포토랩플러스 구현완료
포토시그니처 구현완료
플레이인더박스 구현완료
해리포토 구현완료
그믐달스튜디오 불가(이미지)
비룸 스튜디오 불가(동적 크롤링 필요(JS))
모노맨션 불가(공식사이트 X)
스냅치즈 불가(동적 크롤링 필요(JS))
스위치 스튜디오 불가(이미지)
시현하다 프레임 불가 (동적 크롤링 필요(JS))
포토아이브 불가(사이트에 지점 정보 X)
포토인더박스 불가 (공식사이트 X)
포토하임 불가 (공식사이트 X)

III. 크롤링 이후 바뀐 Shop 조회, 비교 로직

IV. [크롤링 데이터 DB 저장 후 필수작업] 카카오 API 데이터와 비교가능한 지역명으로 수정

UPDATE shop SET address = REPLACE(address,'서울특별시','서울'); UPDATE shop SET address = REPLACE(address, '서울시', '서울'); UPDATE shop SET address = REPLACE(address, '서울특벼릿', '서울'); UPDATE shop SET address = REPLACE(address, '부산광역시','부산'); UPDATE shop SET address = REPLACE(address,'대구시','대구'); UPDATE shop SET address = REPLACE(address,'대구광역시','대구'); UPDATE shop SET address = REPLACE(address,'인천시','인천'); UPDATE shop SET address = REPLACE(address,'인천광역시','인천'); UPDATE shop SET address = REPLACE(address,'광주광역시','광주'); UPDATE shop SET address = REPLACE(address,'대전시','대전'); UPDATE shop SET address = REPLACE(address,'대전광역시','대전'); UPDATE shop SET address = REPLACE(address,'울산광역시','울산'); UPDATE shop SET address = REPLACE(address,'경기도','경기'); UPDATE shop SET address = REPLACE(address,'강원도','강원'); UPDATE shop SET address = REPLACE(address,'충청북도','충북'); UPDATE shop SET address = REPLACE(address,'충청남도','충남'); UPDATE shop SET address = REPLACE(address,'전라북도','전북'); UPDATE shop SET address = REPLACE(address,'전라남도','전남'); UPDATE shop SET address = REPLACE(address,'경상북도','경북'); UPDATE shop SET address = REPLACE(address,'경상남도','경남');

### V. Shop 테이블 주소 컬럼명 변경 예정
```sql
ALTER TABLE shop RENAME COLUMN road_address_name TO address;