diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 6c5c796..7c94bda 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -1,4 +1,4 @@
-name: Django CI/CD
+name: Moodico Server
on:
workflow_dispatch:
diff --git a/moodico/moodtest/color_analyzer.py b/moodico/moodtest/color_analyzer.py
index d07a7ed..82e9c76 100644
--- a/moodico/moodtest/color_analyzer.py
+++ b/moodico/moodtest/color_analyzer.py
@@ -7,7 +7,7 @@
def product_result_by_mood(mood):
try:
mood_zones_path = 'static/data/mood_zones.json'
- products_path = 'static/data/all_products_hex_update_tempk=4_2_1_1.json'
+ products_path = 'static/data/all_products.json'
with open(mood_zones_path, 'r', encoding='utf-8') as f:
mood_zones = json.load(f)
diff --git a/moodico/products/management/commands/advertise_scraper.py b/moodico/products/management/commands/advertise_scraper.py
new file mode 100644
index 0000000..47530bc
--- /dev/null
+++ b/moodico/products/management/commands/advertise_scraper.py
@@ -0,0 +1,123 @@
+import json
+import os
+from django.conf import settings
+from django.core.management.base import BaseCommand
+from selenium import webdriver
+from selenium.webdriver.common.by import By
+from selenium.webdriver.chrome.service import Service
+from selenium.webdriver.support.ui import WebDriverWait
+from selenium.webdriver.support import expected_conditions as EC
+from webdriver_manager.chrome import ChromeDriverManager
+
+
+class Command(BaseCommand):
+ help = "Scrape products and save JSON under STATIC_ROOT/data/advertise_products.json"
+
+ def handle(self, *args, **options):
+ chrome_options = webdriver.ChromeOptions()
+ chrome_options.add_argument("--headless")
+ chrome_options.add_argument("--no-sandbox")
+ chrome_options.add_argument("--disable-dev-shm-usage")
+ chrome_options.add_argument("--disable-gpu")
+ chrome_options.add_argument(
+ 'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36'
+ )
+
+ driver = webdriver.Chrome(
+ service=Service(ChromeDriverManager().install()),
+ options=chrome_options
+ )
+
+ try:
+ url = "https://www.oliveyoung.co.kr/store/main/getBestList.do?dispCatNo=900000100100001&fltDispCatNo=10000010002&pageIdx=1&rowsPerPage=10"
+ driver.get(url)
+ wait = WebDriverWait(driver, 15)
+
+ # Wait for
to appear (parent of products)
+ wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'ul.cate_prd_list')))
+ # Now get all -
+ products = driver.find_elements(By.CSS_SELECTOR, 'li.flag')
+
+ all_products = []
+ for item in products:
+ try:
+ prd_info = item.find_element(By.CSS_SELECTOR, 'div.prd_info')
+
+ # Main image and link
+ link_tag = prd_info.find_element(By.CSS_SELECTOR, 'a.prd_thumb')
+ product_url = link_tag.get_attribute('href')
+ img_tag = link_tag.find_element(By.TAG_NAME, 'img')
+ image_src = img_tag.get_attribute('src')
+ image_alt = img_tag.get_attribute('alt')
+
+ # Brand and product name
+ prd_name_box = prd_info.find_element(By.CSS_SELECTOR, 'div.prd_name')
+ brand_name = ''
+ product_name = ''
+ try:
+ brand_name = prd_name_box.find_element(By.CSS_SELECTOR, 'span.tx_brand').text.strip()
+ except Exception:
+ pass
+ try:
+ product_name = prd_name_box.find_element(By.CSS_SELECTOR, 'p.tx_name').text.strip()
+ except Exception:
+ pass
+
+ # Price
+ price_original = ''
+ price_current = ''
+ try:
+ price_box = prd_info.find_element(By.CSS_SELECTOR, 'p.prd_price')
+ price_original_elem = price_box.find_elements(By.CSS_SELECTOR, 'span.tx_org')
+ price_original = price_original_elem[0].text.strip() if price_original_elem else ''
+ price_current_elem = price_box.find_elements(By.CSS_SELECTOR, 'span.tx_cur')
+ price_current = price_current_elem.text.strip() if price_current_elem else ''
+ except Exception:
+ pass
+
+ # Flags
+ flags = []
+ try:
+ prd_flag_box = prd_info.find_element(By.CSS_SELECTOR, 'p.prd_flag')
+ flag_spans = prd_flag_box.find_elements(By.CSS_SELECTOR, 'span.icon_flag')
+ flags = [flag.text.strip() for flag in flag_spans]
+ except Exception:
+ pass
+
+ # Review score
+ review_score = None
+ try:
+ prd_point_box = prd_info.find_element(By.CSS_SELECTOR, 'p.prd_point_area')
+ review_point_elem = prd_point_box.find_elements(By.CSS_SELECTOR, 'span.review_point')
+ if review_point_elem:
+ score_text = review_point_elem[0].text.strip()
+ if '10점만점에' in score_text and '점' in score_text:
+ review_score = score_text.replace('10점만점에', '').replace('점', '').strip()
+ except Exception:
+ pass
+
+ product_data = {
+ 'product_url': product_url,
+ 'brand_name': brand_name,
+ 'product_name': product_name,
+ 'image_src': image_src,
+ 'image_alt': image_alt,
+ 'price_original': price_original,
+ 'price_current': price_current,
+ 'flags': flags,
+ 'review_score': review_score
+ }
+
+ all_products.append(product_data)
+ except Exception as e:
+ self.stderr.write(f"Error scraping item: {e}")
+ continue
+
+ SAVE_PATH = os.path.join(settings.BASE_DIR, 'static', 'data', 'advertise_products.json')
+ os.makedirs(os.path.dirname(SAVE_PATH), exist_ok=True)
+ with open(SAVE_PATH, 'w', encoding='utf-8') as f:
+ json.dump(all_products, f, ensure_ascii=False, indent=2)
+ print(f"\nSaved {len(all_products)} products to {SAVE_PATH}")
+
+ finally:
+ driver.quit()
diff --git a/moodico/products/management/commands/generate_clusters.py b/moodico/products/management/commands/generate_clusters.py
index ead4481..470a7f0 100644
--- a/moodico/products/management/commands/generate_clusters.py
+++ b/moodico/products/management/commands/generate_clusters.py
@@ -10,8 +10,6 @@
from sklearn.metrics import silhouette_score
from sklearn.preprocessing import StandardScaler
-
-# -------- helpers (kept as in your script) --------
def hex_to_rgb(hex_code):
h = hex_code.lstrip('#')
if len(h) == 3:
diff --git a/moodico/products/views.py b/moodico/products/views.py
index e9b0610..9dfa99c 100644
--- a/moodico/products/views.py
+++ b/moodico/products/views.py
@@ -17,12 +17,12 @@
# Create your views here.
def color_matrix_explore(request):
"""색상 매트릭스 페이지 뷰"""
- media_cluster = os.path.join(settings.BASE_DIR, 'static','data', 'products_clustered.json')
+ static_cluster = os.path.join(settings.BASE_DIR, 'static','data', 'products_clustered.json')
static_all = os.path.join(settings.BASE_DIR, 'static', 'data', 'all_products.json')
product_path = None
- if os.path.exists(media_cluster):
- product_path = media_cluster
+ if os.path.exists(static_cluster):
+ product_path = static_cluster
else:
product_path = static_all
@@ -725,7 +725,6 @@ def get_top_liked_products(limit=10, include_unliked=True, exclude_brands=None):
# 3) 정렬
products_with_likes.sort(key=lambda x: (-x['like_count'], x['product_name']))
-
return products_with_likes[:limit]
diff --git a/moodico/recommendation/views.py b/moodico/recommendation/views.py
index f0b9d44..2b4d0f2 100644
--- a/moodico/recommendation/views.py
+++ b/moodico/recommendation/views.py
@@ -6,22 +6,55 @@
import logging
logger = logging.getLogger(__name__)
from sklearn.metrics.pairwise import cosine_similarity
-from moodico.products.views import get_top_liked_products
# Create your views here.
-def my_item_recommendation(request):
- # Get recommended or default products
- search_results = get_top_liked_products(limit=10)
- recommended_items = [] # Set this if you want a separate recommended section
-
- return render(
- request,
- 'upload/upload.html',
+# def my_item_recommendation(request):
+# # Get recommended or default products
+# search_results = get_top_liked_products(limit=10)
+# recommended_items = [] # Set this if you want a separate recommended section
+# print("....",search_results)
+
+# return render(
+# request,
+# 'upload/upload.html',
+# {
+# 'search_results': search_results,
+# 'recommended_items': recommended_items
+# }
+# )
+
+def get_recommendation_list():
+ # JSON 데이터를 파싱 (실제로는 DB나 API에서 받아올 수 있음)
+ products_path = 'static/data/advertise_products.json'
+ with open(products_path, 'r', encoding='utf-8') as f:
+ raw_data = json.load(f)
+
+ # 태그 추출 규칙 예시 (첫번째 flag 사용 or None)
+ def get_tag(flags):
+ for tag in ['글로시', 'matte', 'glossy', '증정', '세일', '쿠폰', '오늘드림']:
+ if tag in flags:
+ return tag
+ return flags[0] if flags else '-'
+
+ search_results = [
{
- 'search_results': search_results,
- 'recommended_items': recommended_items
+ "brand": item["brand_name"],
+ "name": item["product_name"],
+ "image": item["image_src"],
+ "price": item["price_original"].replace("~", ""),
+ "tag": get_tag(item.get("flags", [])),
+ "url": item["product_url"],
}
- )
+ for item in raw_data
+ ]
+ return search_results
+
+def my_item_recommendation(request):
+ search_results = get_recommendation_list()
+ return render(request, 'upload/upload.html', {
+ "search_results": search_results
+ })
+
@csrf_exempt
def recommend_by_color(request):
diff --git a/moodico/upload/views.py b/moodico/upload/views.py
index e4addfb..7592f62 100644
--- a/moodico/upload/views.py
+++ b/moodico/upload/views.py
@@ -2,10 +2,12 @@
import requests
from django.http import HttpResponse
from moodico.upload.forms import UploadForm
+from moodico.recommendation.views import get_recommendation_list
# Create your views here.
# 이미지 업로드
def upload_color_image(request):
+ search_results = get_recommendation_list()
if request.method == 'POST':
form = UploadForm(request.POST, request.FILES)
if form.is_valid():
@@ -19,11 +21,12 @@ def upload_color_image(request):
upload.save()
return render(request, 'upload/upload.html', {
'form': UploadForm(),
- 'uploaded_image_url': upload.image_path.url
+ 'uploaded_image_url': upload.image_path.url,
+ 'search_results':search_results,
})
else:
form = UploadForm()
- return render(request, 'upload/upload.html', {'form': form})
+ return render(request, 'upload/upload.html', {'form': form, 'search_results': search_results})
# upload.html에서 검색한 제품의 이미지를 가져옴
def proxy_image(request):
diff --git a/static/data/advertise_products.json b/static/data/advertise_products.json
new file mode 100644
index 0000000..e48c4c8
--- /dev/null
+++ b/static/data/advertise_products.json
@@ -0,0 +1,368 @@
+[
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000227561&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=1",
+ "brand_name": "오휘",
+ "product_name": "[8월올영픽] [미니쿠션+퍼프3매+키링파우치 증정] 오휘 얼티밋 커버 데니어 쿠션 리필 기획 (70D/100D)",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0022/A00000022756108ko.png?l=ko",
+ "image_alt": "[8월올영픽] [미니쿠션+퍼프3매+키링파우치 증정] 오휘 얼티밋 커버 데니어 쿠션 리필 기획 (70D/100D)",
+ "price_original": "65,000원 ~",
+ "price_current": "",
+ "flags": [
+ "세일",
+ "쿠폰",
+ "증정",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000185046&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=5",
+ "brand_name": "투크",
+ "product_name": "[미니 속광도화밤 증정 기획] 투크 워터프루프 슬림 아이라이너 17colors (기획/단품)",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0018/A00000018504631ko.png?l=ko",
+ "image_alt": "[미니 속광도화밤 증정 기획] 투크 워터프루프 슬림 아이라이너 17colors (기획/단품)",
+ "price_original": "13,900원 ~",
+ "price_current": "",
+ "flags": [
+ "세일",
+ "쿠폰",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000204975&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=9",
+ "brand_name": "오브제",
+ "product_name": "[덱스 PICK] 오브제 내추럴 커버 로션 50g 단품/기획(+미니어처 10ml)",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0020/A00000020497508ko.jpg?l=ko",
+ "image_alt": "[덱스 PICK] 오브제 내추럴 커버 로션 50g 단품/기획(+미니어처 10ml)",
+ "price_original": "29,800원 ~",
+ "price_current": "",
+ "flags": [
+ "세일",
+ "쿠폰",
+ "증정",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000138671&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=13",
+ "brand_name": "페리페라",
+ "product_name": "페리페라 스피디 스키니 브로우 7 Colors",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0013/A00000013867112ko.jpg?l=ko",
+ "image_alt": "페리페라 스피디 스키니 브로우 7 Colors",
+ "price_original": "6,000원 ~",
+ "price_current": "",
+ "flags": [
+ "세일",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000228370&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=17",
+ "brand_name": "라카",
+ "product_name": "[8월올영픽/미니틴트증정] 라카 맥시 글레이어 틴트 3.8g 20종 (단품/기획)",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0022/A00000022837013ko.jpg?l=ko",
+ "image_alt": "[8월올영픽/미니틴트증정] 라카 맥시 글레이어 틴트 3.8g 20종 (단품/기획)",
+ "price_original": "18,000원 ~",
+ "price_current": "",
+ "flags": [
+ "세일",
+ "증정",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000213153&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=21",
+ "brand_name": "롬앤",
+ "product_name": "[산리오캐릭터즈] 롬앤 더 쥬시 래스팅 틴트 (+쉐이킹키링증정) 단품/기획",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0021/A00000021315377ko.jpg?l=ko",
+ "image_alt": "[산리오캐릭터즈] 롬앤 더 쥬시 래스팅 틴트 (+쉐이킹키링증정) 단품/기획",
+ "price_original": "",
+ "price_current": "",
+ "flags": [
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000205145&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=25",
+ "brand_name": "디어달리아",
+ "product_name": "[2024어워즈/1등블러쉬]디어달리아 리퀴드 블러쉬",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0020/A00000020514533ko.jpg?l=ko",
+ "image_alt": "[2024어워즈/1등블러쉬]디어달리아 리퀴드 블러쉬",
+ "price_original": "25,000원 ~",
+ "price_current": "",
+ "flags": [
+ "세일",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000165215&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=29",
+ "brand_name": "바닐라코",
+ "product_name": "바닐라코 프라임 프라이머 피니쉬 파우더 (단품/미니)",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0016/A000000165215105ko.jpg?l=ko",
+ "image_alt": "바닐라코 프라임 프라이머 피니쉬 파우더 (단품/미니)",
+ "price_original": "22,000원 ~",
+ "price_current": "",
+ "flags": [
+ "쿠폰",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000185703&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=33",
+ "brand_name": "아떼",
+ "product_name": "아떼 글레이즘 립밤 스틱 2종 택1",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0018/A00000018570313ko.jpg?l=ko",
+ "image_alt": "아떼 글레이즘 립밤 스틱 2종 택1",
+ "price_original": "25,000원 ~",
+ "price_current": "",
+ "flags": [
+ "세일",
+ "쿠폰",
+ "증정",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000208498&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=37",
+ "brand_name": "루미르",
+ "product_name": "[NEW 컬러출시] 루미르 라이트 온 아이즈 섀도우 팔레트 7colors",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0020/A00000020849836ko.png?l=ko",
+ "image_alt": "[NEW 컬러출시] 루미르 라이트 온 아이즈 섀도우 팔레트 7colors",
+ "price_original": "37,000원 ~",
+ "price_current": "",
+ "flags": [
+ "세일",
+ "쿠폰",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000164559&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=41",
+ "brand_name": "라카",
+ "product_name": "[8월올영픽/미니틴트증정] 라카 프루티 글램 틴트 4.5g 25종 (단품/기획)",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0016/A00000016455916ko.jpg?l=ko",
+ "image_alt": "[8월올영픽/미니틴트증정] 라카 프루티 글램 틴트 4.5g 25종 (단품/기획)",
+ "price_original": "18,000원 ~",
+ "price_current": "",
+ "flags": [
+ "세일",
+ "증정",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000147801&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=45",
+ "brand_name": "데이지크",
+ "product_name": "[NEW출시] 데이지크 섀도우팔레트 23 colors (단품/기획)",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0014/A000000147801139ko.jpg?l=ko",
+ "image_alt": "[NEW출시] 데이지크 섀도우팔레트 23 colors (단품/기획)",
+ "price_original": "34,000원 ~",
+ "price_current": "",
+ "flags": [
+ "세일",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000203943&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=49",
+ "brand_name": "에뛰드",
+ "product_name": "[태닝 시나모롤] 에뛰드 컬 픽스 마스카라 1+1 기획 (+미니 마스카라 증정)",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0020/A00000020394357ko.jpg?l=ko",
+ "image_alt": "[태닝 시나모롤] 에뛰드 컬 픽스 마스카라 1+1 기획 (+미니 마스카라 증정)",
+ "price_original": "16,000원 ~",
+ "price_current": "",
+ "flags": [
+ "세일",
+ "쿠폰",
+ "증정",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000136300&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=53",
+ "brand_name": "웨이크메이크",
+ "product_name": "[1+1 기획] 웨이크메이크 철벽 펜 아이라이너 3 COLOR",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0013/A00000013630038ko.jpg?l=ko",
+ "image_alt": "[1+1 기획] 웨이크메이크 철벽 펜 아이라이너 3 COLOR",
+ "price_original": "13,000원 ~",
+ "price_current": "",
+ "flags": [
+ "세일",
+ "쿠폰",
+ "증정",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000165219&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=57",
+ "brand_name": "바닐라코",
+ "product_name": "바닐라코 프라임 프라이머 피니쉬 팩트 (파우더 팩트) 3종",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0016/A00000016521938ko.jpg?l=ko",
+ "image_alt": "바닐라코 프라임 프라이머 피니쉬 팩트 (파우더 팩트) 3종",
+ "price_original": "26,000원 ~",
+ "price_current": "",
+ "flags": [
+ "쿠폰",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000199182&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=61",
+ "brand_name": "투쿨포스쿨",
+ "product_name": "투쿨포스쿨 스머징 트임 라이너",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0019/A00000019918218ko.jpg?l=ko",
+ "image_alt": "투쿨포스쿨 스머징 트임 라이너",
+ "price_original": "",
+ "price_current": "",
+ "flags": [
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000231018&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=65",
+ "brand_name": "더샘",
+ "product_name": "[8월 올영픽/이서 포토카드 선착순 증정] 더샘 글램 퍼펙션 베이크드 하이라이터 4colors(단품/기획)",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0023/A00000023101810ko.jpg?l=ko",
+ "image_alt": "[8월 올영픽/이서 포토카드 선착순 증정] 더샘 글램 퍼펙션 베이크드 하이라이터 4colors(단품/기획)",
+ "price_original": "20,000원 ~",
+ "price_current": "",
+ "flags": [
+ "세일",
+ "증정",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000171371&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=69",
+ "brand_name": "네이밍",
+ "product_name": "네이밍 플러피 파우더 블러쉬 17colors",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0017/A00000017137129ko.jpg?l=ko",
+ "image_alt": "네이밍 플러피 파우더 블러쉬 17colors",
+ "price_original": "15,000원 ~",
+ "price_current": "",
+ "flags": [
+ "쿠폰",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000186836&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=73",
+ "brand_name": "쏘내추럴",
+ "product_name": "[1위 실러] 쏘내추럴 메이크업 세팅 멀티 매직 실러 10ml",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0018/A00000018683611ko.jpg?l=ko",
+ "image_alt": "[1위 실러] 쏘내추럴 메이크업 세팅 멀티 매직 실러 10ml",
+ "price_original": "",
+ "price_current": "",
+ "flags": [
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000179262&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=77",
+ "brand_name": "릴리바이레드",
+ "product_name": "릴리바이레드 무드키보드 11종",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0017/A00000017926237ko.jpg?l=ko",
+ "image_alt": "릴리바이레드 무드키보드 11종",
+ "price_original": "29,000원 ~",
+ "price_current": "",
+ "flags": [
+ "세일",
+ "쿠폰",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000231020&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=81",
+ "brand_name": "투슬래시포",
+ "product_name": "[8월 올영픽/이사배브랜드] 투슬래시포 엔젤릭 새틴 쿠션 기획 (+파우치 증정)",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0023/A00000023102015ko.jpg?l=ko",
+ "image_alt": "[8월 올영픽/이사배브랜드] 투슬래시포 엔젤릭 새틴 쿠션 기획 (+파우치 증정)",
+ "price_original": "42,000원 ~",
+ "price_current": "",
+ "flags": [
+ "세일",
+ "쿠폰",
+ "증정",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000219300&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=85",
+ "brand_name": "컬러그램",
+ "product_name": "[NEW컬러추가] 컬러그램 탕후루 탱글 틴트 밀크 10 COLOR",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0021/A00000021930034ko.jpg?l=ko",
+ "image_alt": "[NEW컬러추가] 컬러그램 탕후루 탱글 틴트 밀크 10 COLOR",
+ "price_original": "10,000원 ~",
+ "price_current": "",
+ "flags": [
+ "세일",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000119540&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=89",
+ "brand_name": "아임미미",
+ "product_name": "[쉐딩/하이라이터/블러셔] 아임미미 멀티스틱 (웜톤/쿨톤)(단품/기획)(+스틱섀도 미니 증정)",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0011/A00000011954097ko.jpg?l=ko",
+ "image_alt": "[쉐딩/하이라이터/블러셔] 아임미미 멀티스틱 (웜톤/쿨톤)(단품/기획)(+스틱섀도 미니 증정)",
+ "price_original": "13,000원 ~",
+ "price_current": "",
+ "flags": [
+ "세일",
+ "쿠폰",
+ "증정",
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000188988&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=93",
+ "brand_name": "클리오",
+ "product_name": "[토이 스토리 콜라보] 클리오 프로아이팔레트에어 단품/기획 (+보핍 파우치 증정)",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0018/A00000018898893ko.jpg?l=ko",
+ "image_alt": "[토이 스토리 콜라보] 클리오 프로아이팔레트에어 단품/기획 (+보핍 파우치 증정)",
+ "price_original": "",
+ "price_current": "",
+ "flags": [
+ "오늘드림"
+ ],
+ "review_score": null
+ },
+ {
+ "product_url": "https://www.oliveyoung.co.kr/store/goods/getGoodsDetail.do?goodsNo=A000000226383&dispCatNo=90000010009&trackingCd=Best_Sellingbest&t_page=%EB%9E%AD%ED%82%B9&t_click=%ED%8C%90%EB%A7%A4%EB%9E%AD%ED%82%B9_%EB%A9%94%EC%9D%B4%ED%81%AC%EC%97%85_%EC%83%81%ED%92%88%EC%83%81%EC%84%B8&t_number=97",
+ "brand_name": "무지개맨션",
+ "product_name": "[단독기획] 무지개맨션 오브제 글로시틴트 8종(단품/기획)",
+ "image_src": "https://image.oliveyoung.co.kr/cfimages/cf-goods/uploads/images/thumbnails/400/10/0000/0022/A00000022638321ko.jpg?l=ko",
+ "image_alt": "[단독기획] 무지개맨션 오브제 글로시틴트 8종(단품/기획)",
+ "price_original": "19,000원 ~",
+ "price_current": "",
+ "flags": [
+ "세일",
+ "오늘드림"
+ ],
+ "review_score": null
+ }
+]
\ No newline at end of file
diff --git a/templates/upload/upload.html b/templates/upload/upload.html
index cc71343..fb1f623 100644
--- a/templates/upload/upload.html
+++ b/templates/upload/upload.html
@@ -125,110 +125,30 @@
mood 기반 추천 제품
추천 제품
- {% if search_results %} {% for product in search_results %}
- {% comment %}
{% endcomment %}
-
-
-
0
-

-
-
- {{ product.brand }}
{{ product.tag }}
+ {% for product in search_results %}
+ {% comment %}
{% endcomment %}
+
+ {% comment %}
+
0 {% endcomment %}
+

+
+
+ {{ product.brand }} {{ product.tag }}
+
+
{{ product.name }}
+
{{ product.price }}
-
{{ product.name }}
-
{{ product.price }}
+
-
-
{% endfor %}
- {% else %}
-
-
-
0
-

-
-
PERIPERA glossy
-
글로우 체크 블러셔
-
18,000원
-
-
-
-
-
-
0
-

-
-
ETUDE HOUSE glossy
-
코팅 틴트 립
-
12,000원
-
-
-
-
-
-
0
-

-
-
INNISFREE matte
-
내추럴 아이쉐도우
-
22,000원
-
-
-
-
-
-
0
-

-
-
CLIO matte
-
어스 온 아이쉐도우
-
32,000원
-
-
-
-
-
-
0
-

-
-
ROMAND matte
-
베이지 매트 립스틱
-
15,000원
-
-
-
- {% endif %}