API 개발/Open API

[api] open api , python request 라이브러리 사용법

코끼리똥11 2024. 5. 31. 17:50

requests 라이브러리는 파이썬에서 HTTP 요청을 보내고 응답을 처리하는 데 사용되는 간편하고 강력한 라이브러리입니다. 웹 서비스와의 상호작용을 쉽게 만들기 위해 설계되었으며, HTTP 요청을 보내는 데 필요한 많은 기본적인 기능을 제공합니다.

주요 기능

  1. HTTP 메소드 지원: requests는 GET, POST, PUT, DELETE, HEAD, OPTIONS, PATCH와 같은 모든 HTTP 메소드를 지원합니다.
  2. 간단한 API: 사용하기 쉽고 간결한 API를 제공하여, 복잡한 작업도 간단한 코드로 수행할 수 있습니다.
  3. 응답 처리: 요청에 대한 응답을 쉽게 처리할 수 있으며, JSON 응답을 파싱하는 기능도 제공합니다.
  4. 세션 지원: 세션 객체를 사용하여 여러 요청 간에 설정(쿠키, 헤더 등)을 유지할 수 있습니다.
  5. 파일 업로드/다운로드: 파일 업로드와 다운로드를 쉽게 처리할 수 있습니다.
  6. 타임아웃: 요청에 대한 타임아웃을 설정하여 일정 시간 동안 응답이 없으면 요청을 중지할 수 있습니다.
  7. SSL 인증서 검증: SSL 인증서를 자동으로 검증하여 보안 통신을 지원합니다.

라이브러리 설치

pip install requests

 

open 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

 

 

application 에 가서 client ID ,secret 을 발급받는다.

 

네이버에서 제공하는 양식에따라 postman에서 데이터를 불러온다.

 

 

데이터가 출력되는데 

request 함수를 사용하여 python에서 작동되게 해보겠다.

from flask import request
from flask_restful import Resource

import requests
from config import Config
class NewsSearchResiurce(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=url,params=params,headers=headers)
        #응답으로부터 데이터를 json으로 받는다.
        response=response.json()
        return{"result":"success",
               "items":response['items'],
               "count": len(response['items'])}

 

이 코드는 Flask와 Flask-RESTful을 사용하여 네이버의 뉴스 검색 API를 호출하는 RESTful API를 구현한 것입니다. 주요 부분을 간단히 설명하겠습니다:

  1. 라이브러리 임포트:
    • flask: 웹 애플리케이션 프레임워크.
    • flask_restful: RESTful API를 쉽게 만들 수 있게 도와주는 확장.
    • requests: HTTP 요청을 보내고 응답을 처리하기 위한 라이브러리.
    • config: 설정 정보 (API 키 등)를 포함하는 모듈.
  2. 클래스 정의:
    • NewsSearchResource 클래스는 Resource를 상속받아 정의됩니다.
    • get 메서드는 GET 요청을 처리합니다.
  3. 검색어 확인:
    • 요청에 query 파라미터가 포함되어 있는지 확인합니다.
    • query 파라미터가 없으면 에러 메시지와 함께 400 상태 코드를 반환합니다.
    • query 파라미터가 있으면 검색어를 keyword 변수에 저장합니다.
  4. 네이버 API 호출:
    • url, params, headers를 설정하여 네이버 뉴스 검색 API에 요청을 보냅니다.
    • requests.get 메서드를 사용하여 GET 요청을 보냅니다.
  5. 응답 처리:
    • API 응답을 JSON 형식으로 파싱합니다.
    • 결과를 포함한 JSON 응답을 반환합니다. 여기에는 검색 결과 항목과 항목의 개수가 포함됩니다.

이 코드는 네이버 뉴스 검색 API를 호출하고, 그 결과를 사용자에게 반환하는 기능을 합니다.

 

 

이 후 위 코드를 AWS Lambda 환경에서 서버리스로 동작하게 하기위해 연동하는 파일을 만든다.

import serverless_wsgi
from flask import Flask
from flask_restful import Api

from resources.news import NewsSearchResiurce

app = Flask(__name__)
api=Api(app)



api.add_resource(NewsSearchResiurce, '/news/search')

def handler(event,context):
    return serverless_wsgi.handle_request(app,event,context)


if __name__=='__main__':
    app.run()

 

postman으로 확인해보면

 

데이터가 추출된걸 볼 수 있다.