GPTs와 FastAPI로 베스트셀러 목차 생성기 구축

이 포스팅에서는 FastAPI를 활용하여 교보문고의 베스트셀러 책 목록과 목차를 자동으로 가져오는 API를 구축하고, 이를 GPTs와 통합하는 방법을 설명합니다. 이 과정을 통해 효율적으로 책의 목차를 생성하고, 사용자에게 유용한 정보를 제공하는 시스템을 개발할 수 있습니다.


1. FastAPI란 무엇인가?

FastAPI는 Python 기반의 현대적인 웹 프레임워크로, 고성능 비동기 웹 애플리케이션을 빠르고 쉽게 구축할 수 있게 해줍니다. FastAPI는 다음과 같은 주요 장점을 가지고 있습니다:

  • 자동화된 문서화: API 문서를 자동으로 생성하여 개발자와 사용자 모두에게 유용한 정보를 제공합니다.
  • 높은 성능: Starlette와 Pydantic을 기반으로 하여 매우 빠른 성능을 자랑합니다.
  • 간단한 코드 작성: 최소한의 코드로도 복잡한 기능을 구현할 수 있습니다.
  • 데이터 검증: 입력 데이터의 유효성을 자동으로 검증하여 오류를 줄입니다.

2. API 서버 구축하기

이제 FastAPI를 사용하여 교보문고의 베스트셀러 목록과 책 목차를 가져오는 API 서버를 구축해보겠습니다.

2.1 환경 설정

우선 Python 환경을 설정하고 필요한 라이브러리를 설치합니다.

pip install fastapi uvicorn requests

2.2 FastAPI 서버 구현

FastAPI 서버를 구현하여 교보문고의 베스트셀러 목록과 책 목차를 가져오는 두 개의 엔드포인트를 만듭니다.


from fastapi import FastAPI
import requests
from bs4 import BeautifulSoup

app = FastAPI()

@app.get("/best_sellers")
def get_best_sellers(keyword: str):
    url = f"https://www.kyobobook.co.kr/bestSellerNew/bestseller.laf?mallGb=KOR&linkClass=&range=0&key={keyword}"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    titles = [tag.text for tag in soup.select('div.title a')]
    return {"titles": titles[:5]}

@app.get("/table_of_contents")
def get_table_of_contents(book_url: str):
    response = requests.get(book_url)
    soup = BeautifulSoup(response.text, 'html.parser')
    contents = [tag.text for tag in soup.select('div.toc')]
    return {"contents": contents}
            

3. API 퍼블릭 도메인에 연결하기

로컬에서 FastAPI 서버를 실행한 후, NGrok을 사용하여 퍼블릭 도메인에 연결합니다. 이를 통해 외부에서도 API에 접근할 수 있게 됩니다.

3.1 FastAPI 서버 실행

uvicorn main:app --reload

3.2 NGrok을 이용한 퍼블릭 도메인 연결

NGrok을 설치하고 실행하여 로컬 서버를 퍼블릭 도메인에 연결합니다.

ngrok http 8000

NGrok이 제공하는 퍼블릭 URL을 사용하여 API를 테스트할 수 있습니다.

4. GPTs와 통합하기

GPTs는 OpenAI의 강력한 언어 모델로, 자연어 처리와 생성 작업을 수행할 수 있습니다. 이 프로젝트에서는 GPTs를 사용하여 FastAPI로 구현한 API를 통합하고 자동화된 목차 생성을 지원합니다.

4.1 GPTs 액션 정의

GPTs에서 사용할 액션을 정의합니다. 액션은 특정 작업을 수행하는 함수로, 입력 파라미터와 출력 결과를 정의합니다.


{
    "actions": [
        {
            "name": "get_best_sellers",
            "description": "키워드에 해당하는 베스트셀러 목록을 가져옵니다.",
            "parameters": {
                "keyword": "string"
            }
        },
        {
            "name": "get_table_of_contents",
            "description": "책 URL에 해당하는 목차를 가져옵니다.",
            "parameters": {
                "book_url": "string"
            }
        }
    ]
}
            

4.2 GPTs 스키마 작성

GPTs와 API를 통합하기 위해 OpenAPI 스키마를 작성합니다. 이는 GPTs가 API의 엔드포인트를 이해하고 호출할 수 있도록 도와줍니다.


{
    "openapi": "3.0.0",
    "info": {
        "title": "베스트셀러 목차 API",
        "version": "1.0.0"
    },
    "paths": {
        "/best_sellers": {
            "get": {
                "summary": "베스트셀러 목록 가져오기",
                "parameters": [
                    {
                        "name": "keyword",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "성공",
                        "content": {
                            "application/json": {
                                "example": {
                                    "titles": ["책1", "책2", "책3", "책4", "책5"]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/table_of_contents": {
            "get": {
                "summary": "책 목차 가져오기",
                "parameters": [
                    {
                        "name": "book_url",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "성공",
                        "content": {
                            "application/json": {
                                "example": {
                                    "contents": ["목차1", "목차2", "목차3", "목차4", "목차5"]
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
            

5. 테스트 및 배포

구축한 API를 철저히 테스트하여 오류가 없는지 확인하고, 최종적으로 GPTs 스토어에 배포합니다. 이를 통해 다른 사용자들도 쉽게 API를 활용할 수 있습니다.

5.1 API 테스트

API의 각 엔드포인트를 테스트하여 예상대로 작동하는지 확인합니다. 이를 통해 오류를 발견하고 수정할 수 있습니다.


import requests

# 베스트셀러 목록 테스트
response = requests.get("http://your-ngrok-url/best_sellers?keyword=AI")
print(response.json())

# 책 목차 테스트
book_url = "http://kyobobook.co.kr/book/detail/9788965709999"
response = requests.get(f"http://your-ngrok-url/table_of_contents?book_url={book_url}")
print(response.json())
            

5.2 GPTs 스토어에 배포

모든 테스트를 마친 후, GPTs 스토어에 API를 배포하여 다른 사용자들이 사용할 수 있도록 합니다. 이를 통해 글로벌 사용자들에게 유용한 정보를 제공할 수 있습니다.

결론

FastAPI와 GPTs를 활용한 베스트셀러 목차 생성기 구축 과정은 매우 유용하고 실용적인 프로젝트입니다. 이 시스템을 통해 사용자는 교보문고의 베스트셀러 목록과 책 목차를 자동으로 가져와서 효율적으로 정보를 활용할 수 있습니다. 또한, GPTs와의 통합을 통해 더욱 강력하고 유연한 시스템을 구축할 수 있습니다. 이 글에서 설명한 단계별 과정을 통해 여러분도 쉽게 베스트셀러 목차 생성기를 구축해보시기 바랍니다.

https://www.youtube.com/watch?v=JBL4vhwUAnc


  • 카카오톡 메시지

댓글 쓰기

다음 이전