Python/Do Something
python(requests) - kakao api를 통해 data 받아와서 db에 저장하기 (2)
pybi
2023. 1. 19. 19:48
지난 편에서는 kakao Developers에 가서 api request를 위한 Key도 받아오고, window cmd창을 통해 sample data도 날려 보았다. (이전 발행 글 참고)
그렇다면 python을 이용해서 curl을 날리고 받아온 값을 출력하도록 하자.
우선 원하는 항목을 검색하기 위해 input을 통해서 원하는 값을 받고 변수에 담자
query_name = input('What do you want to search?')
다음은 kakao Developers page에서 확인한 request정보들을 변수에 담자. 여기에서 rest_api_key는 이전 편에서 확인했는 REST API KEY 값을 넣어주면 된다.
url = 'https://dapi.kakao.com/v2/search/web'
rest_api_key = {'Authorization': 'KakaoAK {REST API KEY}'}
data = {
'query' : query_name, #string, 검색을 원하는 질의어
'sort' : 'recency', #결과 문서 정렬 방식, accuracy(정확도순) 또는 recency(최신순)
'page' : '1', #결과 페이지 번호, 1~50 사이의 값, 기본 값 1
'size' : 10, #한 페이지에 보여질 문서 수, 1~50 사이의 값, 기본 값 10
}
그런다음에 requests를 이용해서 request.get 날려주고 결과값을 response라는 변수에 담아준다. 마지막으로 json파일을 변환해서 출력해 주면 이전 편에서 cmd로 확인했던 것과 동일한 결과값을 확인할 수 있다.
import requests
import json
def api_req_start():
query_name = input('What do you want to search?')
url = 'https://dapi.kakao.com/v2/search/web'
rest_api_key = {'Authorization': 'KakaoAK {REST API KEY}'}
data = {
'query' : query_name, #string, 검색을 원하는 질의어
'sort' : 'recency', #결과 문서 정렬 방식, accuracy(정확도순) 또는 recency(최신순)
'page' : '1', #결과 페이지 번호, 1~50 사이의 값, 기본 값 1
'size' : 10, #한 페이지에 보여질 문서 수, 1~50 사이의 값, 기본 값 10
}
response = requests.get(url, headers=rest_api_key, data=data)
result = json.loads(response.text)
print(result)
if __name__ == "__main__":
api_req_start()
결과값은 아래와 같다.
What do you want to search?pymin
{'documents': [{'contents': 'EXPP_ReturnPyObjError PyExc_ValueError "sequence cannot have more than elements" PyObject <b>pyMin</b> pyMax PyObject <b>pyMin</b> pyMax ... ... ... @@ -39,6 +39,15 @@ ... @@ -39,6 +39,15 @@ #include "PIL_time.h...', 'datetime': '2022-06-24T07:15:33.000+09:00', 'title': 'source/blender/python/api2_2x/Draw.c', 'url': 'https://gitlab.soundcontact.studio/enpinion/blender/-/commit/3c9a11f24ed9bd131e049e98e86aaee1bcaeb53a?view=parallel&w=1'}, {'contents': 'dldmsdb0328 03-20 2 3646 무통장입금확인 sagatious 03-20 2 3645 무통장 입금 확인 부탁드립니다 <b>pymin</b>9388 03-20 2 3644
제발.. 입금확인 부탁드립니다 nohsihyun 03-20 1 3643 입금확인 juttyq55 03-20 3...', 'datetime': '2021-11-13T18:21:21.000+09:00', 'title': '잠깐! 이곳은 무통장입금을 확인 할 수 있는 곳입니다', 'url': 'https://www.akbonara.co.kr/board/bank?&page=96'}, {'contents': 'from pyspark.sql.functions import (concat, count, sum as pysum, array, explode, isnull, avg as pyavg, col, min as <b>pymin</b>, max as pymax)', 'datetime': '2021-11-07T00:00:00.000+09:00', 'title': 'Anghille', 'url': 'https://gist.github.com/Anghille'}, {'contents': 'the same time was considerably lower, and was below the detection limit of our instrumentation (2<b>pYmin</b>). The actual rates of evolution depend upon whether the period in question is discharged- or...', 'datetime': '2021-04-11T18:41:35.000+09:00', 'title': 'Journal of IEEE 1995 showing that
cycling of the battery does not reduce capacity', 'url': 'https://www.nickel-iron-battery.com/nickel-iron-cycle-testing-1995.pdf'}, {'contents': '87 i1leges drokion valeriad d linao90, theninjaprotigy lebufet, weiiiyang, ceasar1992 dmist, all a memory <b>pymin</b>92 xaeternus jokerg2 rulopolio, mulper1e tabakosek, iblue magiic, mance1973...', 'datetime': '2021-01-24T11:29:53.000+09:00', 'title': 'People jazzsim Finder Catalog - piki287', 'url': 'http://g3m.club/gladiator'}, {'contents': 'karloz300, adamt2006 lolelena1214, stonegod1123, diosaballerina s alad, perfectiontvx <b>pymin</b>92 moofee tadiam lycaris, kaluchov2 patrational, cc86653817, serjiopsv ultranova9, peter85912 sineptorro...', 'datetime': '2021-01-22T23:01:19.000+09:00', 'title': 'antishatter', 'url': 'http://g3m.club/jonjonbr'}, {'contents': 'Number of characters on a line 00115 FXint pxmin; // min X coord in content 00116 FXint <b>pymin</b>; // min Y coord in content 00117 FXint pxmax; // max X coord in content 00118 FXint pymax; // max Y...', 'datetime': '2020-07-06T18:22:46.000+09:00', 'title': 'FXDCPrint.h', 'url': 'http://fox-toolkit.org/ref12/FXDCPrint_8h-source.html'}, {'contents': '4682 50 claudiaim 010-****-3479 51 venus1886 010-****-0493 52 계란호
랑이 010-****-0211 53 <b>pymin</b>217 010-****-2394 54 레이(sts09261) 010-****-4361 55 블루(rna2_82) 010-****-1359 56 반지하의제왕(elise...', 'datetime': '2020-06-29T00:00:00.000+09:00', 'title': '[당첨자 재
공지] 찾기 쉬운 생활법령정보 응원 이벤트 당첨자 재공지', 'url': 'https://m.easylaw.go.kr/MOB/NtcInfoRetrieve.laf?ntcSeq=1119'}, {'contents': 'PXma k x = min[ Xmax, i Xmax j ] PXmin k = max[ Xmin, i Xmin j ]
PYma k x = min[ Ymax, i Ymax j ] <b>PYmin</b> k = max[ Ymin, i Ymin j ] : x : x : y : y Fig. 16 Pre-Detection processing 37 17. Fig. 17 Pre...', 'datetime': '2020-05-22T16:12:20.000+09:00', 'title': '초대형
유한요소 해석결과의 효율적 후처리를 위한 후 분류 기반 병렬 가시화 알고리듬의 개발', 'url': 'http://docsplayer.org/149852205-초대형-유한요소-해석결과의-효율적-후처리를-위한-후-분류-기반-병렬-가시화-알고리듬의
-개발.html'}, {'contents': '0, 0) val pxmax = Coord(xmax, 0); val pxmin = Coord(xmin, 0) val pymax = Coord(0, ymax); val <b>pymin</b> = Coord(0, ymin) //axes: val a_path = new geom.GeneralPath a_path.moveTo(pxmin.dx, pxmin.dy); a...', 'datetime': '2020-01-23T00:00:00.000+09:00', 'title': 'Constrained random points on a circle', 'url': 'http://www.rosettacode.org/wiki/Constrained_random_points_on_a_circle'}], 'meta': {'is_end': False, 'pageable_count': 125, 'total_count': 163}}
(pymin_django2) PS C:\pyminv>
그럼 이제 해당 값을 양식에 맞춰서 db에 넣어줘야 한다. 방법은 다음 편에서 확인해보자.