File size: 4,559 Bytes
cb47347
 
7b96044
cb47347
e0f71e1
 
 
cb47347
 
 
7b96044
cb47347
7b96044
 
e0f71e1
 
 
7b96044
 
cb47347
 
 
 
 
 
 
 
4438ccd
 
cb47347
 
 
 
 
e0f71e1
 
 
 
 
 
 
 
 
 
cb47347
3ae3815
cb47347
3ae3815
cb47347
3ae3815
 
cb47347
 
 
e0f71e1
 
 
cb47347
 
 
 
 
 
e0f71e1
 
cb47347
 
 
 
 
 
 
 
 
e0f71e1
cb47347
 
 
 
e0f71e1
 
 
 
cb47347
 
e0f71e1
 
 
 
cb47347
 
e0f71e1
 
 
 
 
 
 
 
 
 
cb47347
e0f71e1
cb47347
e0f71e1
cb47347
e0f71e1
cb47347
 
 
e0f71e1
 
cb47347
 
 
 
 
e0f71e1
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import requests

from .common import config, vehicle


# current weather API
def get_weather(location: str = ""):
    """
    Returns the CURRENT weather in a specified location.
    Args:
    location (string) : Required. The name of the location, could be a city or lat/longitude in the following format latitude,longitude (example: 37.7749,-122.4194). If the location is not specified, the function will return the weather in the current location.
    """

    if location == "":
        print(
            f"get_weather: location is empty, using the vehicle location. ({vehicle.location})"
        )
        location = vehicle.location

    # The endpoint URL provided by WeatherAPI
    url = f"http://api.weatherapi.com/v1/current.json?key={config.WEATHER_API_KEY}&q={location}&aqi=no"
    print(url)

    # Make the API request
    response = requests.get(url)

    if response.status_code != 200:
        print(f"Failed to get weather data: {response.status_code}, {response.text}")
        return f"Failed to get weather data, try again", response

    # Parse the JSON response
    weather_data = response.json()

    # Extracting the necessary pieces of data
    location = weather_data["location"]["name"]
    region = weather_data["location"]["region"]
    country = weather_data["location"]["country"]
    time = weather_data["location"]["localtime"]
    temperature_c = weather_data["current"]["temp_c"]
    condition_text = weather_data["current"]["condition"]["text"]
    if "wind_kph" in weather_data["current"]:
        wind_kph = weather_data["current"]["wind_kph"]
    humidity = weather_data["current"]["humidity"]
    feelslike_c = weather_data["current"]["feelslike_c"]

    # Formulate the sentences - {region}, {country}
    weather_sentences = (
        f"The current weather in {location} is {condition_text} "
        f"with a temperature of {temperature_c}°C that feels like {feelslike_c}°C. "
        # f"Humidity is at {humidity}%. "
        # f"Wind speed is {wind_kph} kph." if 'wind_kph' in weather_data['current'] else ""
    )
    return weather_sentences, weather_data


# weather forecast API
def get_forecast(city_name: str = "", when=0, **kwargs):
    """
    Returns the weather forecast in a specified number of days for a specified city .
    Args:
    city_name (string) : Required. The name of the city.
    when (int) : Required. in number of days (until the day for which we want to know the forecast) (example: tomorrow is 1, in two days is 2, etc.)
    """

    when += 1
    # The endpoint URL provided by WeatherAPI
    url = f"http://api.weatherapi.com/v1/forecast.json?key={WEATHER_API_KEY}&q={city_name}&days={str(when)}&aqi=no"

    # Make the API request
    response = requests.get(url)

    if response.status_code == 200:
        # Parse the JSON response
        data = response.json()

        # Initialize an empty string to hold our result
        forecast_sentences = ""

        # Extract city information
        location = data.get("location", {})
        city_name = location.get("name", "the specified location")

        # print(data)

        # Extract the forecast days
        forecast_days = data.get("forecast", {}).get("forecastday", [])[when - 1 :]
        # number = 0

        # print (forecast_days)

        for day in forecast_days:
            date = day.get("date", "a specific day")
            conditions = (
                day.get("day", {})
                .get("condition", {})
                .get("text", "weather conditions")
            )
            max_temp_c = day.get("day", {}).get("maxtemp_c", "N/A")
            min_temp_c = day.get("day", {}).get("mintemp_c", "N/A")
            chance_of_rain = day.get("day", {}).get("daily_chance_of_rain", "N/A")

            if when == 1:
                number_str = "today"
            elif when == 2:
                number_str = "tomorrow"
            else:
                number_str = f"in {when-1} days"

            # Generate a sentence for the day's forecast
            forecast_sentence = f"On {date} ({number_str}) in {city_name}, the weather will be {conditions} with a high of {max_temp_c}°C and a low of {min_temp_c}°C. There's a {chance_of_rain}% chance of rain. "

            # number = number + 1
            # Add the sentence to the result
            forecast_sentences += forecast_sentence
        return forecast_sentences
    else:
        # Handle errors
        print(f"Failed to get weather data: {response.status_code}, {response.text}")
        return f"error {response.status_code}"