기본 구조 완성. 파일 정리하면 끝. 일단 배포 완료

todo
- tf 파일의 slack_url 환경변수 등으로 정리
- 배포하는 스크립트? 필요할 것 같기도 함
This commit is contained in:
bumpsoo 2024-07-03 05:06:54 +09:00
parent 91e986b475
commit 1b8b580554
6 changed files with 230 additions and 82 deletions

39
menu.py
View file

@ -1,9 +1,13 @@
# menu repository
from dataclasses import dataclass
from typing import Any, Dict, Final, List, Optional
from datetime import datetime
from typing import Dict, Final, List, Optional
import requests
from PIL import Image
from io import BytesIO
import boto3
import slack
BASE: Final[str] = 'https://sfmn.shinsegaefood.com/'
URL: Final[str] = f'{BASE}selectTodayMenu2.do'
@ -26,6 +30,31 @@ class Menu:
def __post_init__(self):
if self.menu_image:
self.menu_image = f"https://store.shinsegaefood.com/{self.menu_image}"
def resize_image(self, bucket_name: str, date: str):
if self.menu_image is None:
return
image_url = self.menu_image
filename: str = date + '/' + str(datetime.now().timestamp()) + 'png'
response = requests.get(image_url)
response.raise_for_status()
target_size = 1024 * 1024
image_data = response.content
img = Image.open(BytesIO(image_data))
while len(image_data) > target_size:
resize_factor = 0.9
new_width, new_height = int(img.width * resize_factor), int(img.height * resize_factor)
img = img.resize((new_width, new_height), Image.Resampling.LANCZOS)
img_bytes = BytesIO()
img.save(img_bytes, format='png')
image_data = img_bytes.getvalue()
s3 = boto3.client("s3")
s3.put_object(
Body=image_data,
Bucket=bucket_name,
Key=filename,
)
self.menu_image = f"https://{bucket_name}.s3.amazonaws.com/{filename}"
# date should be this form 20240601
def menu(date: str) -> List[Menu]:
@ -42,6 +71,7 @@ def menu(date: str) -> List[Menu]:
data: List[Dict[str, str]] = []
try:
data = res.json()['model']['model']
print('data', data)
except:
return menus
for each in data:
@ -49,11 +79,12 @@ def menu(date: str) -> List[Menu]:
menus.append(Menu(
each['MEAL_TYPE_NM'],
each['DINNER_TYPE_NM'],
each['REP_TYPE_NM'],
each['REP_MENU_NM'],
each['MENU_DESC'],
each['TOT_CALORY'],
each.get('MEAL_TYPE_NM'),
each.get('WEB_LINK'),
))
except:
pass
return menus