Neon-AI commited on
Commit
6d71073
·
verified ·
1 Parent(s): e9a63e4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -28
app.py CHANGED
@@ -72,8 +72,7 @@ def search_anime(keyword: str):
72
  @app.get("/metadata")
73
  def get_metadata(path: str):
74
  """
75
- Fetch full anime metadata from AniWave.
76
- Example: /metadata?path=/anime-watch/naruto
77
  """
78
  try:
79
  full_url = f"https://www.aniwave.se{path}"
@@ -104,31 +103,47 @@ def get_metadata(path: str):
104
  desc_elem = soup.select_one(".synopsis .content")
105
  description = desc_elem.text.strip() if desc_elem else None
106
 
107
- # Type, Source, Premiered, Date aired, Broadcast, Status
108
- bmeta = soup.select_one(".bmeta .meta")
109
- anime_type = bmeta.select_one("div:contains('Type:') span a").text.strip() if bmeta else None
110
- source = bmeta.select_one("div:contains('Source:') span").text.strip() if bmeta else None
111
- premiered = bmeta.select_one("div:contains('Premiered:') span a").text.strip() if bmeta else None
112
- date_aired = bmeta.select_one("div:contains('Date aired:') span").text.strip() if bmeta else None
113
- broadcast = bmeta.select_one("div:contains('Broadcast:')").text.replace("Broadcast:", "").strip() if bmeta else None
114
- status = bmeta.select_one("div:contains('Status:') a").text.strip() if bmeta else None
115
-
116
- # Genres
117
- genres = [g.text.strip() for g in bmeta.select("div:contains('Genres:') a")] if bmeta else []
118
-
119
- # MAL rating
120
- mal_elem = bmeta.select_one("div:contains('MAL:') span")
121
- mal_rating = mal_elem.text.strip() if mal_elem else None
122
-
123
- # Duration / Episodes
124
- duration_elem = bmeta.select_one("div:contains('Duration:')")
125
- duration = duration_elem.text.replace("Duration:", "").strip() if duration_elem else None
126
- episodes_elem = bmeta.select_one("div:contains('Episodes:') span")
127
- total_episodes = episodes_elem.text.strip() if episodes_elem else None
128
-
129
- # Studios / Producers
130
- studios = [s.text.strip() for s in bmeta.select("div:contains('Studios:') a span")]
131
- producers = [p.text.strip() for p in bmeta.select("div:contains('Producers:') a span")]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
 
133
  return {
134
  "title": title,
@@ -137,7 +152,7 @@ def get_metadata(path: str):
137
  "has_sub": has_sub,
138
  "has_dub": has_dub,
139
  "description": description,
140
- "type": anime_type,
141
  "source": source,
142
  "premiered": premiered,
143
  "date_aired": date_aired,
 
72
  @app.get("/metadata")
73
  def get_metadata(path: str):
74
  """
75
+ Fetch full anime metadata from AniWave with proper fields.
 
76
  """
77
  try:
78
  full_url = f"https://www.aniwave.se{path}"
 
103
  desc_elem = soup.select_one(".synopsis .content")
104
  description = desc_elem.text.strip() if desc_elem else None
105
 
106
+ # bmeta fields
107
+ bmeta_divs = soup.select(".bmeta .meta")
108
+ type_ = source = premiered = date_aired = broadcast = status = mal_rating = duration = total_episodes = None
109
+ genres = []
110
+ studios = []
111
+ producers = []
112
+
113
+ if bmeta_divs:
114
+ for div in bmeta_divs:
115
+ for item in div.find_all("div", recursive=False):
116
+ text = item.get_text(separator="|", strip=True)
117
+ if text.startswith("Type:"):
118
+ type_elem = item.find("a")
119
+ type_ = type_elem.text.strip() if type_elem else None
120
+ elif text.startswith("Source:"):
121
+ source_elem = item.find("span")
122
+ source = source_elem.text.strip() if source_elem else None
123
+ elif text.startswith("Premiered:"):
124
+ premiered_elem = item.find("a")
125
+ premiered = premiered_elem.text.strip() if premiered_elem else None
126
+ elif text.startswith("Date aired:"):
127
+ date_elem = item.find("span")
128
+ date_aired = date_elem.text.strip() if date_elem else None
129
+ elif text.startswith("Broadcast:"):
130
+ broadcast = item.text.replace("Broadcast:", "").strip()
131
+ elif text.startswith("Status:"):
132
+ status_elem = item.find("a")
133
+ status = status_elem.text.strip() if status_elem else None
134
+ elif text.startswith("Genres:"):
135
+ genres = [g.text.strip() for g in item.find_all("a")]
136
+ elif text.startswith("MAL:"):
137
+ mal_rating = item.find(text=True, recursive=False).strip()
138
+ elif text.startswith("Duration:"):
139
+ duration = item.text.replace("Duration:", "").strip()
140
+ elif text.startswith("Episodes:"):
141
+ ep_elem = item.find("span")
142
+ total_episodes = ep_elem.text.strip() if ep_elem else None
143
+ elif text.startswith("Studios:"):
144
+ studios = [s.text.strip() for s in item.find_all("span")]
145
+ elif text.startswith("Producers:"):
146
+ producers = [p.text.strip() for p in item.find_all("span")]
147
 
148
  return {
149
  "title": title,
 
152
  "has_sub": has_sub,
153
  "has_dub": has_dub,
154
  "description": description,
155
+ "type": type_,
156
  "source": source,
157
  "premiered": premiered,
158
  "date_aired": date_aired,