[api] open api , python request 라이브러리 사용법
requests 라이브러리는 파이썬에서 HTTP 요청을 보내고 응답을 처리하는 데 사용되는 간편하고 강력한 라이브러리입니다. 웹 서비스와의 상호작용을 쉽게 만들기 위해 설계되었으며, HTTP 요청을 보내는 데 필요한 많은 기본적인 기능을 제공합니다.
주요 기능
- HTTP 메소드 지원: requests는 GET, POST, PUT, DELETE, HEAD, OPTIONS, PATCH와 같은 모든 HTTP 메소드를 지원합니다.
- 간단한 API: 사용하기 쉽고 간결한 API를 제공하여, 복잡한 작업도 간단한 코드로 수행할 수 있습니다.
- 응답 처리: 요청에 대한 응답을 쉽게 처리할 수 있으며, JSON 응답을 파싱하는 기능도 제공합니다.
- 세션 지원: 세션 객체를 사용하여 여러 요청 간에 설정(쿠키, 헤더 등)을 유지할 수 있습니다.
- 파일 업로드/다운로드: 파일 업로드와 다운로드를 쉽게 처리할 수 있습니다.
- 타임아웃: 요청에 대한 타임아웃을 설정하여 일정 시간 동안 응답이 없으면 요청을 중지할 수 있습니다.
- 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를 구현한 것입니다. 주요 부분을 간단히 설명하겠습니다:
- 라이브러리 임포트:
- flask: 웹 애플리케이션 프레임워크.
- flask_restful: RESTful API를 쉽게 만들 수 있게 도와주는 확장.
- requests: HTTP 요청을 보내고 응답을 처리하기 위한 라이브러리.
- config: 설정 정보 (API 키 등)를 포함하는 모듈.
- 클래스 정의:
- NewsSearchResource 클래스는 Resource를 상속받아 정의됩니다.
- get 메서드는 GET 요청을 처리합니다.
- 검색어 확인:
- 요청에 query 파라미터가 포함되어 있는지 확인합니다.
- query 파라미터가 없으면 에러 메시지와 함께 400 상태 코드를 반환합니다.
- query 파라미터가 있으면 검색어를 keyword 변수에 저장합니다.
- 네이버 API 호출:
- url, params, headers를 설정하여 네이버 뉴스 검색 API에 요청을 보냅니다.
- requests.get 메서드를 사용하여 GET 요청을 보냅니다.
- 응답 처리:
- 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으로 확인해보면
데이터가 추출된걸 볼 수 있다.