본문 바로가기

Project/3. SULCHELIN <API>

project 3.2 Sulchelin 처음부터 다시 크롤링, 디비저장 그리고 ajax

 

그 전에는 이렇게 아예 컬렉션을 나눠서 저장을 했는데 문제가 이 컬렉션 별로( 술 종류별로) 어떻게 꺼내서 클라이언트단에 뿌려줄 것인가였다.

 

 

그럼 어떡함

다시 짜야지

 

구를 넣어줬듯이 술도 카테고리를 넣어준다.

 

//db.py

# 서울시 구별로 맛집을 검색
seoul_gu = ["종로구", "중구", "용산구", "성동구", "광진구", "동대문구", "중랑구", "성북구", "강북구", "도봉구", "노원구", "은평구", "서대문구", "마포구", "양천구", "강서구", "구로구", "금천구", "영등포구", "동작구", "관악구", "서초구", "강남구", "송파구", "강동구"]
seoul_sul = ["와인", "칵테일", "소주", "맥주"]

 

#술 종류별로 검색
for sul in seoul_sul:
# 술집안에서 구별로 또 검색
for gu in seoul_gu:
keyword = f'{gu} {sul}'
# 술집 리스트 받아오기
suljip_list = get_naver_result(keyword)

# 구별 술집 구분선
print("*"*80 + gu + sul)

# 구, 술종류 정보를 추가
for suljip in suljip_list:
suljip['gu'] = gu
suljip['sul'] = sul

#술집 프린트
pprint.pprint(suljip)

# docs에 술집들 추가
docs.append(suljip)

# 맛집 정보 저장
db.suljip.insert_many(docs)

 

 

 

html

// 술집 정보 요청 하기
$.ajax({
type: "GET",
url: `/suljip?gu_give=${guName}&sul_give=${sulType}`,
data: {},
success: function (response) {
if(response ['result'] == 'success') {
let suljipList = response['suljip_list'];
// TM128 좌표를 위도/경도 좌표로 변환
suljipList = getSuljipListWithGeoData(suljipList);
// 맛집을 html로 추가 (지도 밑에 리스트 목록)
addHTML(suljipList)
// 지도 나타내기
drawMap(suljipList)
} else {
alert('검색에 실패하였습니다.');
}
}
});

 

 

 

//app.py

@app.route('/suljip', methods=["GET"])
def get_suljip():
# gu_receive 라는 변수에 전달받은 구, 술 종류 저장
gu_receive = request.args.get('gu_give')
sul_receive = request.args.get('sul_give')
# 구, 술 종류별에 해당하는 모든 술집 목록을 불러오기
suljip_list = list(db.suljip.find({'gu': gu_receive, 'sul': sul_receive}, {'_id': False}))
# matjip_list 라는 키 값에 술집 목록을 담아 클라이언트단으로 반환
return jsonify({'result': 'success', 'suljip_list': suljip_list})

 

 

 

술 종류는 select 태그로 나열했고, 구 검색은 input 텍스트태그로 받아서 아래와 같이 사용자가 선택한, 적은 값을 추출했다. 

 

let guName = $("#guName").val();
let sulType = $('select[name="sulType"]').val();

 

 

 

 

이제 기본적인 틀은 잡힌 것 같다.

정보가 나와있는 것: 가게명, 주소

정보가 안나와있는 것: 대표메뉴(카테고리x), 가격(카테고리x), 전화번호(카테고리는 있지만 정보는 없는상태)

 

 

정보가 안나와있는 것들은 아무래도 내가 노가다를 뛰어야 되지 않을까 싶다. 

 

 

이제 해야될 것

1. 현재위치에서 가는 길

2. 대표메뉴(카테고리x), 가격(카테고리x), 전화번호(카테고리는 있지만 정보는 없는상태) 조사해서 디비에 추가하기

3. 가격별로 레이팅 나타내기 이건 좀 고민중이다. 술집으로 들어와서 굳이 가격과 레이팅이 필요할까 싶다.