Created
February 16, 2024 17:42
-
-
Save ksafranski/fd537a1badb539272dab8a5d23bb4e7f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import requests | |
import json | |
from pathlib import Path | |
from openai import OpenAI, openai | |
from datetime import datetime, timedelta | |
import asyncio | |
# Assuming OpenAI Python client is already installed, configured with API key | |
openai.api_key = os.getenv('OPEN_AI_API_KEY') | |
OPENWEATHERMAP_API_KEY = os.getenv('OPENWEATHERMAP_API_KEY') | |
DAYS = 3 | |
async def get_weather(zip_code): | |
geo_url = f"http://api.openweathermap.org/geo/1.0/zip?zip={zip_code},US&appid={OPENWEATHERMAP_API_KEY}" | |
geo_res = requests.get(geo_url) | |
geo_data = geo_res.json() | |
lat, lon = geo_data['lat'], geo_data['lon'] | |
weather_url = f"https://api.openweathermap.org/data/3.0/onecall?lat={lat}&lon={lon}&appid={OPENWEATHERMAP_API_KEY}" | |
weather_res = requests.get(weather_url) | |
weather_data = weather_res.json() | |
parsed_data = [] | |
for idx, data in enumerate(weather_data['daily']): | |
if DAYS < idx + 1: | |
continue | |
parsed_data.append({ | |
'date': datetime.utcfromtimestamp(data['dt']).strftime('%Y-%m-%d'), | |
'high': data['temp']['max'], | |
'low': data['temp']['min'], | |
'humidity': data['humidity'], | |
'morning_temp': data['temp']['morn'], | |
'evening_temp': data['temp']['eve'], | |
'wind_speed': data['wind_speed'], | |
'cloudiness': data['clouds'], | |
'conditions': [d['main'] for d in data['weather']], | |
}) | |
return parsed_data | |
async def generate_report(data): | |
response = openai.ChatCompletion.create( | |
model="gpt-4-turbo-preview", | |
messages=[ | |
# The task description and the prompt go here, | |
# similar to the structure in the TypeScript code | |
] | |
) | |
# Assuming the use of chat-completions requires handling similarly, | |
# this API might differ, check OpenAI Python client documentation | |
return response.choices[0].text | |
async def generate_audio_report(text): | |
speech_file = Path('./report.mp3').resolve() | |
# Generate audio using OpenAI here | |
# Check the OpenAI Python client documentation for `openai.Audio` | |
pass # Placeholder for the audio generation logic | |
async def run_bot(): | |
print("Running bot...") | |
zip_code = input("Enter a ZIP code to check the weather: ") # Example for input, adapt as needed | |
weather_data = await get_weather(zip_code) | |
text_report = await generate_report(weather_data) | |
await generate_audio_report(text_report) | |
# Run the bot - Note that top-level asyncio.run cannot be called directly in Jupyter notebooks | |
if __name__ == "__main__": | |
asyncio.run(run_bot()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment