mirror of
https://github.com/temporal-community/temporal-ai-agent.git
synced 2026-03-15 14:08:08 +01:00
155 lines
5.1 KiB
Python
155 lines
5.1 KiB
Python
import os
|
|
import requests
|
|
from datetime import datetime, timedelta
|
|
from dotenv import load_dotenv
|
|
|
|
BASE_URL = "https://api.football-data.org/v4"
|
|
|
|
|
|
def search_fixtures(args: dict) -> dict:
|
|
load_dotenv(override=True)
|
|
api_key = os.getenv("FOOTBALL_DATA_API_KEY", "YOUR_DEFAULT_KEY")
|
|
|
|
team_name = args.get("team")
|
|
date_from_str = args.get("date_from")
|
|
date_to_str = args.get("date_to")
|
|
headers = {"X-Auth-Token": api_key}
|
|
team_name = team_name.lower()
|
|
|
|
try:
|
|
date_from = datetime.strptime(date_from_str, "%Y-%m-%d")
|
|
date_to = datetime.strptime(date_to_str, "%Y-%m-%d")
|
|
except ValueError:
|
|
return {
|
|
"error": "Invalid date provided. Expected format YYYY-MM-DD for both date_from and date_to."
|
|
}
|
|
|
|
# Fetch team ID
|
|
teams_response = requests.get(f"{BASE_URL}/competitions/PL/teams", headers=headers)
|
|
if teams_response.status_code != 200:
|
|
return {"error": "Failed to fetch teams data."}
|
|
|
|
teams_data = teams_response.json()
|
|
team_id = None
|
|
for team in teams_data["teams"]:
|
|
if team_name in team["name"].lower():
|
|
team_id = team["id"]
|
|
break
|
|
|
|
if not team_id:
|
|
return {"error": "Team not found."}
|
|
|
|
date_from_formatted = date_from.strftime("%Y-%m-%d")
|
|
date_to_formatted = date_to.strftime("%Y-%m-%d")
|
|
fixtures_url = f"{BASE_URL}/teams/{team_id}/matches?dateFrom={date_from_formatted}&dateTo={date_to_formatted}"
|
|
print(fixtures_url)
|
|
|
|
fixtures_response = requests.get(fixtures_url, headers=headers)
|
|
if fixtures_response.status_code != 200:
|
|
return {"error": "Failed to fetch fixtures data."}
|
|
|
|
fixtures_data = fixtures_response.json()
|
|
matching_fixtures = []
|
|
|
|
for match in fixtures_data.get("matches", []):
|
|
match_datetime = datetime.strptime(match["utcDate"], "%Y-%m-%dT%H:%M:%SZ")
|
|
if match["competition"]["code"] == "PL":
|
|
matching_fixtures.append(
|
|
{
|
|
"date": match_datetime.strftime("%Y-%m-%d"),
|
|
"homeTeam": match["homeTeam"]["name"],
|
|
"awayTeam": match["awayTeam"]["name"],
|
|
}
|
|
)
|
|
|
|
return {"fixtures": matching_fixtures}
|
|
|
|
|
|
def search_fixtures_example(args: dict) -> dict:
|
|
"""
|
|
Example version of search_fixtures that returns hardcoded data without making API calls.
|
|
The function respects the team name provided and generates fixture dates within the specified range.
|
|
|
|
Args:
|
|
args: Dictionary containing 'team', 'date_from', and 'date_to'
|
|
|
|
Returns:
|
|
Dictionary with 'fixtures' key containing a list of fixture objects
|
|
"""
|
|
team_name = args.get("team", "Default Team FC")
|
|
date_from_str = args.get("date_from")
|
|
date_to_str = args.get("date_to")
|
|
|
|
# Validate dates
|
|
try:
|
|
date_from = datetime.strptime(date_from_str, "%Y-%m-%d")
|
|
date_to = datetime.strptime(date_to_str, "%Y-%m-%d")
|
|
except ValueError:
|
|
return {
|
|
"error": "Invalid date provided. Expected format YYYY-MM-DD for both date_from and date_to."
|
|
}
|
|
|
|
# Calculate 3 reasonable fixture dates within the given range
|
|
date_range = (date_to - date_from).days
|
|
if date_range < 21:
|
|
# If range is less than 3 weeks, use evenly spaced fixtures
|
|
fixture_dates = [
|
|
date_from + timedelta(days=max(1, date_range // 3)),
|
|
date_from + timedelta(days=max(2, date_range * 2 // 3)),
|
|
date_to - timedelta(days=min(2, date_range // 4)),
|
|
]
|
|
else:
|
|
# Otherwise space them out by weeks
|
|
fixture_dates = [
|
|
date_from + timedelta(days=7),
|
|
date_from + timedelta(days=14),
|
|
date_to - timedelta(days=7),
|
|
]
|
|
|
|
# Ensure we only have 3 dates
|
|
fixture_dates = fixture_dates[:3]
|
|
|
|
# Expanded pool of opponent teams to avoid team playing against itself
|
|
all_opponents = [
|
|
"Manchester United FC",
|
|
"Leicester City FC",
|
|
"Manchester City FC",
|
|
"Liverpool FC",
|
|
"Chelsea FC",
|
|
"Arsenal FC",
|
|
"Tottenham Hotspur FC",
|
|
"West Ham United FC",
|
|
"Everton FC",
|
|
]
|
|
|
|
# Select opponents that aren't the same as the requested team
|
|
available_opponents = [
|
|
team for team in all_opponents if team.lower() != team_name.lower()
|
|
]
|
|
|
|
# Ensure we have at least 3 opponents
|
|
if len(available_opponents) < 3:
|
|
# Add generic opponents if needed
|
|
additional_teams = [f"Opponent {i} FC" for i in range(1, 4)]
|
|
available_opponents.extend(additional_teams)
|
|
|
|
# Take only the first 3 opponents
|
|
opponents = available_opponents[:3]
|
|
|
|
# Generate fixtures - always exactly 3
|
|
fixtures = []
|
|
for i, fixture_date in enumerate(fixture_dates):
|
|
date_str = fixture_date.strftime("%Y-%m-%d")
|
|
|
|
# Alternate between home and away games
|
|
if i % 2 == 0:
|
|
fixtures.append(
|
|
{"date": date_str, "homeTeam": opponents[i], "awayTeam": team_name}
|
|
)
|
|
else:
|
|
fixtures.append(
|
|
{"date": date_str, "homeTeam": team_name, "awayTeam": opponents[i]}
|
|
)
|
|
|
|
return {"fixtures": fixtures}
|