|
1 | 1 | <div align="center"> |
2 | 2 |
|
3 | | -<b>카카오 데이터 조회를 위한 오픈소스 로우코드 파이썬 라이브러리</b><br> |
| 3 | +<b>카카오 API를 사용하기 위한 오픈소스 로우코드 파이썬 라이브러리</b><br> |
4 | 4 | <b>🚀`pip install PyKakao --upgrade`</b> |
5 | 5 |
|
6 | 6 | [](https://pypi.org/project/pykakao/) |
|
15 | 15 |
|
16 | 16 | ## PyKakao |
17 | 17 |
|
18 | | -PyKakao는 [kakao developers](https://developers.kakao.com/)에서 제공하는 [로컬(Local) API](https://developers.kakao.com/docs/latest/ko/local/common)를 이용할 수 있는 Python Client 입니다. PyKakao를 정상적으로 이용하기 위해서는 kakao developers 애플리케이션 추가를 통해 발급되는 REST API 키가 필요합니다. |
| 18 | +**PyKakao** 라이브러리를 사용하면 [Kakao Developers](https://developers.kakao.com/)에서 제공하는 여러 종류의 카카오 API를 파이썬으로 쉽게 사용할 수 있습니다. 예를 들어, [Daum 검색 API](https://developers.kakao.com/docs/latest/ko/daum-search/dev-guide)를 이용해서 웹에서 정보를 검색할 수 있고, [메시지 API](https://developers.kakao.com/docs/latest/ko/message/rest-api)를 사용해서 카카오톡 메시지를 전송할 수 있습니다. 또한, [로컬 API](https://developers.kakao.com/docs/latest/ko/local/dev-guide)를 통해 주변 정보를 조회할 수 있고, [KoGPT API](https://developers.kakao.com/docs/latest/ko/kogpt/rest-api)를 이용해서 자연어 처리를 할 수 있습니다. |
| 19 | + |
19 | 20 |
|
20 | 21 | <br> |
21 | 22 |
|
22 | 23 | ## 설치 방법 |
23 | 24 |
|
24 | | -- Windows: CMD(명령 프롬프트)를 열어 아래 Shell 명령어를 입력 |
25 | | -- Mac: Terminal(터미널)을 열어 아래 Shell 명령어를 입력 |
| 25 | +1. 운영체제(OS)에 따라 아래 중 하나를 선택합니다. |
| 26 | + |
| 27 | +- Windows: CMD(명령 프롬프트) 실행 |
| 28 | +- Mac: Terminal(터미널) 실행 |
| 29 | + |
| 30 | +2. 아래 Shell 명령어를 입력 후 실행합니다. |
26 | 31 |
|
27 | 32 | ```bash |
28 | | -pip install PyKakao |
| 33 | +pip install PyKakao --upgrade |
29 | 34 | ``` |
30 | 35 |
|
| 36 | +<br> |
| 37 | + |
| 38 | +## REST API 키 발급 방법 |
| 39 | + |
| 40 | +PyKakao 라이브러리로 카카오 API를 사용하기 위해서는 [Kakao Developers](https://developers.kakao.com/)에 가입해야 합니다. 가입 후 로그인한 상태에서 상단 메뉴의 [내 애플리케이션](https://developers.kakao.com/console/app)을 선택합니다. '애플리케이션 추가하기'를 눌러 팝업창이 뜨면 '앱 이름', '사업자명'을 입력하고, 운영정책에 동의 후 '저장'을 선택합니다. 추가한 애플리케이션을 선택하면 '앱 키' 아래에 '**REST API 키**'가 생성된 것을 확인할 수 있습니다. |
| 41 | + |
| 42 | + |
31 | 43 | <br> |
32 | 44 |
|
33 | 45 | ## 사용 방법 |
34 | 46 |
|
35 | | -### 카카오 로컬 API 기능 불러오기 |
| 47 | +### Daum 검색 API |
36 | 48 |
|
37 | 49 | ```python |
38 | | -from PyKakao import KakaoLocal |
| 50 | +from PyKakao import DaumSearch |
39 | 51 |
|
40 | | -# kakao developers에서 발급받은 REST API 키 |
41 | | -service_key = "REST API 키" |
| 52 | +# Daum 검색 API 인스턴스 생성 |
| 53 | +DAUM = DaumSearch(service_key = "REST API 키") |
42 | 54 |
|
43 | | -# kakao local API 세션 정의 |
44 | | -KL = KakaoLocal(service_key) |
45 | | -``` |
| 55 | +# 웹문서 검색 |
| 56 | +df = DAUM.search_web("파이썬", dataframe=True) |
46 | 57 |
|
47 | | -### 1. 주소 검색하기 |
| 58 | +# 동영상 검색 |
| 59 | +df = DAUM.search_vclip("파이썬", dataframe=True) |
48 | 60 |
|
49 | | -```python |
50 | | -# 1. 주소 검색하기 |
51 | | -address = "백현동 541" |
52 | | -result = KL.search_address(address) |
53 | | -result |
54 | | -``` |
| 61 | +# 이미지 검색 |
| 62 | +df = DAUM.search_image("파이썬", dataframe=True) |
55 | 63 |
|
56 | | -``` |
57 | | -{'documents': [{'address': {'address_name': '경기 성남시 분당구 백현동 541', |
58 | | - 'b_code': '4113511000', |
59 | | - 'h_code': '4113565700', |
60 | | - 'main_address_no': '541', |
61 | | - 'mountain_yn': 'N', |
62 | | - 'region_1depth_name': '경기', |
63 | | - 'region_2depth_name': '성남시 분당구', |
64 | | - 'region_3depth_h_name': '백현동', |
65 | | - 'region_3depth_name': '백현동', |
66 | | - 'sub_address_no': '', |
67 | | - 'x': '127.112037135835', |
68 | | - 'y': '37.3926536571583'}, |
69 | | - 'address_name': '경기 성남시 분당구 백현동 541', |
70 | | - 'address_type': 'REGION_ADDR', |
71 | | - 'road_address': {'address_name': '경기 성남시 분당구 판교역로146번길 20', |
72 | | - 'building_name': '현대백화점 판교점', |
73 | | - 'main_building_no': '20', |
74 | | - 'region_1depth_name': '경기', |
75 | | - 'region_2depth_name': '성남시 분당구', |
76 | | - 'region_3depth_name': '백현동', |
77 | | - 'road_name': '판교역로146번길', |
78 | | - 'sub_building_no': '', |
79 | | - 'underground_yn': 'N', |
80 | | - 'x': '127.112017130086', |
81 | | - 'y': '37.39279369494', |
82 | | - 'zone_no': '13529'}, |
83 | | - 'x': '127.112037135835', |
84 | | - 'y': '37.3926536571583'}], |
85 | | - 'meta': {'is_end': True, 'pageable_count': 1, 'total_count': 1}} |
86 | | -``` |
| 64 | +# 블로그 검색 |
| 65 | +df = DAUM.search_blog("파이썬", dataframe=True) |
87 | 66 |
|
88 | | -### 2. 좌표로 행정구역정보 받기 |
| 67 | +# 책 검색 |
| 68 | +df = DAUM.search_book("파이썬", dataframe=True) |
89 | 69 |
|
90 | | -```python |
91 | | -# 2. 좌표로 행정구역정보 받기 |
92 | | -x, y = 127.11198669812507, 37.392627919703536 |
93 | | -result = KL.geo_coord2regioncode(x, y) |
94 | | -result |
| 70 | +# 카페 검색 |
| 71 | +df = DAUM.search_cafe("파이썬", dataframe=True) |
95 | 72 | ``` |
96 | 73 |
|
97 | | -``` |
98 | | -{'meta': {'total_count': 2}, |
99 | | - 'documents': [{'region_type': 'B', |
100 | | - 'code': '4113511000', |
101 | | - 'address_name': '경기도 성남시 분당구 백현동', |
102 | | - 'region_1depth_name': '경기도', |
103 | | - 'region_2depth_name': '성남시 분당구', |
104 | | - 'region_3depth_name': '백현동', |
105 | | - 'region_4depth_name': '', |
106 | | - 'x': 127.11087131921613, |
107 | | - 'y': 37.388549067217625}, |
108 | | - {'region_type': 'H', |
109 | | - 'code': '4113565700', |
110 | | - 'address_name': '경기도 성남시 분당구 백현동', |
111 | | - 'region_1depth_name': '경기도', |
112 | | - 'region_2depth_name': '성남시 분당구', |
113 | | - 'region_3depth_name': '백현동', |
114 | | - 'region_4depth_name': '', |
115 | | - 'x': 127.11087131921613, |
116 | | - 'y': 37.388549067217625}]} |
117 | | -``` |
118 | 74 |
|
119 | | -### 3. 좌표로 주소 변환하기 |
| 75 | +### 메시지 API |
120 | 76 |
|
121 | 77 | ```python |
122 | | -# 3. 좌표로 주소 변환하기 |
123 | | -x, y = 127.11198669812507, 37.392627919703536 |
124 | | -result = KL.geo_coord2address(x, y) |
125 | | -result |
126 | | -``` |
| 78 | +from PyKakao import Message |
127 | 79 |
|
128 | | -``` |
129 | | -{'meta': {'total_count': 1}, |
130 | | - 'documents': [{'road_address': {'address_name': '경기도 성남시 분당구 판교역로146번길 20', |
131 | | - 'region_1depth_name': '경기', |
132 | | - 'region_2depth_name': '성남시 분당구', |
133 | | - 'region_3depth_name': '', |
134 | | - 'road_name': '판교역로146번길', |
135 | | - 'underground_yn': 'N', |
136 | | - 'main_building_no': '20', |
137 | | - 'sub_building_no': '', |
138 | | - 'building_name': '현대백화점 판교점', |
139 | | - 'zone_no': '13529'}, |
140 | | - 'address': {'address_name': '경기 성남시 분당구 백현동 541', |
141 | | - 'region_1depth_name': '경기', |
142 | | - 'region_2depth_name': '성남시 분당구', |
143 | | - 'region_3depth_name': '백현동', |
144 | | - 'mountain_yn': 'N', |
145 | | - 'main_address_no': '541', |
146 | | - 'sub_address_no': '', |
147 | | - 'zip_code': ''}}]} |
148 | | -``` |
| 80 | +# 메시지 API 인스턴스 생성 |
| 81 | +MSG = Message(service_key = "REST API 키") |
149 | 82 |
|
150 | | -### 4. 좌표계 변환하기 |
| 83 | +# 카카오 인증코드 발급 URL 생성 |
| 84 | +auth_url = MSG.get_url_for_generatiing_code() |
| 85 | +print(auth_url) |
151 | 86 |
|
152 | | -```python |
153 | | -# 4. 좌표계 변환하기 |
154 | | -x, y = 127.11198669812507, 37.392627919703536 |
155 | | -output_coord = "WTM" |
156 | | -input_coord = "WGS84" |
157 | | -result = KL.geo_transcoord(x, y, output_coord, input_coord) |
158 | | -result |
159 | | -``` |
| 87 | +# 카카오 인증코드 발급 URL 접속 후 리다이렉트된 URL |
| 88 | +url = "" |
160 | 89 |
|
| 90 | +# 위 URL로 액세스 토큰 추출 |
| 91 | +access_token = MSG.get_access_token_by_redirected_url(url) |
| 92 | + |
| 93 | +# 액세스 토큰 설정 |
| 94 | +MSG.set_access_token(access_token) |
| 95 | + |
| 96 | +# 텍스트 메시지 전송 |
| 97 | +text = "텍스트 영역입니다. 최대 200자 표시 가능합니다." |
| 98 | +link = { |
| 99 | + "web_url": "https://developers.kakao.com", |
| 100 | + "mobile_web_url": "https://developers.kakao.com" |
| 101 | + } |
| 102 | +button_title = "바로 확인" |
| 103 | + |
| 104 | +MSG.send_text(text=text, link={}, button_title=button_title) |
161 | 105 | ``` |
162 | | -{'meta': {'total_count': 1}, |
163 | | - 'documents': [{'x': 209916.63703445005, 'y': 432593.2082232768}]} |
164 | | -``` |
165 | 106 |
|
166 | | -### 5. 키워드로 장소 검색하기 |
| 107 | + |
| 108 | +### 로컬 API |
167 | 109 |
|
168 | 110 | ```python |
169 | | -# 5. 키워드로 장소 검색하기 |
170 | | -query = "스타벅스" |
171 | | -category_group_code = "CE7" # 카페 |
172 | | -x, y = 127.11198669812507, 37.392627919703536 # 중심 좌표 |
173 | | -radius = 500 # 반경거리(m) |
174 | | - |
175 | | -result = KL.search_keyword(query, category_group_code, x, y, radius) |
176 | | -result |
177 | | -``` |
| 111 | +from PyKakao import Local |
178 | 112 |
|
179 | | -``` |
180 | | -{'documents': [{'address_name': '경기 성남시 분당구 백현동 537', |
181 | | - 'category_group_code': 'CE7', |
182 | | - 'category_group_name': '카페', |
183 | | - 'category_name': '음식점 > 카페 > 커피전문점 > 스타벅스', |
184 | | - 'distance': '231', |
185 | | - 'id': '382618195', |
186 | | - 'phone': '1522-3232', |
187 | | - 'place_name': '스타벅스 판교알파돔타워', |
188 | | - 'place_url': 'http://place.map.kakao.com/382618195', |
189 | | - 'road_address_name': '경기 성남시 분당구 판교역로 152', |
190 | | - 'x': '127.110364770136', |
191 | | - 'y': '37.3942620223016'}, |
192 | | - {'address_name': '경기 성남시 분당구 백현동 531', |
193 | | - 'category_group_code': 'CE7', |
194 | | - 'category_group_name': '카페', |
195 | | - 'category_name': '음식점 > 카페 > 커피전문점 > 스타벅스', |
196 | | - 'distance': '309', |
197 | | - 'id': '27528340', |
198 | | - 'phone': '1522-3232', |
199 | | - 'place_name': '스타벅스 판교알파돔시티점', |
200 | | - 'place_url': 'http://place.map.kakao.com/27528340', |
201 | | - 'road_address_name': '경기 성남시 분당구 대왕판교로606번길 10', |
202 | | - 'x': '127.109353202048', |
203 | | - 'y': '37.3944611869007'}], |
204 | | - 'meta': {'is_end': True, |
205 | | - 'pageable_count': 2, |
206 | | - 'same_name': {'keyword': '스타벅스', 'region': [], 'selected_region': ''}, |
207 | | - 'total_count': 2}} |
| 113 | +# 로컬 API 인스턴스 생성 |
| 114 | +LOCAL = Local(service_key = "REST API 키") |
| 115 | + |
| 116 | +# 주소 검색하기 |
| 117 | +df = LOCAL.search_address("백현동", dataframe=True) |
| 118 | + |
| 119 | +# 좌표로 행정구역정보 받기 |
| 120 | +df = LOCAL.geo_coord2regioncode(127.110871319215, 37.3885490672089, dataframe=True) |
| 121 | + |
| 122 | +# 좌표로 주소 변환하기 |
| 123 | +df = LOCAL.geo_coord2address(127.110871319215, 37.3885490672089, dataframe=True) |
| 124 | + |
| 125 | +# 좌표계 변환하기 |
| 126 | +df = LOCAL.geo_transcoord(127.110871319215, 37.3885490672089, "WCONGNAMUL", dataframe=True) |
| 127 | + |
| 128 | +# 키워드로 장소 검색하기 |
| 129 | +df = LOCAL.search_keyword("판교역", dataframe=True) |
| 130 | + |
| 131 | +# 카테고리로 장소 검색하기 |
| 132 | +df = LOCAL.search_category("MT1", x=127.110871319215, y=37.3885490672089, radius=500, dataframe=True) |
208 | 133 | ``` |
209 | 134 |
|
210 | | -### 6. 카테고리로 장소 검색하기 |
| 135 | + |
| 136 | +### KoGPT API |
211 | 137 |
|
212 | 138 | ```python |
213 | | -# 6. 카테고리로 장소 검색하기 |
214 | | -category_group_code = "CE7" # 카페 |
215 | | -x, y = 127.11198669812507, 37.392627919703536 # 중심 좌표 |
216 | | -radius = 50 # 반경거리(m) |
| 139 | +from PyKako import KoGPT |
217 | 140 |
|
218 | | -result = KL.search_category(category_group_code, x, y, radius) |
219 | | -result |
220 | | -``` |
| 141 | +# KoGPT API 인스턴스 생성 |
| 142 | +GPT = KoGPT(service_key = "REST API 키") |
221 | 143 |
|
| 144 | +# 다음 문장 만들기 |
| 145 | +prompt = "인간처럼 생각하고, 행동하는 '지능'을 통해 인류가 이제까지 풀지 못했던" |
| 146 | +max_tokens = 64 |
| 147 | +result = GPT.generate(prompt, max_tokens, temperature=0.7, top_p=0.8) |
222 | 148 | ``` |
223 | | -{'documents': [{'address_name': '경기 성남시 분당구 백현동 541', |
224 | | - 'category_group_code': 'CE7', |
225 | | - 'category_group_name': '카페', |
226 | | - 'category_name': '음식점 > 카페', |
227 | | - 'distance': '4', |
228 | | - 'id': '1513310698', |
229 | | - 'phone': '031-5170-1354', |
230 | | - 'place_name': '메종키츠네카페', |
231 | | - 'place_url': 'http://place.map.kakao.com/1513310698', |
232 | | - 'road_address_name': '경기 성남시 분당구 판교역로146번길 20', |
233 | | - 'x': '127.11195356152', |
234 | | - 'y': '37.3926486004944'}, |
235 | | - {'address_name': '경기 성남시 분당구 백현동 541', |
236 | | - 'category_group_code': 'CE7', |
237 | | - 'category_group_name': '카페', |
238 | | - 'category_name': '음식점 > 카페 > 커피전문점', |
239 | | - 'distance': '20', |
240 | | - 'id': '768523904', |
241 | | - 'phone': '031-5170-3259', |
242 | | - 'place_name': '카멜커피', |
243 | | - 'place_url': 'http://place.map.kakao.com/768523904', |
244 | | - 'road_address_name': '경기 성남시 분당구 판교역로146번길 20', |
245 | | - 'x': '127.11208816176', |
246 | | - 'y': '37.3927935375378'}, |
247 | | - {'address_name': '경기 성남시 분당구 백현동 541', |
248 | | - 'x': '127.112029412303', |
249 | | - 'y': '37.3927755727699'}], |
250 | | - 'meta': {'is_end': False, |
251 | | - 'pageable_count': 32, |
252 | | - 'same_name': None, |
253 | | - 'total_count': 32}} |
254 | | -``` |
| 149 | + |
255 | 150 |
|
256 | 151 | <br> |
257 | 152 |
|
|
0 commit comments