Restful API

[Restful API] Naver 뉴스 검색 API 사용

건휘맨 2024. 5. 29. 14:52

https://developers.naver.com/apps/#/register

 

애플리케이션 - NAVER Developers

 

developers.naver.com

링크에 들어가서 로그인 후

애플리케이션 이름과 사용할 API, 비로그인 오픈 API 서비스 환경을 알맞게 지정하고

API 이용 신청

Client ID, Client Secret 키를 받는다.

 

https://developers.naver.com/docs/serviceapi/search/news/news.md#%EB%89%B4%EC%8A%A4-%EA%B2%80%EC%83%89-%EA%B2%B0%EA%B3%BC-%EC%A1%B0%ED%9A%8C

뉴스 검색 API 를 사용해보자!

 

 


포스트맨에서 테스트

헤더 부분에 X-naver-Client-Id 와 X-Naver-Client-Secret 을 넣고 테스트

 

 

해당 API 페이지에 들어가 HTTP 메서드 확인하여 포스트맨에 경로 세팅

Visual Studio Code에 들어가 작업

 

app.py 경로 설정

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()

 

네이버의 API 를 호출하기 위해서

파이썬 코드로 GET, POST, PUT, DELETE api 를 처리해주는 

requests 를 사용

 

헤더에 인증키는 config.py 에 변수 처리 

 

필요 없는 데이터들인

뉴스가 업로드 된 날짜,시간 등은 버리고

리스폰스의 'item'부분만을 가져온다.

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=params,
                     headers=headers)

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

        return {"result":"success",
                "items":response['items'],
                "count":len(response['items'])}

 

포스트맨에서 테스트

 

count 까지 정상적으로 나온다.

 

끝~