73 lines
2.0 KiB
Python
Executable File
73 lines
2.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
weather - Quick weather check
|
|
|
|
Get current weather and forecasts using wttr.in.
|
|
"""
|
|
|
|
import sys
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
WORKSPACE = Path("/home/wdjones/.openclaw/workspace")
|
|
DEFAULT_LOCATION = "auto" # wttr.in auto-detects
|
|
|
|
def get_weather(location: str = None, detailed: bool = False):
|
|
"""Get weather for a location."""
|
|
loc = location or DEFAULT_LOCATION
|
|
loc = loc.replace(' ', '+')
|
|
|
|
if detailed:
|
|
# Full forecast
|
|
cmd = f'curl -s "wttr.in/{loc}?T"'
|
|
else:
|
|
# Compact format
|
|
cmd = f'curl -s "wttr.in/{loc}?format=%l:+%c+%t+%h+%w"'
|
|
|
|
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
|
|
output = result.stdout.strip()
|
|
|
|
if 'Unknown location' in output:
|
|
print(f"Location not found: {location}")
|
|
return
|
|
|
|
print(output)
|
|
|
|
def get_moon():
|
|
"""Get moon phase."""
|
|
cmd = 'curl -s "wttr.in/moon"'
|
|
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
|
|
print(result.stdout)
|
|
|
|
def main():
|
|
if len(sys.argv) < 2:
|
|
# Default: compact weather for auto location
|
|
get_weather()
|
|
return
|
|
|
|
cmd = sys.argv[1]
|
|
|
|
if cmd == 'moon':
|
|
get_moon()
|
|
elif cmd == 'full':
|
|
location = ' '.join(sys.argv[2:]) if len(sys.argv) > 2 else None
|
|
get_weather(location, detailed=True)
|
|
elif cmd in ['-h', '--help']:
|
|
print("Usage:")
|
|
print(" weather - Current weather (auto location)")
|
|
print(" weather <location> - Weather for location")
|
|
print(" weather full [loc] - Detailed forecast")
|
|
print(" weather moon - Moon phase")
|
|
print("")
|
|
print("Examples:")
|
|
print(" weather London")
|
|
print(" weather 'New York'")
|
|
print(" weather full Chicago")
|
|
else:
|
|
# Treat as location
|
|
location = ' '.join(sys.argv[1:])
|
|
get_weather(location)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|