Neon-AI commited on
Commit
1897155
·
verified ·
1 Parent(s): 30a1d76

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -20
app.py CHANGED
@@ -48,12 +48,12 @@ def search_anime(keyword: str):
48
  raise HTTPException(status_code=500, detail=f"Failed to search anime: {str(e)}")
49
 
50
  @app.get("/metadata")
51
- def get_metadata(url: str):
52
  """
53
- Example call: /metadata?url=/naruto-677
54
  """
55
  try:
56
- full_url = f"https://hianime.to{url}"
57
  headers = {"User-Agent": "Mozilla/5.0"}
58
  resp = requests.get(full_url, headers=headers)
59
  if resp.status_code != 200:
@@ -62,21 +62,26 @@ def get_metadata(url: str):
62
  soup = BeautifulSoup(resp.text, "html.parser")
63
 
64
  # Title / Japanese / Synonyms
65
- title = soup.select_one("h1.film-name").text.strip() if soup.select_one("h1.film-name") else None
66
- japanese = soup.select_one(".item-head:contains('Japanese:') + .name")
67
- japanese = japanese.text.strip() if japanese else None
68
- synonyms = soup.select_one(".item-head:contains('Synonyms:') + .name")
69
- synonyms = synonyms.text.strip() if synonyms else None
 
 
 
70
 
71
  # Status, type, duration
72
- status = soup.select_one(".item-head:contains('Status:') + .name")
73
- status = status.text.strip() if status else None
74
- anime_type = soup.select_one(".item span.item")
75
- anime_type = anime_type.text.strip() if anime_type else None
76
- duration_elem = soup.select(".item span.item")
77
- duration = duration_elem[1].text.strip() if len(duration_elem) > 1 else None
78
-
79
- # Rating, quality, sub, dub, episodes
 
 
80
  tick_items = soup.select(".tick-item")
81
  rating = tick_items[0].text.strip() if len(tick_items) > 0 else None
82
  quality = tick_items[1].text.strip() if len(tick_items) > 1 else None
@@ -85,10 +90,7 @@ def get_metadata(url: str):
85
  episodes = tick_items[4].text.strip() if len(tick_items) > 4 else None
86
 
87
  # Genres
88
- genres = []
89
- genre_links = soup.select(".item.item-list a[href^='/genre/']")
90
- for g in genre_links:
91
- genres.append(g.text.strip())
92
 
93
  return {
94
  "title": title,
 
48
  raise HTTPException(status_code=500, detail=f"Failed to search anime: {str(e)}")
49
 
50
  @app.get("/metadata")
51
+ def get_metadata(path: str):
52
  """
53
+ Example call: /metadata?path=/naruto-677
54
  """
55
  try:
56
+ full_url = f"https://hianime.to{path}"
57
  headers = {"User-Agent": "Mozilla/5.0"}
58
  resp = requests.get(full_url, headers=headers)
59
  if resp.status_code != 200:
 
62
  soup = BeautifulSoup(resp.text, "html.parser")
63
 
64
  # Title / Japanese / Synonyms
65
+ title_elem = soup.select_one("h1.film-name") or soup.select_one("h2.film-name.dynamic-name")
66
+ title = title_elem.text.strip() if title_elem else None
67
+
68
+ japanese_elem = soup.find("span", string="Japanese:")
69
+ japanese = japanese_elem.find_next_sibling("span").text.strip() if japanese_elem else None
70
+
71
+ synonyms_elem = soup.find("span", string="Synonyms:")
72
+ synonyms = synonyms_elem.find_next_sibling("span").text.strip() if synonyms_elem else None
73
 
74
  # Status, type, duration
75
+ status_elem = soup.find("span", string="Status:")
76
+ status = status_elem.find_next_sibling("span").text.strip() if status_elem else None
77
+
78
+ type_elem = soup.select_one(".tick span.item")
79
+ anime_type = type_elem.text.strip() if type_elem else None
80
+
81
+ duration_elem = soup.find("span", string="Duration:")
82
+ duration = duration_elem.find_next_sibling("span").text.strip() if duration_elem else None
83
+
84
+ # Rating, quality, sub_count, dub_count, episodes
85
  tick_items = soup.select(".tick-item")
86
  rating = tick_items[0].text.strip() if len(tick_items) > 0 else None
87
  quality = tick_items[1].text.strip() if len(tick_items) > 1 else None
 
90
  episodes = tick_items[4].text.strip() if len(tick_items) > 4 else None
91
 
92
  # Genres
93
+ genres = [g.text.strip() for g in soup.select(".item.item-list a[href^='/genre/']")]
 
 
 
94
 
95
  return {
96
  "title": title,