RestFul API

관련 키워드가 포함된 뉴스 검색 API 만들기

567Rabbit 2024. 5. 29. 17:10

 

키워드를 검색하면 키워드에 대한 뉴스를 나오게 하는 뉴스 검색 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시에, 결과값은 이렇게 뜬다

 

 

 

 

 

깃허브 액션즈에서도 구동되는지 확인하자.