Aktraiser commited on
Commit
bd805ae
·
verified ·
1 Parent(s): ba39120

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +93 -31
app.py CHANGED
@@ -21,11 +21,14 @@ def get_current_time_in_timezone(timezone: str) -> str:
21
  return f"Error fetching time for timezone '{timezone}': {str(e)}"
22
 
23
  @tool
24
- def get_nba_matches() -> str:
25
  """
26
  A tool that retrieves upcoming NBA matches using TheRundown API.
27
  Uses the /openers endpoint for the specified date.
28
 
 
 
 
29
  Returns:
30
  A human-readable string listing the upcoming NBA matches with detailed odds information.
31
  """
@@ -34,27 +37,54 @@ def get_nba_matches() -> str:
34
  from typing import Dict, Any
35
  import json
36
 
37
- # Get today's date
38
- today = datetime.date.today().strftime("%Y-%m-%d")
 
39
 
40
  # API configuration
41
- url = f"https://api.apilayer.com/therundown/sports/4/openers/{today}"
 
 
 
 
42
  headers = {
43
  "apikey": "7k4hKSUeWkbigKxZiNV5CQ8RSlEd72Cj"
44
  }
45
 
46
  try:
47
- response = requests.get(url, headers=headers)
 
 
 
 
 
 
48
  response.raise_for_status() # Raise an exception for bad status codes
49
 
50
  data = response.json()
51
  if not data.get("events"):
52
- return "No NBA matches found for today."
53
 
54
  matches = []
55
  for event in data["events"]:
 
 
 
 
 
 
 
 
 
 
 
 
 
56
  # Extract basic game info
57
  teams = event.get("teams_normalized", [])
 
 
 
58
  if len(teams) < 2:
59
  continue
60
 
@@ -63,38 +93,70 @@ def get_nba_matches() -> str:
63
 
64
  # Get the lines info (odds)
65
  lines = event.get("lines", {})
66
- pinnacle = lines.get("3", {}) # Pinnacle is usually most reliable
 
 
 
 
 
 
 
 
 
67
 
68
  # Extract odds information
69
- spread_info = pinnacle.get("spread", {})
70
- total_info = pinnacle.get("total", {})
71
- moneyline_info = pinnacle.get("moneyline", {})
72
 
73
- # Get venue information
74
- schedule = event.get("schedule", {})
75
- venue_name = event.get("score", {}).get("venue_name", "N/A")
76
- venue_location = event.get("score", {}).get("venue_location", "N/A")
77
-
78
- game_info = (
79
- f"Game: {away_team['name']} ({away_team.get('record', 'N/A')}) @ "
80
- f"{home_team['name']} ({home_team.get('record', 'N/A')})\n"
81
- f"Venue: {venue_name} ({venue_location})\n"
82
- f"Moneyline: {away_team['name']} {moneyline_info.get('moneyline_away', 'N/A')} | "
83
- f"{home_team['name']} {moneyline_info.get('moneyline_home', 'N/A')}\n"
84
- f"Spread: {away_team['name']} {spread_info.get('point_spread_away', 'N/A')} "
85
- f"({spread_info.get('point_spread_away_money', 'N/A')})\n"
86
- f"Total: O/U {total_info.get('total_over', 'N/A')} "
87
- f"(Over: {total_info.get('total_over_money', 'N/A')} | "
88
- f"Under: {total_info.get('total_under_money', 'N/A')})\n"
89
- "----------------------------------------\n"
90
- )
91
-
92
- matches.append(game_info)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
 
94
  if matches:
95
  return "\n".join(matches)
96
  else:
97
- return "No NBA matches found with complete information."
98
 
99
  except requests.exceptions.RequestException as e:
100
  return f"Error retrieving NBA matches: {str(e)}"
 
21
  return f"Error fetching time for timezone '{timezone}': {str(e)}"
22
 
23
  @tool
24
+ def get_nba_matches(target_date: str = None) -> str:
25
  """
26
  A tool that retrieves upcoming NBA matches using TheRundown API.
27
  Uses the /openers endpoint for the specified date.
28
 
29
+ Args:
30
+ target_date: Optional date string in YYYY-MM-DD format. If not provided, uses today's date.
31
+
32
  Returns:
33
  A human-readable string listing the upcoming NBA matches with detailed odds information.
34
  """
 
37
  from typing import Dict, Any
38
  import json
39
 
40
+ # Use provided date or today's date
41
+ if target_date is None:
42
+ target_date = datetime.date.today().strftime("%Y-%m-%d")
43
 
44
  # API configuration
45
+ url = f"https://api.apilayer.com/therundown/sports/4/openers/{target_date}"
46
+ params = {
47
+ "offset": "0",
48
+ "include": "scores"
49
+ }
50
  headers = {
51
  "apikey": "7k4hKSUeWkbigKxZiNV5CQ8RSlEd72Cj"
52
  }
