69 lines
2.2 KiB
Python
69 lines
2.2 KiB
Python
import os
|
|
import json
|
|
import requests
|
|
import boto3
|
|
from botocore.config import Config
|
|
|
|
|
|
CITIES = [
|
|
"Moscow,RU",
|
|
"London,GB",
|
|
"Paphos,CY",
|
|
"Ulyanovsk,RU",
|
|
"Santiago,CL",
|
|
]
|
|
|
|
|
|
def main(event, context):
|
|
api_key = os.environ["OWM_API_KEY"]
|
|
sqs_endpoint = os.environ.get(
|
|
"SQS_ENDPOINT", "http://shared-sqs.shared-sqs.svc.cluster.local:4100"
|
|
)
|
|
access_key = os.environ["SQS_ACCESS_KEY"]
|
|
secret_key = os.environ["SQS_SECRET_KEY"]
|
|
queue_name = os.environ.get("SQS_QUEUE_NAME", "weather-data")
|
|
|
|
cfg = Config(signature_version="s3v4", s3={"addressing_style": "path"})
|
|
sqs = boto3.client(
|
|
"sqs",
|
|
endpoint_url=sqs_endpoint,
|
|
aws_access_key_id=access_key,
|
|
aws_secret_access_key=secret_key,
|
|
region_name="us-east-1",
|
|
config=cfg,
|
|
)
|
|
|
|
# Создаём очередь если не существует
|
|
try:
|
|
queue_url = sqs.get_queue_url(QueueName=queue_name)["QueueUrl"]
|
|
except Exception:
|
|
queue_url = sqs.create_queue(QueueName=queue_name)["QueueUrl"]
|
|
|
|
results = []
|
|
for city in CITIES:
|
|
try:
|
|
resp = requests.get(
|
|
"https://api.openweathermap.org/data/2.5/weather",
|
|
params={"q": city, "appid": api_key, "units": "metric"},
|
|
timeout=10,
|
|
)
|
|
resp.raise_for_status()
|
|
data = resp.json()
|
|
msg = {
|
|
"city": data["name"],
|
|
"country": data["sys"]["country"],
|
|
"temperature": data["main"]["temp"],
|
|
"feels_like": data["main"]["feels_like"],
|
|
"humidity": data["main"]["humidity"],
|
|
"pressure": data["main"]["pressure"],
|
|
"wind_speed": data["wind"]["speed"],
|
|
"description": data["weather"][0]["description"],
|
|
"owm_timestamp": data["dt"],
|
|
}
|
|
sqs.send_message(QueueUrl=queue_url, MessageBody=json.dumps(msg))
|
|
results.append({"city": msg["city"], "temp": msg["temperature"]})
|
|
except Exception as e:
|
|
results.append({"city": city, "error": str(e)})
|
|
|
|
return {"status": "ok", "sent": len(results), "results": results}
|