wlstp8473

search_restaurant

1 +# kakao local api 컨트롤러 참고자료: https://wooiljeong.github.io/python/kakao_local_api/
2 +# 파이썬 json 특정값 추출 참고자료: https://hashcode.co.kr/questions/8852/%ED%8C%8C%EC%9D%B4%EC%8D%AC-json-%ED%8A%B9%EC%A0%95%EA%B0%92-%EC%B6%94%EC%B6%9C
3 +import json
4 +import requests
5 +from pprint import pprint
6 +from io import StringIO #return_print 하기 위해
7 +
8 +class KakaoLocalAPI:
9 + """
10 + Kakao Local API 컨트롤러
11 + """
12 +
13 + def __init__(self, rest_api_key):
14 + """
15 + Rest API키 초기화 및 기능 별 URL 설정
16 + """
17 +
18 +
19 + # REST API 키 설정
20 + self.rest_api_key = "1c74642c092d28c438467486c366c6cf"
21 + self.headers = {"Authorization": "KakaoAK {}".format(rest_api_key)}
22 +
23 + # 서비스 URL 설정
24 +
25 +
26 + # 05 키워드 검색
27 + self.URL_05 = "https://dapi.kakao.com/v2/local/search/keyword.json"
28 +
29 +
30 + def search_keyword(self,query,category_group_code=None,x=None,y=None,radius=None,rect=None,page=None,size=None,sort=None):
31 + """
32 + 05 키워드 검색
33 + """
34 + #params = {'query': f"{query}",
35 + # 'x': f"{x}",
36 + # 'y': f"{y}"}
37 +
38 + params = {'query': f"{query}",
39 + 'x': f"{x}",
40 + 'y': f"{y}",}
41 +
42 + if radius != None:
43 + params['radius'] = f"{radius}"
44 + if rect != None:
45 + params['rect'] = f"{rect}"
46 + if page != None:
47 + params['page'] = f"{page}"
48 + if size != None:
49 + params['size'] = f"{params}"
50 + if sort != None:
51 + params['sort'] = f"{sort}"
52 +
53 + res = requests.get(self.URL_05, headers=self.headers, params=params)
54 + document = json.loads(res.text)
55 + return document
56 +
57 +
58 +# REST API 키
59 +rest_api_key = "1c74642c092d28c438467486c366c6cf"
60 +kakao = KakaoLocalAPI(rest_api_key)
61 +
62 +## Set params
63 +query = "인덕원 닭갈비" #검색 키워드
64 +x = 126.98083352703802 #내 위치 위도와 경도
65 +y = 37.39403042340368
66 +radius = 1 #반경 km 검색
67 +
68 +
69 +## Request
70 +result_5 = kakao.search_keyword(query,x,y,radius)
71 +
72 +
73 +
74 +
75 +
76 +
77 +
78 +# + json파일 확인해보기 이후 데이터를 추출해야함
79 +#json_string = json.dumps(result_5, indent=2)
80 +#print(json_string)
81 +
82 +
83 +
84 +
85 +#json파일 특정 키워드 추출
86 +#추출할 리스트 place_name, place_url, x, y (x y는 위치임), 검색키워드, 선택 지역(위치)
87 +#from pprint import pprint
88 +
89 +same_name_list = [ x_ for x_ in result_5['meta']['same_name'].values()]
90 +keyword = "검색 키워드: " + same_name_list[0]
91 +selected_region= "검색 위치: " +same_name_list[2]
92 +
93 +total_count = {result_5['meta']['total_count']} #set은 파싱이 불가능하기 때문에 list나 튜플로 바꿔야함, list로 바꾼 후 인덱스를 활용하여 int로 바꾼 후 문자열과 더하기 위해 str로 형변환
94 +total_count_list=list(total_count)
95 +total_count = "총 검색 개수: " + str(total_count_list[0])
96 +#print(keyword) #메제지들은 텔레그렘 봇으로 보내기!!
97 +#print(selected_region)
98 +#print(total_count)
99 +
100 +#print("----------")
101 +
102 +place_name_list = [ x_['place_name'] for x_ in result_5['documents']]
103 +#print(place_name_list)
104 +
105 +#print('------')
106 +
107 +phone_list = [ x_['phone'] for x_ in result_5['documents']]
108 +#print(phone_list)
109 +
110 +#print('------')
111 +
112 +place_url_list = [ x_['place_url'] for x_ in result_5['documents']]
113 +#print(place_url_list)
114 +
115 +#print('------')
116 +
117 +#print(x_list) 위치 시각화 할때 사용
118 +x_list = [ x_['x'] for x_ in result_5['documents']]
119 +y_list = [ x_['y'] for x_ in result_5['documents']]
120 +#print(y_list)
121 +#print(x_list)
122 +
123 +#print('------')
124 +
125 +road_address_name_list = [ x_['road_address_name'] for x_ in result_5['documents']]
126 +#print(road_address_name_list)
127 +
128 +#print('------')
129 +
130 +
131 +resturant_info_list = []
132 +total_count_num = str(total_count_list[0])
133 +total_count_num = int(total_count_num)
134 +resturant_info = "[ 맛집 정보 ]"
135 +
136 +#프린트 결과를 리턴받기 위한 함수
137 +#from io import StringIO
138 +def return_print(*message):
139 + io = StringIO()
140 + print(*message, file=io, end="")
141 + return io.getvalue()
142 +
143 +print(resturant_info) # 봇 메세지 ㄱㄱ
144 +
145 +for i in range(0,10): #total_count_num가 너무 크면 인덱스 범위가 벗어나서 실행이 안됨, 임시로 5개까지만
146 + resturant_info_print = print([place_name_list[i] + " " +phone_list[i] + " " + road_address_name_list[i] + " " + place_url_list[i]])
147 + #resturant_info_list = [place_name_list[i] + " " +phone_list[i] + " " + road_address_name_list[i] + " " + place_url_list[i]]
148 + #resturant_info += return_print(resturant_info_list)
149 +
150 +
151 +
152 +
153 +