Skip to content

Instantly share code, notes, and snippets.

@ksafranski
Created February 16, 2024 17:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ksafranski/fd537a1badb539272dab8a5d23bb4e7f to your computer and use it in GitHub Desktop.
Save ksafranski/fd537a1badb539272dab8a5d23bb4e7f to your computer and use it in GitHub Desktop.
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