본문 바로가기

RestfulAPI

Flask RESTful API를 사용한 네이버 뉴스 검색 API 호출하기(2)

자 이제 아래의 RestfulAPI 요청을 했을 때 로컬에서 실행 되도록 코드를 짜보자.

하기전에 다운 받아야 하는 라이브러리가 있다.

pip install requests 를 터미널에서 작성하면 된다.

requests 라는 라이브러리인데 request랑 헷갈릴 수 있으니 조심하자.

터미널을 켜고 다운 받아준다. 아래와 같이 뜨면 성공적으로 된것이다.

 

 

app.py

GET 방식으로 요청을 할 것이고 경로는 /news/search 경로에서 NewsSearchResource 클래스를 리소스 할 것이다.

import serverless_wsgi
from flask import Flask
from flask_restful import Api

from resources.news import NewsSearchResource

app = Flask(__name__)
api = Api(app)

api.add_resource( NewsSearchResource , '/news/search')

def handler(event, context) :
    return serverless_wsgi.handle_request(app, event, context)

if __name__ == '__main__':
    app.run()

그다음 resources 폴더 만들어 주고 news.py 파일 만들어 준다음 아래와 같은 코드 작성해준다.

 

from flask import request
from flask_restful import Resource

import requests

from config import Config


class NewsSearchResource(Resource):

    def get(self):
        
        if 'query' not in request.args :
            return {'result' : 'fail',
                    'error' : '검색어는 필수입니다.'}, 400
        
        keyword = request.args['query']
        
        # 네이버 API를 호출한다.

        # 파이썬 코드로 GET, POST, PUT, DELETE API 를
        # 처리해주는 라이브러리가 requests 다.

        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}
        
        response = requests.get(url, params, headers= headers)

        # 응답으로부터 데이터를 json 으로 받는다.
        response = response.json()

        print(response)
        
        return {'rusult' : 'success',
                'item' :response['items'],
                'count': len(response['items'])
                }

코드 설명

import requests
  • requests: 파이썬에서 HTTP 요청을 보내고 응답을 처리하는데 사용되는 라이브러리이다.

쿼리 파라미터 확인

if 'query' not in request.args:
    return {'result': 'fail', 'error': '검색어는 필수입니다.'}, 400
  • request.args: 클라이언트가 보낸 쿼리 파라미터를 담고 있는 딕셔너리이다.
  • 'query': 검색어 파라미터가 있는지 확인한.

검색어 추출

keyword = request.args['query']
  • request.args['query']: 쿼리 파라미터에서 검색어를 추출한다.

네이버 뉴스 검색 API 호출 준비

        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}
  • url: 네이버 뉴스 검색 API의 엔드포인트 URL이다.
  • params: API에 보낼 파라미터이다. 검색어(query), 표시할 뉴스 개수(display), 정렬 기준(sort)를 설정한다.
  • headers: API 요청 헤더이다. 네이버 API 클라이언트 ID와 시크릿 키를 포함한다.

API 호출 및 응답 처리

response = requests.get(url, params=params, headers=headers)
response = response.json()
  • requests.get(): 설정한 URL과 파라미터, 헤더를 사용해 GET 요청을 보낸다.
  • response.json(): 응답을 JSON 형식으로 변환한다.

응답 데이터 반환

return {'result': 'success', 'items': response['items'], 'count': len(response['items'])}
  • result: 성공 여부를 나타낸다.
  • items: 뉴스 항목들을 포함한다.
  • count: 반환된 뉴스 항목의 개수를 나타낸다.

config.py 파일을 만들어 주고 아래와 같이 작성하는데, ID값과 SECRET 값은 네이버에서 만든 애플리케이션 아이디와 키값을 넣어주면 된다.(이전 블로그 글 참고)

 

마지막으로 requirements.txt 파일에 아래 3개의 코드를 넣어준다.

로컬에서 실행 했을때 잘되는 모습이다.

Flask==1.1.4
Werkzeug==1.0.1
markupsafe==2.0.1

flask-restful

serverless-wsgi

requests == 2.25.0

이제 sls deploy 해서 서버에 배포 한 후 잘되는지 확인해보자.

이렇게 잘뜨면 성공적으로 배포된 것이다.