키워드를 검색하면 키워드에 대한 뉴스를 나오게 하는 뉴스 검색 API를 만들어 보려고 한다.
API 만들기 전에, 기본 셋팅 하기
(1). serverless로 aws-openapi-server를 만들고 vscode로 열어주었다.
https://codebunny99.tistory.com/105
(2). 도커 설정을 해준다.
https://codebunny99.tistory.com/108
(3). 깃허브와 연결해준다.
https://codebunny99.tistory.com/106
(4). 깃허브 액션즈 설정을 한다.
https://codebunny99.tistory.com/107
API 생성하기
먼저 API에 대한 설명을 밑에서 읽을 수 있다.
https://developers.naver.com/docs/serviceapi/search/news/news.md#%EB%89%B4%EC%8A%A4
vscode 작성하기
먼저, vscode 터미널 cmd 창에서 requests를 설치한다.
pip install requests
requirements.txt 파일에 넣어준다.
config.py 파일을 작성한다.
이 안에, 네이버 API 키 값을 넣어준다.
네이버 API 키 값은,
https://developers.naver.com/main/
이곳에서 회원가입 한 후, Application 에서 내 애플리케이션 메뉴를 클릭하면,
이곳에서 볼 수 있다.
app.py를 작성한다.
import serverless_wsgi
from flask import Flask
from flask_restful import Api
from resources.news import NewSearchResource
app = Flask(__name__)
api = Api(app)
api.add_resource( NewSearchResource , '/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
# 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'])}
이런 에러가 뜬다면,
도커를 실행한 채로 sls deploy를 하도록 하자.
Postman
Params 부분을 작성해주고,
헤더 부분에 키 값을 입력해준다
로컬에서 실행한 결과( cmd에 flask run 명령어 실행)는 이렇게 뜬다.
vscode에 sls deploy시에, 결과값은 이렇게 뜬다
깃허브 액션즈에서도 구동되는지 확인하자.
'RestFul API' 카테고리의 다른 글
instargram 사진 포스팅 API (1) 기본 세팅(Setting) 하기 (0) | 2024.05.30 |
---|---|
HTTP 요청을 위한 복잡한 작업을 단순화하는 requests 라이브러리 (0) | 2024.05.30 |
RestFul API를 Serverless Framework로 연결하기 (0) | 2024.05.23 |
JWT 인증 토큰의 로그인 만료 시간 설정하기 (0) | 2024.05.22 |
JWT(JSON WEP TOKEN) 암호화 로그아웃 API 만들기 (0) | 2024.05.22 |