53
 
54
  try:
55
+ print(f"Fetching NBA matches for {target_date}...") # Debug log
56
+ response = requests.get(url, headers=headers, params=params)
57
+
58
+ # Print debug information
59
+ print(f"URL: {response.url}")
60
+ print(f"Status Code: {response.status_code}")
61
+
62
  response.raise_for_status() # Raise an exception for bad status codes
63
 
64
  data = response.json()
65
  if not data.get("events"):
66
+ return f"No NBA matches found for {target_date}."
67
 
68
  matches = []
69
  for event in data["events"]:
70
+ # Extract event date and time
71
+ event_date = event.get("event_date", "N/A")
72
+ if event_date != "N/A":
73
+ try:
74
+ dt = datetime.datetime.strptime(event_date, "%Y-%m-%dT%H:%M:%SZ")
75
+ event_date = dt.strftime("%Y-%m-%d %H:%M UTC")
76
+ except ValueError:
77
+ pass
78
+
79
+ # Get schedule information
80
+ schedule = event.get("schedule", {})
81
+ event_headline = schedule.get("event_headline", "")
82
+
83
  # Extract basic game info
84
  teams = event.get("teams_normalized", [])
85
+ if not teams:
86
+ teams = event.get("teams", []) # Fallback to regular teams if normalized not available
87
+
88
  if len(teams) < 2:
89
  continue
90
 
 
93
 
94
  # Get the lines info (odds)
95
  lines = event.get("lines", {})
96
+
97
+ # Try different bookmakers in order of preference
98
+ bookmaker = None
99
+ for bookmaker_id in ["3", "2", "12", "22", "23"]: # Pinnacle, Bovada, Bodog, BetMGM, FanDuel
100
+ if bookmaker_id in lines:
101
+ bookmaker = lines[bookmaker_id]
102
+ break
103
+
104
+ if not bookmaker:
105
+ bookmaker = next(iter(lines.values())) if lines else {}
106
 
107
  # Extract odds information
108
+ spread_info = bookmaker.get("spread", {})
109
+ total_info = bookmaker.get("total", {})
110
+ moneyline_info = bookmaker.get("moneyline", {})
111
 
112
+ # Get venue and broadcast information
113
+ score_info = event.get("score", {})
114
+ venue_name = score_info.get("venue_name", "N/A")
115
+ venue_location = score_info.get("venue_location", "N/A")
116
+ broadcast = score_info.get("broadcast", "N/A")
117
+
118
+ game_info = [
119
+ f"Date: {event_date}",
120
+ ]
121
+
122
+ if event_headline:
123
+ game_info.append(f"Event: {event_headline}")
124
+
125
+ game_info.extend([
126
+ f"Game: {away_team.get('name', 'Unknown')} ({away_team.get('record', 'N/A')}) @ "
127
+ f"{home_team.get('name', 'Unknown')} ({home_team.get('record', 'N/A')})",
128
+ f"Venue: {venue_name} ({venue_location})",
129
+ f"Broadcast: {broadcast}",
130
+ ])
131
+
132
+ # Only add odds if they are meaningful (not 0.0001)
133
+ if moneyline_info.get("moneyline_away", 0) != 0.0001:
134
+ game_info.append(
135
+ f"Moneyline: {away_team.get('name', 'Away')} {moneyline_info.get('moneyline_away', 'N/A')} | "
136
+ f"{home_team.get('name', 'Home')} {moneyline_info.get('moneyline_home', 'N/A')}"
137
+ )
138
+
139
+ if spread_info.get("point_spread_away", 0) != 0.0001:
140
+ game_info.append(
141
+ f"Spread: {away_team.get('name', 'Away')} {spread_info.get('point_spread_away', 'N/A')} "
142
+ f"({spread_info.get('point_spread_away_money', 'N/A')})"
143
+ )
144
+
145
+ if total_info.get("total_over", 0) != 0.0001:
146
+ game_info.append(
147
+ f"Total: O/U {total_info.get('total_over', 'N/A')} "
148
+ f"(Over: {total_info.get('total_over_money', 'N/A')} | "
149
+ f"Under: {total_info.get('total_under_money', 'N/A')})"
150
+ )
151
+
152
+ game_info.append("----------------------------------------")
153
+
154
+ matches.append("\n".join(game_info))
155
 
156
  if matches:
157
  return "\n".join(matches)
158
  else:
159
+ return f"No NBA matches found with complete information for {target_date}."
160
 
161
  except requests.exceptions.RequestException as e:
162
  return f"Error retrieving NBA matches: {str(e)}"