Skip to content

⚙️ [기능추가][Url분석] url 분석 API 정상 작동을 위한 Place 추출 프롬프트 및 Ollama API 연결 개발 필요 #15

@Cassiiopeia

Description

@Cassiiopeia

📝 현재 문제점

  • 현재 기본적인 Swagger API 를 구현해야합니다
  • /api/test/scrape 해당 내부로직으로 url에서 (현재 인스타그램 post만 지원) 으로 추출하고
  • 여기에서 content 를 추춣해서
    예시
curl -X 'POST' \
  'https://ai.mapsy.suhsaechan.kr/api/test/scrape' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "url": "https://www.instagram.com/p/DO-u-YwD6Rt/"
}'
{
  "platform": "instagram",
  "content_type": "post",
  "url": "https://www.instagram.com/p/DO-u-YwD6Rt/",
  "author": "jamsilism",
  "caption": "저장해두면 도움 되는 송파 판초밥 맛집4\n\n송파 초밥 맛집은 계속 업데이트 됩니다. \n잠실리즘 (@jamsilism)을 팔로우 해두세요! \n\n가게정보 : \n\n1. #스시호 (@songpa_sushiho )\n-위치_서울 송파구 가락로 98길\n-영업시간_11:30-21:30\n-스시호모듬초밥 15,000원, 스시호스페셜초밥 30,000원\n\n2. #시스스시 (@sis_sushi )\n-위치_서울 송파구 백제고분로43길 8, 1층 2호\n-영업시간_11:30-21:00\n-SET A 25,000원, SET B 19,000원\n\n3. #김태완스시 (@kimtaewansushisongpa )\n-위치_서울 송파구 오금로 148\n-영업시간_10:30-22:00\n-오늘의초밥 15,500원, 스페셜초밥 19,000원\n \n4. #사사노하 (@sasanohah )\n-위치_서울 송파구 백제고분로42길 4-3 101호\n-영업시간_17:00-24:00\n-사사노하 초밥(5pcs) 9,900원, 오늘의 사시미(5p) 9,900원\n\n#초밥맛집 #판초밥 #송파초밥 #잠실초밥\". ",
  "likes_count": 7454,
  "comments_count": 63,
  "posted_at": "September 24, 2025",
  "hashtags": [
    "#스시호",
    "#시스스시",
    "#김태완스시",
    "#사사노하",
    "#초밥맛집",
    "#판초밥",
    "#송파초밥",
    "#잠실초밥"
  ],
  "og_image": "https://scontent-ssn1-1.cdninstagram.com/v/t51.82787-15/553670078_17861780418481058_4694510060266984648_n.jpg?stp=c241.0.723.723a_dst-jpg_e35_s640x640_tt6&_nc_cat=105&ccb=7-5&_nc_sid=18de74&efg=eyJlZmdfdGFnIjoiQ0FST1VTRUxfSVRFTS5iZXN0X2ltYWdlX3VybGdlbi5DMyJ9&_nc_ohc=50eDJmtdUmAQ7kNvwH-HH68&_nc_oc=Adk7_9KyGyjZqxR_wsNNU3S_xdczsBMw0qGQm1i7ZEdVl9kdIaS49TB7ldSe6LL7vgg&_nc_zt=23&_nc_ht=scontent-ssn1-1.cdninstagram.com&_nc_gid=g_0a2rgatD7XQK-bKaXdww&oh=00_Afo77nEwrVrYdCMkdUEQiFXpM3yqGlmbdGk9LIlfjvzflg&oe=69779A6B",
  "image_urls": [
    "https://scontent-ssn1-1.cdninstagram.com/v/t51.82787-15/553670078_17861780418481058_4694510060266984648_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=105&ig_cache_key=MzcyODYyNDEyNDkyNDIzOTE4MA%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6InhwaWRzLjEyMDZ4MTYwOC5zZHIuQzMifQ%3D%3D&_nc_ohc=50eDJmtdUmAQ7kNvwH-HH68&_nc_oc=Adk7_9KyGyjZqxR_wsNNU3S_xdczsBMw0qGQm1i7ZEdVl9kdIaS49TB7ldSe6LL7vgg&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ssn1-1.cdninstagram.com&_nc_gid=H-kuMipfZA8Y6MgA0vYDDQ&oh=00_Afqh5yagSbwcS6NPBgOJ30Y53E-ueu59qvEoVZf3SoOweA&oe=69779A6B",
    "https://scontent-ssn1-1.cdninstagram.com/v/t51.82787-15/552610401_17861780409481058_7188881515478106835_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=102&ig_cache_key=MzcyODYyNDEyNDkyNDIxMDQ4OA%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6InhwaWRzLjEyMDZ4MTYwOC5zZHIuQzMifQ%3D%3D&_nc_ohc=RGYRsaayQVoQ7kNvwFJDifY&_nc_oc=AdnwH7U830tvPxGjmAnman6C23yCp9B9PEoNCjlMPHSIe6z9z8CzSJ_fOR_oFyKbC3A&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ssn1-1.cdninstagram.com&_nc_gid=H-kuMipfZA8Y6MgA0vYDDQ&oh=00_Afofhbf_uoGLUjzb_UtqUkMTzoeVTZosR6AQkbBeNoWqTA&oe=6977A09F",
    "https://scontent-ssn1-1.cdninstagram.com/v/t51.82787-15/552695834_17861780427481058_3269326484820856151_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=108&ig_cache_key=MzcyODYyNDEyNDkyNDIzMTc0MQ%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6InhwaWRzLjEyMDZ4MTYwOC5zZHIuQzMifQ%3D%3D&_nc_ohc=7AM6ajiF64AQ7kNvwHcYb3n&_nc_oc=Admwty9mGhVhfmOa6DvVTJcH4T_8Z1JXq0tAouD5yTgVWpX2_tRwcNHqZmpZP1CT5WM&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ssn1-1.cdninstagram.com&_nc_gid=H-kuMipfZA8Y6MgA0vYDDQ&oh=00_AfpnepwjoMc8U16VUOtfT1VogCjohNi62M5x8KFN0ybmJA&oe=69779A3D",
    "https://scontent-ssn1-1.cdninstagram.com/v/t51.82787-15/552609222_17861780436481058_4367175248315287221_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=102&ig_cache_key=MzcyODYyNDEyNDkzMjYxMzgxMA%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6InhwaWRzLjEyMDZ4MTYwOC5zZHIuQzMifQ%3D%3D&_nc_ohc=91HKwWXmSqYQ7kNvwG8vUee&_nc_oc=Adn_Ne0Z6tgJzftxAeDlSZi5dgF_H3dAPOLrH2HVtMA8crLUfaC5A40AYv6nZyenIrU&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ssn1-1.cdninstagram.com&_nc_gid=H-kuMipfZA8Y6MgA0vYDDQ&oh=00_AfpyZGr9wJIFFxmUd4rmi1IjfA3wHrxlLh2eCk_dSCPaXQ&oe=6977A757",
    "https://scontent-ssn1-1.cdninstagram.com/v/t51.82787-15/552997003_17861780478481058_6836514617344476469_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=104&ig_cache_key=MzcyODYyNDEyNDkzMjYyMDY3Mg%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6InhwaWRzLjEyMDZ4MTYwOC5zZHIuQzMifQ%3D%3D&_nc_ohc=50JbkUK07c0Q7kNvwEiELXu&_nc_oc=Admc-rAgXujtjxS2sxbfxdL0Llg_etHbSLWUduugy6yEGb8UjUE06nPGErQRusz29kU&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ssn1-1.cdninstagram.com&_nc_gid=H-kuMipfZA8Y6MgA0vYDDQ&oh=00_Afozc9pfvcpmvg_FPmoAK_Yip4N-stujQPRwt7qUKoQItQ&oe=6977BF50",
    "https://scontent-ssn1-1.cdninstagram.com/v/t51.82787-15/553885247_17861780487481058_8122404481268794428_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=111&ig_cache_key=MzcyODYyNDEyNDkzMjYwOTM3OQ%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6InhwaWRzLjEyMDZ4MTYwOC5zZHIuQzMifQ%3D%3D&_nc_ohc=u8p-RWmu5_0Q7kNvwFBuPfh&_nc_oc=AdkmDfLEHb9P4oy3BkeCKbI07yxuH8qGzB03U4OE2lBrnLpA_ZmeiF9HOtC2gVG1Rc4&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ssn1-1.cdninstagram.com&_nc_gid=H-kuMipfZA8Y6MgA0vYDDQ&oh=00_AfqbInOgmarO8x7zvRdkCRSl5Tx57qqfti0Qh3Skq-emeQ&oe=6977A7C5",
    "https://scontent-ssn1-1.cdninstagram.com/v/t51.82787-15/553642560_17861780496481058_8570492162897060294_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=111&ig_cache_key=MzcyODYyNDEyNDkzMjYyNzIwMg%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6InhwaWRzLjEyMDZ4MTYwOC5zZHIuQzMifQ%3D%3D&_nc_ohc=wEsw8iH-ihAQ7kNvwFvBN4y&_nc_oc=AdlFeNN3SVf9Vgzxa_XHu8CRN__gHE5XWxMPhmG8ys5L9VTK5tpJuKEV6SDdUX-5dbU&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ssn1-1.cdninstagram.com&_nc_gid=H-kuMipfZA8Y6MgA0vYDDQ&oh=00_AfrFLhoWyMPJFRGyWKj44yK9R5bMqsITtcufe8tnXLXglQ&oe=6977B727",
    "https://scontent-ssn1-1.cdninstagram.com/v/t51.82787-15/552767259_17861780505481058_6679934408179062404_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=106&ig_cache_key=MzcyODYyNDEyNDc5ODM4NDcxNA%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6InhwaWRzLjEyMDZ4MTYwOC5zZHIuQzMifQ%3D%3D&_nc_ohc=K3scc5e5iCcQ7kNvwHVQPh7&_nc_oc=Admc-3pECOUpsI4buTxpHbL6UqyOZo36Y-4Yln5F7crap3Qsl9HXSHJP7--bA1p1enA&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ssn1-1.cdninstagram.com&_nc_gid=H-kuMipfZA8Y6MgA0vYDDQ&oh=00_AfqJExFAXowuizpfkmIhBoXRGHrtYbXp7dKpbuQwQafRHA&oe=6977C237",
    "https://scontent-ssn1-1.cdninstagram.com/v/t51.82787-15/553688907_17861780523481058_5845047173995870701_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=106&ig_cache_key=MzcyODYyNDEyNDc5MDAwMzk2NQ%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6InhwaWRzLjEyMDZ4MTYwOC5zZHIuQzMifQ%3D%3D&_nc_ohc=LwdsG04HGzcQ7kNvwG2y2AI&_nc_oc=AdnXXr1m81iC8JXpfYjNG_kANtYqtJOKu3aIWYnnf7zh7EnRspgEiLVWfszUseMY4JU&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ssn1-1.cdninstagram.com&_nc_gid=H-kuMipfZA8Y6MgA0vYDDQ&oh=00_AfoaBh4uZe77kCAsY6bAUuFDtXtZ4Uv-4o33VZijplZB1g&oe=69779E1A",
    "https://scontent-ssn1-1.cdninstagram.com/v/t51.82787-15/552110851_17861780514481058_5285687633110376901_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=102&ig_cache_key=MzcyODYyNDEyNDc5MDAzNzU3MA%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6InhwaWRzLjEyMDZ4MTYwOC5zZHIuQzMifQ%3D%3D&_nc_ohc=yMl3G_SBwrsQ7kNvwHBwZyF&_nc_oc=Adlca2563ZeG75YAdhze3ikvXMFCX2r2BzX38WnnhZ3fuZPPqQsBtov6-b3IFjDdSNw&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ssn1-1.cdninstagram.com&_nc_gid=H-kuMipfZA8Y6MgA0vYDDQ&oh=00_AfpLUUTC9gBWOjqI_IalxaJZ1XotFZ-sOxgpSG1Yp6Af8w&oe=6977981B",
    "https://scontent-ssn1-1.cdninstagram.com/v/t51.82787-15/552998603_17861780532481058_2232063852186370416_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=104&ig_cache_key=MzcyODYyNDEyNDk0MDk4MzA2MA%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6InhwaWRzLjEyMDZ4MTYwOC5zZHIuQzMifQ%3D%3D&_nc_ohc=BMv2lpXd5PMQ7kNvwF2C3XH&_nc_oc=AdmdkwVCWt8AVwoNhGCHAdG7QoN-hL1-OGm-z3k5Z_IowyjsuvXIZMCpVut0AcxxqJ4&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ssn1-1.cdninstagram.com&_nc_gid=H-kuMipfZA8Y6MgA0vYDDQ&oh=00_AfqLJcYFwf25rCvDKQhLRX_RS_1MKSiK6dVhirxeMOZvSw&oe=6977A263",
    "https://scontent-ssn1-1.cdninstagram.com/v/t51.82787-15/553759340_17861780541481058_4471682102089054111_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=101&ig_cache_key=MzcyODYyNDEyNDkzMjYwMjQzNA%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6InhwaWRzLjEyMDZ4MTYwOC5zZHIuQzMifQ%3D%3D&_nc_ohc=2RyFQeKYG2gQ7kNvwHuZhhH&_nc_oc=AdnjY-XjKiOlOd6qp0XMz6c2_o6y-TdjCfCS-aqT5CVKJub2rUuTtEvFZ4uJHrnOdKk&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ssn1-1.cdninstagram.com&_nc_gid=H-kuMipfZA8Y6MgA0vYDDQ&oh=00_AfoJwqerIYikwnsbxs7v6Fi84Dysn0xwvQbB1qPNvMncEg&oe=69779484"
  ],
  "author_profile_image_url": "https://scontent-ssn1-1.cdninstagram.com/v/t51.2885-19/609624709_18052277339693397_5983453803464667577_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby44MTYuYzIifQ&_nc_ht=scontent-ssn1-1.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2QG9wlN22QS36KjuhcxOY8mQRuD8tZNjkSFEOqFpia_cOKY1NVbknN7jw5fESZp95Xw&_nc_ohc=zPOmz8IbnkUQ7kNvwEMPWk6&_nc_gid=H-kuMipfZA8Y6MgA0vYDDQ&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfqqSWVSmtWZ6nAtvpnHn-cPmYskaTmIPYp_VjSTL5ioYA&oe=6977A0BB&_nc_sid=10d13b"
}

여기에서

caption 부분을 뺴서

정확한 장소명을 llm을 통해서 추출합니다. 여러종류의 place가있을수가있습니다 각각 place에 대해서 정보를 추출해야합니다

llm은

ai.suhsaechan.kr
( ollama 서버입니다)
접근해서 사용하면됩니다 ollama 기본 api 와 동일하게 사용하돼

Name Description
X-API-Key *string(header)

해당부분에 대해서 값은 프로젝트 기본입니다

LLM에게 정형화된 json형식으로 값을 추출하게해야합니다
(잘못된 추출이 있을수도있으므로 fallback 총 5번으로합니다)
가이드라인 프롬프트를 잘짜야합니다

  • 각각 장소를 잘 추출해서 현재 네이버지도 메인으로 /api/test/naver-map 장소추출을 하면됩니다.
[AI 서버 API](https://ai.mapsy.suhsaechan.kr/docs/swagger#/AI%20%EC%84%9C%EB%B2%84%20API)


POST
[/api/extract-places](https://ai.mapsy.suhsaechan.kr/docs/swagger#/AI%20%EC%84%9C%EB%B2%84%20API/extract_places_api_extract_places_post)
Extract Places

인증(API Key): 필요

기능 SNS 콘텐츠 URL과 contentId를 입력받아 장소 추출 파이프라인을 비동기 방식으로 실행합니다. 요청은 즉시 200 OK를 반환하며, 실제 처리 결과는 백엔드의 /api/ai/callback으로 전송됩니다.

요청 파라미터 (PlaceExtractionRequest)

contentId (UUID): 콘텐츠 고유 식별자
snsUrl (string): SNS 원본 URL (Instagram, YouTube 등)
반환값 (즉시 응답)

{
  "received": true,
  "message": "Processing started"
}
비동기 처리 방식

스크래핑, STT, LLM 분석 등 전체 파이프라인은 Background Task에서 처리됩니다.
파이프라인 오류 발생 시에도 본 엔드포인트는 항상 200 OK를 반환하고, 오류는 내부 로그로만 기록됩니다.
에러 코드

인증 실패 시:
401 UNAUTHORIZED (API Key 누락 또는 불일치)

🛠️ 해결 방안 / 제안 기능

  • 위에서 정의함

🙋‍♂️ 담당자

  • 백엔드: @Cassiiopeia
  • 프론트엔드: 이름
  • 디자인: 이름

Metadata

Metadata

Assignees

Labels

작업 완료작업 완료 상태인 경우 (이슈 폐쇄)

Type

No type

Projects

Status

작업 완료

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions