개발학습일지

[Restful API] 나의 API 안에서 Open API 요청하기 _requests 라이브러리를 사용한 naver 검색 API (뉴스) 본문

Restful API

[Restful API] 나의 API 안에서 Open API 요청하기 _requests 라이브러리를 사용한 naver 검색 API (뉴스)

처카푸 2024. 5. 29. 14:16

Open API 이용해서 나의 API 만들기 _naver 검색 API (뉴스)


먼저,
나의 API를 만들기 위해 ci cd 파이프라인 구축한다.

순서 : serverless로 파일 만들기 -> 로컬서버 체크 -> Docher 설치 -> 로컬서버 체크 ->  AWS서버 배포체크 -> 깃 연동 -> 깃 액션즈로 자동화 -> 자동화로 배포된 AWS서버 체크 -> 개발 시작

 

내가 사용할 openAPI 인 Naver 검색 API 설명을 확인하고,

나의 API를 설계한다.

참고. https://msdev-st.tistory.com/158

 

[Restful API] Open API _naver 검색 API (뉴스) 사용하기 위한, 애플리케이션 등록 방법 및 API 설명 보는

Open API _naver 검색 API (뉴스) 사용하기 위한, 애플리케이션 등록 방법 및 API 설명 보는 법 네이버 오픈API를 확인하기 위해서, (https://developers.naver.com/main/) - Naver developers 사이트 회원가

msdev-st.tistory.com

 

1. 나의 API를 설계한다.

- Postman에서 OpenAPI에서 주는 정보를 참고하여 HTTP 메서드와 Params를 작성한다.

 

2. openAPI 에서 제공하는 정보로 검색 API가 제대로 작동하는지 Postman에서 확인한다.

- Postman에서 HTTP = GET, URL= OpenAPI 에서 주는 url, params에 쿼리파라미터 작성

- ^ 위에 처럼 작성하니 오류 발생

 

- 나의 애플리케이션을 만들 때 발급된 아이디 값과 시크릿 값을 입력해줘야 한다.

- 모두 입력해주면 오류 없이 실행되는 것을 확인할 수 있다.

 

 

3. 내가 만든 API에서 다른 Open API 요청하기

- API 호출하는 라이브러리 requests 인스톨 및 임포트 하기 (requirement.txt 에도 추가하는 것 잊지 말기)

$ pip install requests

- 코드 작성

from flask import request
from flask_restful import Resource

# API 요청 라이브러리
import requests

# 내가 만든 보안 값 class
from config import Config

class NewSearchResource(Resource) :
    def get(self) :
		
        # params 에 쿼리 값이 없으면 리턴
        if 'query' not in request.args :
            return {"result":"fail", "error":"검색어는 필수입니다."}, 400
        
        # params에 있던 값 변수로 저장 (딕셔너리여서 .get() 도 가능하다.)
        keyword = request.args.get('query')

        # 네이버 API 호출한다.
        # API 호출하는 라이브러리 requests
        
        # 파이썬 코드로 GET, POST, PUT, DELETE API를
        # 처리해주는 라이브러리가 requests 다.
		
        # openAPI 에서 제공하는 url, params
        # params 안에는 내가 설정한 값 + 옵션들
        # openAPI 를 사용할 수 있는 아이디 값 과 시크릿 값 입력
        url = 'https://openapi.naver.com/v1/search/news.json'
        params = {'query' : keyword,
                  'display' : 30,
                  'sort' : 'date'}
        headers = {'X-Naver-Client-Id' : Config.X_NAVER_CLIENT_ID,
                   'X-Naver-Client-Secret' : Config.X_NAVER_CLIENT_SECRET}
		
        # 값을 requests의 get()함수 사용해서 받아주기
        response = requests.get( url, params= params, headers= headers)
        
        # 응답으로부터 데이터를 JSON으로 받는다.
        # 포스트맨 응답 바디에 JSON으로 되어있어서 가능하다.
        response = response.json()
        print( response )

        return {"result" : "success", 
                "items" : response['items'], 
                "count" : len(response['items'])}