데이터 출력 확인
parent
9919529a88
commit
5baea01ae1
|
|
@ -16,8 +16,8 @@ class PlanInput(BaseModel):
|
||||||
market_trend: str | None = None
|
market_trend: str | None = None
|
||||||
market_target_audience: str | None = None
|
market_target_audience: str | None = None
|
||||||
tiktok: str | None = None
|
tiktok: str | None = None
|
||||||
instagram_en: str | None = None
|
instagram: str | None = None
|
||||||
facebook_en: str | None = None
|
facebook: str | None = None
|
||||||
naver_blog: str | None = None
|
naver_blog: str | None = None
|
||||||
naver_cafe: str | None = None
|
naver_cafe: str | None = None
|
||||||
kakao_talk: str | None = None
|
kakao_talk: str | None = None
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,26 @@ async def generate_plan(analysis_run_id: str) -> PlanOutput:
|
||||||
report = await select_run_report_data(analysis_run_id)
|
report = await select_run_report_data(analysis_run_id)
|
||||||
market = await select_market(analysis_run_id)
|
market = await select_market(analysis_run_id)
|
||||||
|
|
||||||
|
|
||||||
|
mainpage = raw.get(SourceType.MAINPAGE) or []
|
||||||
|
mainpage = mainpage[0]["raw_data"] # 유일
|
||||||
|
branding = raw.get(SourceType.BRANDING) or []
|
||||||
|
branding = branding[0]["raw_data"] # 유일
|
||||||
|
instagram = raw.get(SourceType.INSTAGRAM) or []
|
||||||
|
facebook = raw.get(SourceType.FACEBOOK) or []
|
||||||
|
youtube = raw.get(SourceType.YOUTUBE) or []
|
||||||
|
youtube = youtube[0]["raw_data"] if youtube else None # 유일 (기획상)
|
||||||
|
gangnam_unni = raw.get(SourceType.GANGNAM_UNNI) or []
|
||||||
|
gangnam_unni = gangnam_unni[0]["raw_data"] if gangnam_unni else None# 유일 (기획상)
|
||||||
|
naver_blog = raw.get(SourceType.NAVER_BLOG) or []
|
||||||
|
naver_blog = naver_blog[0]["raw_data"] if naver_blog else None# 유일 (기획상)
|
||||||
|
tiktok = raw.get(SourceType.TIKTOK) or []
|
||||||
|
tiktok = tiktok[0]["raw_data"] if tiktok else None# 유일 (기획상)
|
||||||
|
naver_cafe = raw.get(SourceType.NAVER_CAFE) or []
|
||||||
|
naver_cafe = naver_cafe[0]["raw_data"] if naver_cafe else None# 유일 (기획상)
|
||||||
|
kakaotalk = raw.get(SourceType.KAKAOTALK) or []
|
||||||
|
kakaotalk = kakaotalk[0]["raw_data"] if kakaotalk else None# 유일 (기획상)
|
||||||
|
|
||||||
def _json(v) -> str | None:
|
def _json(v) -> str | None:
|
||||||
return json.dumps(v, ensure_ascii=False) if v else None
|
return json.dumps(v, ensure_ascii=False) if v else None
|
||||||
|
|
||||||
|
|
@ -42,12 +62,12 @@ async def generate_plan(analysis_run_id: str) -> PlanOutput:
|
||||||
"market_keywords": _json(market.get("keywords")),
|
"market_keywords": _json(market.get("keywords")),
|
||||||
"market_trend": _json(market.get("trend")),
|
"market_trend": _json(market.get("trend")),
|
||||||
"market_target_audience": _json(market.get("target_audience")),
|
"market_target_audience": _json(market.get("target_audience")),
|
||||||
"tiktok": _json(raw.get(SourceType.TIKTOK)),
|
"tiktok": _json(tiktok),
|
||||||
"instagram_en": _json(raw.get(SourceType.INSTAGRAM)),
|
"instagram": _json(instagram),
|
||||||
"facebook_en": _json(raw.get(SourceType.FACEBOOK)),
|
"facebook": _json(facebook),
|
||||||
"naver_blog": _json(_naver_blog_summary(raw.get(SourceType.NAVER_BLOG))),
|
"naver_blog": _json(_naver_blog_summary(naver_blog)),
|
||||||
"naver_cafe": _json(raw.get(SourceType.NAVER_CAFE)),
|
"naver_cafe": _json(naver_cafe),
|
||||||
"kakao_talk": _json(raw.get(SourceType.KAKAOTALK)),
|
"kakao_talk": _json(kakaotalk),
|
||||||
"channel_logos": _json(branding.get("channelLogos")),
|
"channel_logos": _json(branding.get("channelLogos")),
|
||||||
"brand_assets": _json(branding.get("brandAssets")),
|
"brand_assets": _json(branding.get("brandAssets")),
|
||||||
}
|
}
|
||||||
|
|
@ -200,7 +220,7 @@ async def _build_other_channels(raw: dict) -> list[dict]:
|
||||||
result: OtherChannelsOutput = await LLMService(provider="perplexity").generate(
|
result: OtherChannelsOutput = await LLMService(provider="perplexity").generate(
|
||||||
other_channels_prompt,
|
other_channels_prompt,
|
||||||
{
|
{
|
||||||
"clinic_name": (raw.get(SourceType.MAINPAGE) or [{}])[0].get("clinicName"),
|
"clinic_name": (raw.get(SourceType.MAINPAGE) or [{}])[0]["raw_data"].get("clinicName"),
|
||||||
"tiktok": json.dumps(raw.get(SourceType.TIKTOK), ensure_ascii=False),
|
"tiktok": json.dumps(raw.get(SourceType.TIKTOK), ensure_ascii=False),
|
||||||
"kakao_talk": json.dumps(raw.get(SourceType.KAKAOTALK), ensure_ascii=False),
|
"kakao_talk": json.dumps(raw.get(SourceType.KAKAOTALK), ensure_ascii=False),
|
||||||
"naver_cafe": json.dumps(raw.get(SourceType.NAVER_CAFE), ensure_ascii=False),
|
"naver_cafe": json.dumps(raw.get(SourceType.NAVER_CAFE), ensure_ascii=False),
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ async def _describe_logo(analysis_run_id: str, info_id: int, vc: VisionClient) -
|
||||||
"""공식 로고 정성 묘사. branding raw_info["brandAssets"] 머지.
|
"""공식 로고 정성 묘사. branding raw_info["brandAssets"] 머지.
|
||||||
호출 우선순위: raw_info.logo_url 컬럼 (HTML parser canonical) → firecrawl 메타 fallback."""
|
호출 우선순위: raw_info.logo_url 컬럼 (HTML parser canonical) → firecrawl 메타 fallback."""
|
||||||
raw = await select_run_raw_data(analysis_run_id)
|
raw = await select_run_raw_data(analysis_run_id)
|
||||||
mainpage = raw.get("mainpage") or {}
|
mainpage = ((raw.get("mainpage") or [{}])[0].get("raw_data")) or {}
|
||||||
homepage_url = mainpage.get("sourceUrl") or ""
|
homepage_url = mainpage.get("sourceUrl") or ""
|
||||||
branding_meta = mainpage.get("branding") or {}
|
branding_meta = mainpage.get("branding") or {}
|
||||||
column_logo = await select_mainpage_logo_url(analysis_run_id)
|
column_logo = await select_mainpage_logo_url(analysis_run_id)
|
||||||
|
|
@ -57,7 +57,7 @@ async def _describe_channel_logos(analysis_run_id: str, info_id: int, vc: Vision
|
||||||
}
|
}
|
||||||
logos = [{"channel": label, "url": img}
|
logos = [{"channel": label, "url": img}
|
||||||
for key, label in _label.items()
|
for key, label in _label.items()
|
||||||
if (img := (raw.get(key) or {}).get("_logo_url"))]
|
if (img := (raw.get(key) or [{}])[0].get("logo_url"))]
|
||||||
if not logos:
|
if not logos:
|
||||||
logger.info("[channel_logos] skip — no channel profileImages")
|
logger.info("[channel_logos] skip — no channel profileImages")
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -156,7 +156,7 @@ async def collect_kakaotalk(analysis_run_id: str, info_id: int, url: str) -> Non
|
||||||
async def collect_brand_basics(analysis_run_id: str, info_id: int) -> None:
|
async def collect_brand_basics(analysis_run_id: str, info_id: int) -> None:
|
||||||
logger.info("[brand_basics] start run=%s info=%s", analysis_run_id, info_id)
|
logger.info("[brand_basics] start run=%s info=%s", analysis_run_id, info_id)
|
||||||
raw = await select_run_raw_data(analysis_run_id)
|
raw = await select_run_raw_data(analysis_run_id)
|
||||||
mainpage = raw.get("mainpage") or {}
|
mainpage = ((raw.get("mainpage") or [{}])[0].get("raw_data")) or {}
|
||||||
homepage_url = mainpage.get("sourceUrl") or ""
|
homepage_url = mainpage.get("sourceUrl") or ""
|
||||||
branding_meta = mainpage.get("branding") or {}
|
branding_meta = mainpage.get("branding") or {}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,11 @@ def _logo_data(channel_logos: dict, channel: str) -> dict:
|
||||||
for c in (channel_logos or {}).get("channel_logos", []):
|
for c in (channel_logos or {}).get("channel_logos", []):
|
||||||
if c.get("channel") == channel:
|
if c.get("channel") == channel:
|
||||||
return c
|
return c
|
||||||
return {}
|
print("channel_logos NOT FOUND : ", channel_logos)
|
||||||
|
return {
|
||||||
|
"is_official" : False,
|
||||||
|
"logo_description" : "로고 찾지 못함"
|
||||||
|
}
|
||||||
|
|
||||||
def _page_patch(item: dict, channel_logos) -> dict:
|
def _page_patch(item: dict, channel_logos) -> dict:
|
||||||
p: dict = {}
|
p: dict = {}
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ async def run_market_analysis(analysis_run_id: str) -> None:
|
||||||
run = await select_run(analysis_run_id)
|
run = await select_run(analysis_run_id)
|
||||||
clinic = await select_hospital(run["hospital_id"])
|
clinic = await select_hospital(run["hospital_id"])
|
||||||
raw = await select_run_raw_data(analysis_run_id)
|
raw = await select_run_raw_data(analysis_run_id)
|
||||||
mainpage = raw.get("mainpage") or {}
|
mainpage = ((raw.get("mainpage") or [{}])[0].get("raw_data")) or {}
|
||||||
|
|
||||||
clinic_name = (clinic or {}).get("hospital_name") or ""
|
clinic_name = (clinic or {}).get("hospital_name") or ""
|
||||||
address = (clinic or {}).get("road_address") or ""
|
address = (clinic or {}).get("road_address") or ""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue