Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -142,7 +142,7 @@ def analyze_concepts(month):
|
|
142 |
"seasons": ["늦가을", "겨울준비", "포근함"],
|
143 |
"colors": ["#8B4513", "#A0522D", "#CD853F"],
|
144 |
"mood": "포근하고 준비하는",
|
145 |
-
"female_appeal": ["빼빼로데이", "겨울패션", "연말모임", "
|
146 |
},
|
147 |
"12월": {
|
148 |
"holidays": ["크리스마스"],
|
@@ -285,60 +285,6 @@ def analyze_concepts(month):
|
|
285 |
result += f"특히 20-40대 여성에게는 '{data.get('female_appeal', ['특별한'])[0]}' 관련 이벤트가 "
|
286 |
result += f"높은 참여도를 보일 것으로 예상됩니다."
|
287 |
|
288 |
-
return result, concept_names "계절 공감대, 일상 연관성"
|
289 |
-
})
|
290 |
-
|
291 |
-
# 컨셉 5: 스페셜 데이 기반
|
292 |
-
if data.get("special_days"):
|
293 |
-
special = data["special_days"][0]
|
294 |
-
concepts.append({
|
295 |
-
"name": f"{special} 스페셜 위크",
|
296 |
-
"theme": f"{special} 맞이 특별 혜택 이벤트",
|
297 |
-
"score": 7.8,
|
298 |
-
"reason": f"{special}의 특별함으로 프리미엄 이벤트 효과",
|
299 |
-
"target": "20-40대 여성, 혜택 관심층",
|
300 |
-
"colors": data.get("colors", ["#FFB6C1"]),
|
301 |
-
"keywords": data.get("special_days", [])[:2] + ["혜택", "특별"],
|
302 |
-
"participation_factor": "특별함 기대, 혜택 매력도"
|
303 |
-
})
|
304 |
-
|
305 |
-
# 컨셉 6: 커뮤니티 소통 기반
|
306 |
-
concepts.append({
|
307 |
-
"name": f"{month} 우리들의 이야기",
|
308 |
-
"theme": "커뮤니티 멤버 간 소통과 공감 이벤트",
|
309 |
-
"score": 7.0,
|
310 |
-
"reason": "커뮤니티 결속력 강화와 지속적 참여 유도",
|
311 |
-
"target": "기존 회원, 커뮤니티 활동 적극층",
|
312 |
-
"colors": data.get("colors", ["#87CEEB"]),
|
313 |
-
"keywords": ["소통", "공감", "스토리", "우리"],
|
314 |
-
"participation_factor": "소속감, 진정성"
|
315 |
-
})
|
316 |
-
|
317 |
-
# 결과 텍스트 생성
|
318 |
-
result = f"# 🎯 {month} 고도화된 컨셉 분석 (절기 포함)\n\n"
|
319 |
-
result += f"**📊 분석 기준:** {data.get('mood', '특별한')} 분위기\n"
|
320 |
-
result += f"**🎨 주요 색상:** {', '.join(data.get('colors', ['기본색상'])[:3])}\n"
|
321 |
-
result += f"**🔥 핵심 트렌드:** {', '.join(data.get('trends', ['기본트렌드'])[:3])}\n"
|
322 |
-
result += f"**🌿 해당 절기:** {', '.join(data.get('seasonal_terms', ['해당없음']))}\n\n"
|
323 |
-
|
324 |
-
concept_names = []
|
325 |
-
|
326 |
-
for i, concept in enumerate(concepts, 1):
|
327 |
-
result += f"## {i}. {concept['name']}\n"
|
328 |
-
result += f"**🏷️ 테마:** {concept['theme']}\n"
|
329 |
-
result += f"**⭐ 참여도 점수:** {concept['score']}/10점\n"
|
330 |
-
result += f"**💡 선정 이유:** {concept['reason']}\n"
|
331 |
-
result += f"**🎯 주요 타겟:** {concept['target']}\n"
|
332 |
-
result += f"**🔑 핵심 키워드:** {', '.join(concept['keywords'])}\n"
|
333 |
-
result += f"**📈 참여 요인:** {concept['participation_factor']}\n"
|
334 |
-
result += f"**🎨 추천 색상:** {', '.join(concept['colors'])}\n\n"
|
335 |
-
result += "---\n\n"
|
336 |
-
|
337 |
-
concept_names.append(concept['name'])
|
338 |
-
|
339 |
-
result += f"**💬 총평:** {month}은 {data.get('mood', '특별한')} 특성을 가진 달로, "
|
340 |
-
result += f"특히 '{data.get('trends', ['트렌드'])[0]}' 관련 이벤트가 높은 참여도를 보일 것으로 예상됩니다."
|
341 |
-
|
342 |
return result, concept_names
|
343 |
|
344 |
def generate_design_recommendations(concept_name, month):
|
@@ -413,79 +359,9 @@ def generate_design_recommendations(concept_name, month):
|
|
413 |
result += f"**핵심 요소:** {', '.join(design['elements'])}\n\n"
|
414 |
|
415 |
return result
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
import re
|
420 |
-
|
421 |
-
# 기간에서 특별한 날짜 추출
|
422 |
-
special_dates = {
|
423 |
-
"01.01": "신정", "02.14": "밸런타인데이", "03.14": "화이트데이",
|
424 |
-
"04.01": "만우절", "05.05": "어린이날", "06.06": "현충일",
|
425 |
-
"07.07": "칠석", "08.15": "광복절", "09.15": "추석예상",
|
426 |
-
"10.09": "한글날", "11.11": "빼빼로데이", "12.25": "크리스마스"
|
427 |
-
}
|
428 |
-
|
429 |
-
# 기간에서 월.일 패턴 찾기
|
430 |
-
date_matches = re.findall(r'(\d{1,2})\.(\d{1,2})', event_period) if event_period else []
|
431 |
-
|
432 |
-
period_special = None
|
433 |
-
if date_matches:
|
434 |
-
for month_num, day_num in date_matches:
|
435 |
-
date_key = f"{month_num.zfill(2)}.{day_num.zfill(2)}"
|
436 |
-
if date_key in special_dates:
|
437 |
-
period_special = special_dates[date_key]
|
438 |
-
break
|
439 |
-
|
440 |
-
# 월별 + 기간별 맞춤 추천
|
441 |
-
recommendations = {
|
442 |
-
"1월": {
|
443 |
-
"default": "미니멀 챌린지",
|
444 |
-
"special": {
|
445 |
-
"신정": "신년 다짐 챌린지",
|
446 |
-
"설날": "새해맞이 감사"
|
447 |
-
}
|
448 |
-
},
|
449 |
-
"2���": {
|
450 |
-
"default": "셀프러브 위크",
|
451 |
-
"special": {
|
452 |
-
"밸런타인데이": "갈렌타인데이 축제"
|
453 |
-
}
|
454 |
-
},
|
455 |
-
"3월": {
|
456 |
-
"default": "봄맞이 감성",
|
457 |
-
"special": {
|
458 |
-
"화이트데이": "화이트데이 스페셜"
|
459 |
-
}
|
460 |
-
},
|
461 |
-
"7월": {
|
462 |
-
"default": "여름 바캉스",
|
463 |
-
"special": {
|
464 |
-
"칠석": "칠석 로맨스"
|
465 |
-
}
|
466 |
-
},
|
467 |
-
"11월": {
|
468 |
-
"default": "가을 감성",
|
469 |
-
"special": {
|
470 |
-
"빼빼로데이": "빼빼로데이 페스티벌"
|
471 |
-
}
|
472 |
-
},
|
473 |
-
"12월": {
|
474 |
-
"default": "연말 감성",
|
475 |
-
"special": {
|
476 |
-
"크리스마스": "크리스마스 스페셜"
|
477 |
-
}
|
478 |
-
}
|
479 |
-
}
|
480 |
-
|
481 |
-
month_key = month.replace('월', '월') if month else "1월"
|
482 |
-
month_rec = recommendations.get(month_key, {"default": "특별한 순간", "special": {}})
|
483 |
-
|
484 |
-
if period_special and period_special in month_rec["special"]:
|
485 |
-
return month_rec["special"][period_special]
|
486 |
-
else:
|
487 |
-
return month_rec["default"]
|
488 |
-
"""최신 트렌드를 반영한 카피라이팅 생성 (예능/드라마/밈 활용)"""
|
489 |
|
490 |
# 2024-2025 최신 트렌드 반영
|
491 |
trendy_copies = {
|
@@ -496,13 +372,6 @@ def analyze_period_and_recommend_concept(event_period, month):
|
|
496 |
"hashtags": ["#갓생살기", "#미니멀", "#정리의신", "#새해정리"],
|
497 |
"reference": "정리의 신, 갓생 트렌드"
|
498 |
},
|
499 |
-
"플래너": {
|
500 |
-
"sub1": "📅 '너 계획 있어?'라는 말에 당당하게!",
|
501 |
-
"main": "플래너는 '플랜'을 '어'떻게 세우'나'의 줄임말이야 📝",
|
502 |
-
"sub2": "2025년엔 진짜 계획적인 인간이 되어보자 🎯",
|
503 |
-
"hashtags": ["#플래너챌린지", "#계획적인생", "#목표달성", "#자기계발"],
|
504 |
-
"reference": "계획적 인생 트렌드"
|
505 |
-
},
|
506 |
"셀프러브": {
|
507 |
"sub1": "💕 '나 자신과 연애 중'이라고 말할 수 있나요?",
|
508 |
"main": "셀프러브는 '셀프'로 '러브'하는 거 맞아! 💖",
|
@@ -524,37 +393,23 @@ def analyze_period_and_recommend_concept(event_period, month):
|
|
524 |
"hashtags": ["#바캉스", "#일상탈출", "#힐링여행", "#여름휴가"],
|
525 |
"reference": "일상탈출, 힐링 문화"
|
526 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
527 |
"가을감성": {
|
528 |
"sub1": "🍂 '가을엔 뭔가 감성이 충전되는 기분'",
|
529 |
"main": "가을감성은 '가'슴이 '을'마나 따뜻해지는 '감성'이야 🧡",
|
530 |
"sub2": "이 계절엔 모든 게 '에모'해져요 ☕",
|
531 |
-
"hashtags": ["#가을감성", "#에모모드", "#감성충전", "
|
532 |
"reference": "에모 트렌드, 감성 문화"
|
533 |
-
},
|
534 |
-
"크리스마스": {
|
535 |
-
"sub1": "🎄 '올해 크리스마스는 어떻게 보내지?'",
|
536 |
-
"main": "메리크리스마스? 메리하게 크리스마스! 🎅",
|
537 |
-
"sub2": "연말엔 모든 게 '띵작'이 되는 마법이 있어요 ✨",
|
538 |
-
"hashtags": ["#메리크리스마스", "#연말감성", "#띵작연말", "#홀리데이"],
|
539 |
-
"reference": "연말 분위기, 띵작 표현"
|
540 |
-
},
|
541 |
-
"독서": {
|
542 |
-
"sub1": "📚 '책 읽는 여자가 아름답다'는 말 있잖아요",
|
543 |
-
"main": "독서는 '독'특한 '서'사를 만나는 시간이야! 📖",
|
544 |
-
"sub2": "오늘부터 '북스타그램' 시작해볼까요? 📸",
|
545 |
-
"hashtags": ["#독서모드", "#북스타그램", "#책읽는여자", "#독서의계절"],
|
546 |
-
"reference": "북스타그램, 독서 문화"
|
547 |
-
},
|
548 |
-
"커피": {
|
549 |
-
"sub1": "☕ '오늘 카페인 얼마나 섭취했지?'",
|
550 |
-
"main": "카페는 '카'페인을 '페'어하게 즐기는 곳이야! ☕",
|
551 |
-
"sub2": "오늘도 '카페인 중독자'의 하루가 시작돼요 💪",
|
552 |
-
"hashtags": ["#카페투어", "#커피러버", "#카페인중독", "#감성카페"],
|
553 |
-
"reference": "카페 문화, 커피 애호가 트렌드"
|
554 |
}
|
555 |
}
|
556 |
|
557 |
-
# 계절별 기본 카피
|
558 |
seasonal_copies = {
|
559 |
"1월": {
|
560 |
"sub1": "🌟 '새해 새마음'이라는 말이 괜히 있는 게 아니야",
|
@@ -563,251 +418,5 @@ def analyze_period_and_recommend_concept(event_period, month):
|
|
563 |
"hashtags": ["#새해새마음", "#2025레전드", "#갓생예약", "#새출발"],
|
564 |
"reference": "새해 다짐 문화"
|
565 |
},
|
566 |
-
"
|
567 |
-
"sub1": "
|
568 |
-
"main": "지금 이 순간이 바로 '찐'이야! 💫",
|
569 |
-
"sub2": "함께라면 뭐든 '레전드'가 될 수 있어요 🎉",
|
570 |
-
"hashtags": ["#찐이야", "#레전드순간", "#함께해요", "#특별한시간"],
|
571 |
-
"reference": "MZ세대 표현"
|
572 |
-
}
|
573 |
-
}
|
574 |
-
|
575 |
-
# 컨셉명에서 키워드 추출하여 적절한 카피 선택
|
576 |
-
selected_copy = None
|
577 |
-
for keyword, copy_data in trendy_copies.items():
|
578 |
-
if any(k in concept_name for k in keyword.split()) or keyword in concept_name:
|
579 |
-
selected_copy = copy_data
|
580 |
-
break
|
581 |
-
|
582 |
-
# 월별 기본 카피 사용
|
583 |
-
if not selected_copy:
|
584 |
-
month_key = month.replace('월', '월')
|
585 |
-
selected_copy = seasonal_copies.get(month_key, seasonal_copies["기본"])
|
586 |
-
|
587 |
-
return selected_copy
|
588 |
-
|
589 |
-
def generate_notice(concept, event_type, event_period, prize_benefits):
|
590 |
-
"""트렌디한 카피라이팅이 포함된 공지사항 생성"""
|
591 |
-
|
592 |
-
if not concept:
|
593 |
-
return "먼저 컨셉을 선택해주세요."
|
594 |
-
|
595 |
-
# 이벤트 기간이 입력되지 않았으면 기본값 사용
|
596 |
-
if not event_period or event_period.strip() == "":
|
597 |
-
now = datetime.now()
|
598 |
-
start_date = now.strftime("%Y.%m.%d")
|
599 |
-
end_date = f"{now.year}.{now.month}.{now.day + 7}"
|
600 |
-
period_text = f"{start_date} ~ {end_date}"
|
601 |
-
else:
|
602 |
-
period_text = event_period
|
603 |
-
|
604 |
-
# 월 추출
|
605 |
-
month = extract_month_from_period(period_text)
|
606 |
-
if not month:
|
607 |
-
month = f"{datetime.now().month}월"
|
608 |
-
|
609 |
-
# 트렌디한 카피 생성
|
610 |
-
copy_data = generate_trendy_copy(concept, month, period_text)
|
611 |
-
|
612 |
-
# 디자인 추천 생성
|
613 |
-
design_recommendations = generate_design_recommendations(concept, month)
|
614 |
-
|
615 |
-
# 당첨 혜택이 입력되지 않았으면 기본값 사용
|
616 |
-
if not prize_benefits or prize_benefits.strip() == "":
|
617 |
-
default_benefits = """✨ 1등 (1명): 스타벅스 5만원 기프트카드
|
618 |
-
🎉 2등 (3명): 베스킨라빈스 아이스크림 쿠폰
|
619 |
-
💝 3등 (10명): 편의점 5천원 상품권
|
620 |
-
🌟 참가상 (50명): 모바일 치킨 쿠폰"""
|
621 |
-
benefits_text = default_benefits
|
622 |
-
else:
|
623 |
-
benefits_text = prize_benefits
|
624 |
-
|
625 |
-
# 해시태그 문자열 생성
|
626 |
-
hashtags_text = " ".join(copy_data['hashtags'])
|
627 |
-
|
628 |
-
notice = f"""{copy_data['sub1']}
|
629 |
-
|
630 |
-
💫 {copy_data['main']} 💫
|
631 |
-
|
632 |
-
{copy_data['sub2']}
|
633 |
-
|
634 |
-
🎉 {concept} 🎉
|
635 |
-
|
636 |
-
📅 이벤트 기간: {period_text} 23:59
|
637 |
-
|
638 |
-
{hashtags_text}
|
639 |
-
|
640 |
-
{design_recommendations}
|
641 |
-
|
642 |
-
========================
|
643 |
-
✨ EVENT
|
644 |
-
특별한 {concept}을 준비했어요!
|
645 |
-
많은 분들의 적극적인 참여를 기다리고 있습니다 💕
|
646 |
-
|
647 |
-
이번 이벤트는 단순한 참여가 아닌,
|
648 |
-
우리만의 특별한 추억을 만들어가는 시간이에요 ✨
|
649 |
-
|
650 |
-
💡 **참고:** {copy_data.get('reference', '최신 트렌드')} 반영
|
651 |
-
========================
|
652 |
-
|
653 |
-
🎯 참여 방법
|
654 |
-
1️⃣ 이벤트 내용 확인하기
|
655 |
-
2️⃣ {event_type} 참여하기
|
656 |
-
3️⃣ 참여 완료!
|
657 |
-
|
658 |
-
=================
|
659 |
-
🎁 당첨혜택
|
660 |
-
{benefits_text}
|
661 |
-
|
662 |
-
📋 추첨: 참여자 중 무작위 추첨
|
663 |
-
========================
|
664 |
-
|
665 |
-
👥 이벤트 대상
|
666 |
-
✅ 커뮤니티 회원
|
667 |
-
✅ 만 18세 이상
|
668 |
-
✅ 이벤트 기간 내 참여자
|
669 |
-
========================
|
670 |
-
|
671 |
-
⚠️ 주의사항
|
672 |
-
※ 부적절한 참여는 제외됩니다
|
673 |
-
※ 중복 참여 불가
|
674 |
-
※ 당첨자는 본인 확인 필요
|
675 |
-
|
676 |
-
===========================
|
677 |
-
📞 문의: 1234-5678
|
678 |
-
💬 카카오톡: @event_community
|
679 |
-
|
680 |
-
{hashtags_text}
|
681 |
-
|
682 |
-
💝 많은 참여 부탁드려요! 감사합니다 💝"""
|
683 |
-
|
684 |
-
return notice
|
685 |
-
|
686 |
-
def create_interface():
|
687 |
-
"""그라디오 인터페이스 생성"""
|
688 |
-
|
689 |
-
with gr.Blocks(title="이벤트 공지사항 생성기") as demo:
|
690 |
-
|
691 |
-
gr.Markdown("# 🎉 이벤트 공지사항 생성기")
|
692 |
-
gr.Markdown("### 간편하게 이벤트 공지사항을 만들어보세요!")
|
693 |
-
|
694 |
-
with gr.Row():
|
695 |
-
with gr.Column():
|
696 |
-
gr.Markdown("## 설정")
|
697 |
-
|
698 |
-
event_period_input = gr.Textbox(
|
699 |
-
label="이벤트 기간",
|
700 |
-
placeholder="예: 2024.12.01 ~ 2024.12.07 (월이 자동 인식됩니다)",
|
701 |
-
info="이벤트 기간을 입력하면 해당 월이 자동으로 선택됩니다"
|
702 |
-
)
|
703 |
-
|
704 |
-
month_dropdown = gr.Dropdown(
|
705 |
-
choices=[f"{i}월" for i in range(1, 13)],
|
706 |
-
label="이벤트 월 선택",
|
707 |
-
value="1월",
|
708 |
-
info="이벤트 기간��서 자동 인식되거나 직접 선택"
|
709 |
-
)
|
710 |
-
|
711 |
-
analyze_btn = gr.Button("컨셉 분석하기", variant="primary")
|
712 |
-
|
713 |
-
concept_dropdown = gr.Dropdown(
|
714 |
-
label="컨셉 선택",
|
715 |
-
visible=False
|
716 |
-
)
|
717 |
-
|
718 |
-
event_type_dropdown = gr.Dropdown(
|
719 |
-
choices=["댓글 달기", "게시글 작성", "좋아요 누르기"],
|
720 |
-
label="이벤트 유형",
|
721 |
-
value="댓글 달기"
|
722 |
-
)
|
723 |
-
|
724 |
-
gr.Markdown("## 🎁 당첨 혜택 설정")
|
725 |
-
|
726 |
-
prize_benefits_input = gr.Textbox(
|
727 |
-
label="당첨 혜택",
|
728 |
-
placeholder="""예시:
|
729 |
-
✨ 1등 (1명): 아이폰 15 Pro
|
730 |
-
🎉 2등 (3명): 에어팟 프로
|
731 |
-
💝 3등 (10명): 스타벅스 1만원 기프트카드
|
732 |
-
🌟 참가상 (50명): 카페 아메리카노 쿠폰""",
|
733 |
-
lines=6,
|
734 |
-
info="당첨 혜택을 입력하지 않으면 기본 혜택이 적용됩니다"
|
735 |
-
)
|
736 |
-
|
737 |
-
generate_btn = gr.Button("공지사항 생성하기", variant="secondary", visible=False)
|
738 |
-
|
739 |
-
with gr.Column():
|
740 |
-
gr.Markdown("## 결과")
|
741 |
-
|
742 |
-
concept_output = gr.Textbox(
|
743 |
-
label="고도화된 분석 결과",
|
744 |
-
lines=20,
|
745 |
-
placeholder="먼저 '컨셉 분석하기' 버튼을 클릭하세요"
|
746 |
-
)
|
747 |
-
|
748 |
-
notice_output = gr.Textbox(
|
749 |
-
label="생성된 공지사항",
|
750 |
-
lines=20,
|
751 |
-
placeholder="컨셉을 선택하고 '공지사항 생성하기' 버튼을 클릭하세요"
|
752 |
-
)
|
753 |
-
|
754 |
-
# 상태 변수
|
755 |
-
concepts_state = gr.State([])
|
756 |
-
selected_concept_state = gr.State("")
|
757 |
-
|
758 |
-
def handle_period_change(period_text):
|
759 |
-
"""이벤트 기간 변경시 월 자동 인식"""
|
760 |
-
detected_month = extract_month_from_period(period_text)
|
761 |
-
if detected_month:
|
762 |
-
return gr.update(value=detected_month)
|
763 |
-
return gr.update()
|
764 |
-
|
765 |
-
def handle_analyze(month):
|
766 |
-
"""분석 처리"""
|
767 |
-
result, concepts = analyze_concepts(month)
|
768 |
-
return (
|
769 |
-
result,
|
770 |
-
gr.update(choices=concepts, visible=True, value=concepts[0]),
|
771 |
-
gr.update(visible=True),
|
772 |
-
concepts
|
773 |
-
)
|
774 |
-
|
775 |
-
def handle_concept_change(concept, concepts):
|
776 |
-
"""컨셉 변경 처리"""
|
777 |
-
return concept
|
778 |
-
|
779 |
-
def handle_generate(concept, event_type, event_period, prize_benefits):
|
780 |
-
"""생성 처리"""
|
781 |
-
notice = generate_notice(concept, event_type, event_period, prize_benefits)
|
782 |
-
return notice
|
783 |
-
|
784 |
-
# 이벤트 연결
|
785 |
-
event_period_input.change(
|
786 |
-
handle_period_change,
|
787 |
-
inputs=[event_period_input],
|
788 |
-
outputs=[month_dropdown]
|
789 |
-
)
|
790 |
-
|
791 |
-
analyze_btn.click(
|
792 |
-
handle_analyze,
|
793 |
-
inputs=[month_dropdown],
|
794 |
-
outputs=[concept_output, concept_dropdown, generate_btn, concepts_state]
|
795 |
-
)
|
796 |
-
|
797 |
-
concept_dropdown.change(
|
798 |
-
handle_concept_change,
|
799 |
-
inputs=[concept_dropdown, concepts_state],
|
800 |
-
outputs=[selected_concept_state]
|
801 |
-
)
|
802 |
-
|
803 |
-
generate_btn.click(
|
804 |
-
handle_generate,
|
805 |
-
inputs=[selected_concept_state, event_type_dropdown, event_period_input, prize_benefits_input],
|
806 |
-
outputs=[notice_output]
|
807 |
-
)
|
808 |
-
|
809 |
-
return demo
|
810 |
-
|
811 |
-
if __name__ == "__main__":
|
812 |
-
demo = create_interface()
|
813 |
-
demo.launch()
|
|
|
142 |
"seasons": ["늦가을", "겨울준비", "포근함"],
|
143 |
"colors": ["#8B4513", "#A0522D", "#CD853F"],
|
144 |
"mood": "포근하고 준비하는",
|
145 |
+
"female_appeal": ["빼빼로데이", "겨울패션", "연말모임", "코지"]
|
146 |
},
|
147 |
"12월": {
|
148 |
"holidays": ["크리스마스"],
|
|
|
285 |
result += f"특히 20-40대 여성에게는 '{data.get('female_appeal', ['특별한'])[0]}' 관련 이벤트가 "
|
286 |
result += f"높은 참여도를 보일 것으로 예상됩니다."
|
287 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
288 |
return result, concept_names
|
289 |
|
290 |
def generate_design_recommendations(concept_name, month):
|
|
|
359 |
result += f"**핵심 요소:** {', '.join(design['elements'])}\n\n"
|
360 |
|
361 |
return result
|
362 |
+
|
363 |
+
def generate_trendy_copy(concept_name, month, event_period):
|
364 |
+
"""최신 트렌드를 반영한 카피라이팅 생성"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
365 |
|
366 |
# 2024-2025 최신 트렌드 반영
|
367 |
trendy_copies = {
|
|
|
372 |
"hashtags": ["#갓생살기", "#미니멀", "#정리의신", "#새해정리"],
|
373 |
"reference": "정리의 신, 갓생 트렌드"
|
374 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
375 |
"셀프러브": {
|
376 |
"sub1": "💕 '나 자신과 연애 중'이라고 말할 수 있나요?",
|
377 |
"main": "셀프러브는 '셀프'로 '러브'하는 거 맞아! 💖",
|
|
|
393 |
"hashtags": ["#바캉스", "#일상탈출", "#힐링여행", "#여름휴가"],
|
394 |
"reference": "일상탈출, 힐링 문화"
|
395 |
},
|
396 |
+
"그린데이": {
|
397 |
+
"sub1": "💚 '그린'하면 생각나는 게 뭐예요?",
|
398 |
+
"main": "그린데이는 '그'냥 '린'스하지 말고 새롭게! 💚",
|
399 |
+
"sub2": "이번 여름엔 '그린'한 추억 만들어요 🌿",
|
400 |
+
"hashtags": ["#그린데이", "#여름추억", "#힐링", "#자연"],
|
401 |
+
"reference": "그린데이, 자연친화 트렌드"
|
402 |
+
},
|
403 |
"가을감성": {
|
404 |
"sub1": "🍂 '가을엔 뭔가 감성이 충전되는 기분'",
|
405 |
"main": "가을감성은 '가'슴이 '을'마나 따뜻해지는 '감성'이야 🧡",
|
406 |
"sub2": "이 계절엔 모든 게 '에모'해져요 ☕",
|
407 |
+
"hashtags": ["#가을감성", "#에모모드", "#감성충전", "#코지"],
|
408 |
"reference": "에모 트렌드, 감성 문화"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
409 |
}
|
410 |
}
|
411 |
|
412 |
+
# 계절별 기본 카피
|
413 |
seasonal_copies = {
|
414 |
"1월": {
|
415 |
"sub1": "🌟 '새해 새마음'이라는 말이 괜히 있는 게 아니야",
|
|
|
418 |
"hashtags": ["#새해새마음", "#2025레전드", "#갓생예약", "#새출발"],
|
419 |
"reference": "새해 다짐 문화"
|
420 |
},
|
421 |
+
"8월": {
|
422 |
+
"sub1": "🏖️ '일상 탈출'이 필요한 순간이에요!",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|