소개
GPTs 챌린지 15번째 - 뉴스 & 주식 분석을 마치고, 당장 유용한 GPT를 만드는 작업으로 시도
뉴스 기반 주식 분석가
(구글 뉴스를 기반으로 주식 뉴스를 분석해주는 GPT - SerpAPI 활용)
https://chatgpt.com/g/g-67ee75fca9208191bea481e3bb431528-nyuseu-giban-jusig-bunseogga
각종 회식 및 만남에 적절한 식당을 찾고자 하는 유용한 GPTs 만들기
일정, 장소(지하철역), 인원수를 말하면 예약 가능한 장소 + 할인 가능한 곳을 추천
serpAPI.com > Naver Booking Results API를 활용하여 검색에 활용토록 함
진행 방법
serpAPI.com 접속하기 > 회원가입(구굴 간단 가입) > Your Account에서 나의 API Key 확인
Naver Search API 좌측 메뉴바에서 찾기
ChatGPT > 내 GPT > 만들기(Create) > "예약할 수 있는 식당을 찾는 GPTs를 만들려고 해. serpAPI를 이용할거야" 입력
구성(Configure)로 이동해서 ChatGPT가 기본 구성으로 만든 내용 확인 및 업그레이드 시작
(개떡같이 얘기해도 찰떡같이 만들어주는 ChatGPT~ 조아!!!)설명 및 대화 스타터는 그냥 두고, ChatGPT가 만들어준 지침(instruction) 초안 업그레이드 하기 - 샘호트만님의 GPTs 이용
https://chatgpt.com/g/g-Vr46yyv6A-caejjigpiti-jwipitiseu-coan-seopoteo-made-by-saemhoteuman
ChatGPT 4o 로 살짝(?) 살을 붙인 지침을 위 GPTs에 투척
샘호트만님 GPTs 초안 + 자체 업그레이드 + 업그레이드 + 업그레이드 by 췟GPT로 완성된 지침
## Primary Role Definition 이 GPT는 사용자가 입력한 날짜, 시간, 지역, 인원 정보를 바탕으로 회식, 스터디, 모임 장소를 실시간으로 추천해주는 도우미 역할을 합니다. 할인 중인 예약처를 우선적으로 안내하며, 예약 시간, 주소, 가격 등을 한눈에 확인할 수 있도록 구성합니다. ## Context 회식, 스터디, 소규모 모임 등 다양한 목적의 예약 가능한 장소를 보여주고, API를 통해 실시간 예약 가능 여부와 할인 정보를 제공합니다. 특히 **"할인", "시간", "인원"**을 기준으로 필터링하여 사용자에게 최적의 장소를 추천하는 것이 목적입니다. ## Instructions 1. 사용자가 입력한 자연어 요청을 분석하여 다음 요소 추출: 날짜, 시간, 지역, 인원, 모임 목적 2. `booking_results.items` API에서 해당 조건에 맞는 예약 가능 장소 정보를 가져옵니다. 3. 가져온 장소 중 예약 마감 시간이 지나지 않은 항목만 필터링합니다 (`available_until` 확인). 4. 할인 중인 항목은 최우선으로 정렬하며, 그 다음 예약 시간, 가격 순으로 자동 정렬합니다. 5. 사용자에게 아래 포맷으로 2~3곳의 예약 정보를 표시합니다: - 장소명 + 이모지 - 예약 가능 시간 - 인원 수 제한 - 할인 정보 및 가격 - 주소 - 예약 마감 시간 - 예약 링크 - 썸네일 ## Conversation Flow Step 1: 사용자에게 “언제, 어디서, 몇 명 모임인가요?” 질문 Step 2: 자연어로 입력된 요청을 분석하여 예약 검색 조건 생성 Step 3: 예약 가능한 장소 검색 → 할인/조건 순으로 정렬 Step 4: 장소 2~3곳 카드 형식으로 출력 Step 5: “더 찾아드릴까요?” 혹은 “다른 조건도 있으신가요?”로 피드백 루프 ## Guideline - 할인 여부가 있으면 상단에 표시 (예: **15% 할인 중!**) - 예약 마감 시간이 오늘 내라면 강조 표시 (예: 🔔 오늘 오후 5시 마감!) - 가능한 장소가 없으면 “조건을 조금 바꿔보시겠어요?” 제안 - 출력은 **카드 형태**로 명확하고 시각적으로 보여줄 것 - 장소마다 썸네일 이미지를 함께 제공해 시각적 인지도 높이기 ## Output Format Guide - **장소명 + 이모지** - 예약 가능 시간: 오후 6시 / 오후 8시 - 인원 수: 최대 10명 - 가격: ₩300,000 → ₩255,000 (**15% 할인**) - 예약 마감: 오늘 오후 5시 - 주소: ○○구 ○○로 456 (강남역 2번 출구 200m) - 예약 링크: [바로가기] - 썸네일 이미지 표시 ## Output Format Example [🍽️ 도쿄등심 강남점] 예약 가능 시간: 오후 6시 / 오후 8시 인원 수: 최대 10명 가격: ₩300,000 → ₩255,000 (**15% 할인**) 예약 마감: 오늘 오후 5시 주소: 강남구 ○○로 456 (강남역 2번 출구 200m) 예약 링크: [바로가기] 썸네일: (이미지 첨부) [☕ 더 테라스 스터디카페] 예약 가능 시간: 오후 1시 / 오후 4시 인원 수: 최대 6명 가격: ₩30,000 예약 마감: 오늘 오후 3시 주소: 마포구 ○○로 89 (마포구청역 1번 출구 400m) 예약 링크: [바로가기] 할인: 없음 썸네일: (이미지 첨부)이제 '작업'으로 가서 API 연동을 위한 스키마 작성을 하자!!! "ActionsGPT 도움 받기" 클릭!!!
지침에 있는 위 중요 두 단락만 우선 투척!
자신만만하게 대답하는 ActionsGPT!! (얼마나 버그없이 잘 하려고!!!)
결과적으로 json 구문 오류로 Claude에 몇 번 다녀오고,
한글 encoding 문제로 2시간 정도 티키타카 힘겨룸을 한 뒤에,
드.디.어. 작동되는 code 스키마 전문
{ "openapi": "3.1.0", "info": { "title": "Real-time Venue Recommender", "description": "날짜, 시간, 지역, 인원을 바탕으로 회식, 스터디, 모임 장소를 할인 기준으로 실시간 추천합니다. SerpAPI의 Naver Booking (nexearch) 엔진을 사용하며, 결과는 booking_results 필드에 제공됩니다.", "version": "1.1.3" }, "servers": [ { "url": "https://serpapi.com", "description": "SerpAPI 엔진 서버" } ], "paths": { "/search.json": { "get": { "operationId": "searchBookingPlaces", "summary": "조건에 따라 할인 중인 예약 장소 검색", "description": "지역, 인원, 시간, 할인 여부를 기준으로 Naver Booking 예약 결과를 검색합니다.", "parameters": [ { "name": "engine", "in": "query", "required": true, "schema": { "type": "string", "enum": ["naver"] }, "description": "고정 값: 'naver'" }, { "name": "query", "in": "query", "required": true, "schema": { "type": "string" }, "description": "검색 키워드 (예: 강남 회식 장소)" }, { "name": "location", "in": "query", "required": false, "schema": { "type": "string" }, "description": "검색할 지역" }, { "name": "hl", "in": "query", "required": false, "schema": { "type": "string", "default": "ko" }, "description": "언어 설정 (기본: 한국어)" }, { "name": "num", "in": "query", "required": false, "schema": { "type": "integer", "default": 10 }, "description": "검색 결과 수" }, { "name": "start", "in": "query", "required": false, "schema": { "type": "integer" }, "description": "페이지 시작 인덱스" }, { "name": "time", "in": "query", "required": false, "schema": { "type": "string", "format": "time" }, "description": "원하는 예약 시간" }, { "name": "people", "in": "query", "required": false, "schema": { "type": "integer" }, "description": "인원 수" }, { "name": "discounted", "in": "query", "required": false, "schema": { "type": "boolean", "default": true }, "description": "할인 여부" }, { "name": "device", "in": "query", "required": false, "schema": { "type": "string", "enum": ["desktop", "mobile"] }, "description": "사용자 디바이스" }, { "name": "api_key", "in": "query", "required": true, "schema": { "type": "string" }, "default": "여기에 개인별 API Key값을 넣어요", "description": "SerpAPI 키는 위에 넣어요" } ], "responses": { "200": { "description": "예약 가능한 장소 목록", "content": { "application/json": { "schema": { "type": "object", "properties": { "search_metadata": { "type": "object" }, "booking_results": { "type": "object", "properties": { "items": { "type": "array", "items": { "type": "object", "properties": { "title": { "type": "string" }, "available_until": { "type": "string" }, "thumbnail": { "type": "string", "format": "uri" }, "link": { "type": "string", "format": "uri" }, "price": { "type": "string" }, "extracted_price": { "type": "number", "format": "float" }, "discount": { "type": "string" } } } }, "see_more_link": { "type": "string", "format": "uri" } } } } } } } }, "401": { "description": "API 키 인증 실패" }, "500": { "description": "서버 오류" } } } } } }막힐 때마다 풀어주고, limit을 다 하고 쿨하게 떠나버리는 Claude를 버릴 수가 없네... 아놔!
썸네일까지 작동이 잘 되는 거 확인!!!
ActionsGPT와의 티키타카가 궁금하신 분들을 위해서 공유
결과와 배운 점
SerpAPI.com에서 API 연동 스키마 작성시에 꿀팁 방출
API 소개 전문을 통째로 복붙해서 GPTs 제작 아이디어 묻기
아래 영어 전문을 ChatGPT에게 물으면, 제공되는 API 정보들을 토대로 어떤 GPTs 제작이 가능할 지 아이디어 list up!
스키마 작성을 위해서 예시 json 활용하기
아래 우측의 json 예시를 ActionsGPT에 같이 붙여넣기 하면 훠~~~얼~~~씬 작업 시간을 단축시킬 수 있답니다!!!
한 달에 100번의 조회수가 free-user에게 전부이지만, 그래도 연습하기에는 굉장히 혜.자.로.운. serpAPI.com! 모두 잘 활용해 보시길요!!!