기본 구조 완성. 파일 정리하면 끝. 일단 배포 완료
todo - tf 파일의 slack_url 환경변수 등으로 정리 - 배포하는 스크립트? 필요할 것 같기도 함
This commit is contained in:
parent
91e986b475
commit
1b8b580554
6 changed files with 230 additions and 82 deletions
39
menu.py
39
menu.py
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue