Hana Celeste commited on
Commit
81b0084
verified
1 Parent(s): 7b6e408

Update app/gscode_logic.py

Browse files
Files changed (1) hide show
  1. app/gscode_logic.py +20 -19
app/gscode_logic.py CHANGED
@@ -18,9 +18,7 @@ class GenshinCodeLogic:
18
  async def start(self):
19
  if not self.session:
20
  self.session = aiohttp.ClientSession(
21
- headers={
22
- "User-Agent": "Mozilla/5.0 (GenshinCodeBot)"
23
- }
24
  )
25
 
26
  async def stop(self):
@@ -29,52 +27,55 @@ class GenshinCodeLogic:
29
  self.session = None
30
 
31
  async def fetch_codes(self) -> Dict:
32
- async with self.session.get(GENSHIN_API, timeout=aiohttp.ClientTimeout(total=20)) as resp:
 
 
 
33
  if resp.status != 200:
34
- return {"count": 0, "codes": []}
35
 
36
  data = await resp.json()
37
 
38
  html = data.get("parse", {}).get("text", {}).get("*")
39
  if not html:
40
- return {"count": 0, "codes": []}
41
 
42
  soup = BeautifulSoup(html, "html.parser")
43
 
44
- results: List[Dict] = []
45
-
46
  for row in soup.select("table.wikitable tbody tr"):
47
  tds = row.find_all("td")
48
  if len(tds) < 3:
49
  continue
50
 
51
- code_el = tds[0].find("code")
52
- if not code_el:
53
  continue
54
 
55
- code = code_el.get_text(strip=True)
56
 
57
- # server (China / Global / etc)
58
  server = tds[1].get_text(" ", strip=True)
59
 
60
- # rewards
61
  rewards = []
62
  for item in tds[2].select(".item-text"):
63
  text = item.get_text(" ", strip=True)
64
  if text:
65
  rewards.append(text)
66
 
67
- # validity (n岷縰 c贸)
68
- validity = tds[3].get_text(" ", strip=True) if len(tds) >= 4 else None
 
 
69
 
70
- results.append({
71
- "code": code,
72
  "server": server,
73
  "rewards": rewards,
74
  "validity": validity
75
  })
76
 
77
  return {
78
- "count": len(results),
79
- "codes": results
80
  }
 
18
  async def start(self):
19
  if not self.session:
20
  self.session = aiohttp.ClientSession(
21
+ headers={"User-Agent": "Mozilla/5.0 (GenshinCodeBot)"}
 
 
22
  )
23
 
24
  async def stop(self):
 
27
  self.session = None
28
 
29
  async def fetch_codes(self) -> Dict:
30
+ async with self.session.get(
31
+ GENSHIN_API,
32
+ timeout=aiohttp.ClientTimeout(total=20)
33
+ ) as resp:
34
  if resp.status != 200:
35
+ return {"count": 0, "cards": []}
36
 
37
  data = await resp.json()
38
 
39
  html = data.get("parse", {}).get("text", {}).get("*")
40
  if not html:
41
+ return {"count": 0, "cards": []}
42
 
43
  soup = BeautifulSoup(html, "html.parser")
44
 
45
+ cards: List[Dict] = []
46
+
47
  for row in soup.select("table.wikitable tbody tr"):
48
  tds = row.find_all("td")
49
  if len(tds) < 3:
50
  continue
51
 
52
+ code_els = tds[0].find_all("code")
53
+ if not code_els:
54
  continue
55
 
56
+ codes = [c.get_text(strip=True) for c in code_els]
57
 
 
58
  server = tds[1].get_text(" ", strip=True)
59
 
 
60
  rewards = []
61
  for item in tds[2].select(".item-text"):
62
  text = item.get_text(" ", strip=True)
63
  if text:
64
  rewards.append(text)
65
 
66
+ validity = (
67
+ tds[3].get_text(" ", strip=True)
68
+ if len(tds) >= 4 else None
69
+ )
70
 
71
+ cards.append({
72
+ "codes": codes,
73
  "server": server,
74
  "rewards": rewards,
75
  "validity": validity
76
  })
77
 
78
  return {
79
+ "count": sum(len(card["codes"]) for card in cards),
80
+ "cards": cards
81
  }