1 parent 4ae5e2e commit 023b1baCopy full SHA for 023b1ba
3 files changed
backend/mongo/AnimeDocument.py
@@ -1,4 +1,5 @@
1
from pydantic import BaseModel
2
+from datetime import datetime
3
from typing import List, Dict
4
5
# Class to Model a typical Anime Document
@@ -12,7 +13,7 @@ class AnimeDocument(BaseModel):
12
13
demographic: str # Primary demographic
14
age_rating: str # g | pg | pg-13 | r | r+ | rx
15
cover_image_url: str # link to MAL image (not CDN)
- date_aired: str # date aired in YYYY-MM-DD
16
+ date_aired: datetime # date aired as datetime (YYYY-MM-DD stored, not hr/mins/secs/ms)
17
status: str # finished_airing | currently_airing | not_aired
18
episode_count: int # number of episodes in the anime
19
avg_episode_len_mins: int # average duration per episode in mins
data/anime_scrape.py
@@ -1,5 +1,6 @@
import json
import time
6
import pandas as pd
@@ -48,6 +49,7 @@ def _normalize_from_mal(item: Dict) -> Dict:
48
49
studios = node.get("studios", [])
50
publishing_company = studios[0].get("name", "Unknown") if studios else "Unknown"
51
synopsis = node.get("synopsis").replace("[Written by MAL Rewrite]", "").strip()
52
+ date_aired = (datetime.strptime(node.get("start_date"), "%Y-%m-%d"))
53
54
# Alt titles (in case main is not en)
55
alt_titles = node.get("alternative_titles")
@@ -67,7 +69,7 @@ def _normalize_from_mal(item: Dict) -> Dict:
67
69
"genres": genres,
68
70
"demographic": demographic,
71
"cover_image_url": node.get("main_picture").get("medium", ""),
- "date_aired": node.get("start_date"),
72
+ "date_aired": date_aired,
73
"status": node.get("status", "not_aired"),
74
"episode_count": node.get("num_episodes", 0),
75
"publishing_company": publishing_company,
data/populate_mongo_db_scraped.py
@@ -30,6 +30,9 @@ def clean_data():
30
# Project current name as its own node_name column (since they may not be english, but useful data)
31
anime_df["node_name"] = anime_df["name"]
32
33
+ # Convert date_aired to datetime
34
+ anime_df["date_aired"] = pd.to_datetime(anime_df["date_aired"], format="mixed")
35
+
36
# Filter out animes without English Names (check alt_titles dict for "en" key, and ensure it is not empty value)
37
anime_df = anime_df[anime_df["alt_titles"].apply(lambda x: "en" in x and x["en"] != "")]
38
0 commit comments