반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

CDW (Coding Discussion World)

python(requests) - kakao api를 통해 data 받아와서 db에 저장하기 (2) 본문

Python/Do something

python(requests) - kakao api를 통해 data 받아와서 db에 저장하기 (2)

pymin 2023. 1. 8. 21:28
반응형

지난 편에서는 kakao Developers에 가서 api request를 위한 Key도 받아오고, window cmd창을 통해 sample data도 날려 보았다.  (이전 발행 글 참고)

 

2023.01.08 - [Python/Do something] - python(requests) - kakao api를 통해 data 받아와서 db에 저장하기 (1)

 

python(requests) - kakao api를 통해 data 받아와서 db에 저장하기 (1)

이번 편은 kakao api를 통해 data를 받아오고 해당 결과 값을 db에 저장하는 것이다. 우선 kakao api를 다운받기 위해 아래 kakao Developers에 접속하자 https://developers.kakao.com/ Kakao Developers 카카오 API를 활용

pymin.tistory.com

 

 

그렇다면 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 &#34;sequence cannot have more than elements&#34; PyObject <b>pyMin</b> pyMax PyObject <b>pyMin</b> pyMax ... ... ... @@ -39,6 +39,15 @@ ... @@ -39,6 +39,15 @@ #include &#34;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에 넣어줘야 한다. 방법은 다음 편에서 확인해보자.

 

 

 

반응형