키워드를 검색하면 키워드에 대한 뉴스를 나오게 하는 뉴스 검색 API를 만들어 보려고 한다.
API 만들기 전에, 기본 셋팅 하기
(1). serverless로 aws-openapi-server를 만들고 vscode로 열어주었다.
https://codebunny99.tistory.com/105
RestFul API를 Serverless Framework로 연결하기
*** 아나콘다 프롬프트에서 가상환경 만들면서 flask에 필요한 라이브러리를 다운 받아준다 *** conda create -n lambda_310 python=3.10pip install flask flask-restful mysql-connector-python psycopg2-binary passlib flask-jwt-exte
codebunny99.tistory.com
(2). 도커 설정을 해준다.
https://codebunny99.tistory.com/108
AWS 서버 연결 시, 라이브러리 용량 줄여주는 Docker(도커) 설치하기
https://www.docker.com/products/docker-desktop/ Docker Desktop: The #1 Containerization Tool for Developers | DockerDocker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or
codebunny99.tistory.com
(3). 깃허브와 연결해준다.
https://codebunny99.tistory.com/106
Serverless로 만든 프로젝트 폴더를 깃허브(Github)와 연결하기
cmd(명령프롬프트) serverless 라고 입력한다 serverless 방향키로 Flask API로 이동한다 깃허브(Github) New repository하기 VSCode VSCode Serverless로 아까 만든 폴더 열고, 가상환경
codebunny99.tistory.com
(4). 깃허브 액션즈 설정을 한다.
https://codebunny99.tistory.com/107
Serverless로 만든 프로젝트를 깃허브 액션즈(Github actions)로 자동화하기
사용할 repository를 클릭하고 Settings로 이동한다. Settings에서 Security -> secrets and variables -> Actions로 이동하고 New repository secret 버튼을 클릭한다. https://codebunny99.tistory.com/104 완료
codebunny99.tistory.com
API 생성하기
먼저 API에 대한 설명을 밑에서 읽을 수 있다.
https://developers.naver.com/docs/serviceapi/search/news/news.md#%EB%89%B4%EC%8A%A4
검색 > 뉴스 - Search API
검색 > 뉴스 뉴스 검색 개요 개요 검색 API와 뉴스 검색 개요 검색 API는 네이버 검색 결과를 뉴스, 백과사전, 블로그, 쇼핑, 웹 문서, 전문정보, 지식iN, 책, 카페글 등 분야별로 볼 수 있는 API입니다
developers.naver.com
vscode 작성하기
먼저, vscode 터미널 cmd 창에서 requests를 설치한다.
pip install requests
requirements.txt 파일에 넣어준다.
config.py 파일을 작성한다.
이 안에, 네이버 API 키 값을 넣어준다.
네이버 API 키 값은,
https://developers.naver.com/main/
NAVER Developers
네이버 오픈 API들을 활용해 개발자들이 다양한 애플리케이션을 개발할 수 있도록 API 가이드와 SDK를 제공합니다. 제공중인 오픈 API에는 네이버 로그인, 검색, 단축URL, 캡차를 비롯 기계번역, 음
developers.naver.com
이곳에서 회원가입 한 후, 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 |