41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
from dataclasses import dataclass, field
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
|
|
class NolMeta(BaseModel):
|
|
"""상품 페이지 SSR HTML에서 긁어낸 공연 정보."""
|
|
model_config = ConfigDict(populate_by_name=True)
|
|
|
|
goods_id: str
|
|
url: str
|
|
goods_name: str | None = Field(None, alias="goodsName")
|
|
place_name: str | None = Field(None, alias="placeName")
|
|
play_start_date: str | None = Field(None, alias="playStartDate")
|
|
play_end_date: str | None = Field(None, alias="playEndDate")
|
|
running_time: str | None = Field(None, alias="runningTime")
|
|
inter_mission_time: str | None = Field(None, alias="interMissionTime")
|
|
view_rate_name: str | None = Field(None, alias="viewRateName")
|
|
genre_name: str | None = Field(None, alias="genreName")
|
|
sub_genre_name: str | None = Field(None, alias="subGenreName")
|
|
corporation_name: str | None = Field(None, alias="corporationName")
|
|
poster_image_url: str | None = Field(None, alias="posterImageUrl")
|
|
booking_open_time: str | None = Field(None, alias="bookingOpenTime")
|
|
min_price: int | None = None
|
|
detail_image_urls: list[str] = []
|
|
|
|
|
|
@dataclass
|
|
class FetchedImage:
|
|
url: str
|
|
data: bytes
|
|
extension: str # 확장자가 .gif여도 실제 바이트로 판별한 값
|
|
|
|
|
|
@dataclass
|
|
class NolProduct:
|
|
meta: NolMeta
|
|
poster: FetchedImage | None
|
|
details: list[FetchedImage]
|
|
failed_urls: list[str] = field(default_factory=list)
|