자 이제 아래의 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 해서 서버에 배포 한 후 잘되는지 확인해보자.
이렇게 잘뜨면 성공적으로 배포된 것이다.
'RestfulAPI' 카테고리의 다른 글
Flask RESTful API를 사용한 네이버 뉴스 검색 API 호출하기(1) (2) | 2024.05.29 |
---|---|
Doker 설치하여 AWS에 있는 Lamda 에 배포하기 (2) | 2024.05.28 |
Serverless Framework와 Github Acitons를 이용한 AWS 자동 배포 (0) | 2024.05.24 |
AWS Serverless Framework 설치 방법 (0) | 2024.05.23 |
RestfulAPI Flask에서 JWT 사용하여 로그인 및 로그아웃하기 (2) | 2024.05.23 |