diff --git a/.env-base b/.env-base index 510adcf..3b5f5ec 100644 --- a/.env-base +++ b/.env-base @@ -6,4 +6,5 @@ PYTHON_VERSION=$(grep -m 1 'python' ./pyproject.toml | grep -oP 'python\s*=\s*"\ DOCKER_PROJECTS=("gallery") DOCKER_TAG=latest -OPENWEATHER_KEY="" \ No newline at end of file +OPENWEATHER_KEY="" +GISMETEO_AUTH="" \ No newline at end of file diff --git a/docker-compose-develop.yaml b/docker-compose-develop.yaml index 6742296..3e75bda 100644 --- a/docker-compose-develop.yaml +++ b/docker-compose-develop.yaml @@ -13,6 +13,7 @@ services: environment: - REDIS_HOST=redis - OPENWEATHER_KEY=$OPENWEATHER_KEY + - GISMETEO_AUTH=$GISMETEO_AUTH - DEBUG=1 ports: - 8000:80 diff --git a/docker-compose.yaml b/docker-compose.yaml index c1c7ce1..fe15a82 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -13,6 +13,7 @@ services: environment: - REDIS_HOST=redis - OPENWEATHER_KEY=$OPENWEATHER_KEY + - GISMETEO_AUTH=$GISMETEO_AUTH depends_on: - redis ports: diff --git a/gallery/painting/gismeteo/api.py b/gallery/painting/gismeteo/api.py index 8e042c5..1547a06 100644 --- a/gallery/painting/gismeteo/api.py +++ b/gallery/painting/gismeteo/api.py @@ -1,6 +1,7 @@ import datetime import json import logging +from os import environ from typing import Any from bs4 import BeautifulSoup @@ -9,6 +10,7 @@ from fastapi import HTTPException, status from gallery.sketch.source import ApiSource from gallery.sketch.weather.api import WeatherApi from gallery.sketch.weather.model import Location, WeatherResponse, WeatherValue +from gallery.sketch.weather.util import merge_weather_values from . import datehelp from .parser import DAYS_PARSER, LOCATION_PARSER, ONE_DAY_PARSER, ROW_PARSERS @@ -20,18 +22,7 @@ class GismeteoApi(WeatherApi): PROVIDER = "gismeteo" SOURCE = ApiSource( "https://www.gismeteo.ru", - cookies={ - "cf_clearance": ( - "zPj8qeaYZWp5BUZsWIRD7kd32s59IDWWaVvD7GGf6b4-1724254262-1.2.1.1-" - "R1PaHoqlm4OEgHfrOg6oAJmVmFJ7053JI_QDjIFlCAmbNY0oyw1J4QtgmEkAkTWF4C99X5hpXmZB2en." - "9Ey3NL0kzaE10UGBHPli5OLxHNKC3wQ34xmxTxg6GcKouXOPRgqo92lVRpQP7ghvDmvvT_" - "S6YXDbRonkamptWhZiAsIhsnIQg2Mt7Lk1fxSEVbaey_RXVQBvaR2ofiFgIavcbQPRFSvJ." - "Ct_FujmymTAZWh1XHTptK32kur81NXyPuARThetOKQm8AklaMa855Oom6Bms1a4F9b0yEHSd2inA4j3FR7uauu8hhwO0Z2goa3." - "ktpXXAQLz6dm.fBEWIHD7wooda15X57tCcDOely4hxhO4LK2lIH6TbOr." - "rZQAiRRhltHiCizP1Ou2SiF_81lb1umoDh739tQD1cnw_USnL." - "JwTHvkB00ZnaHRMi4FCBrsKIE0NxJO6kiv1QANqumzf5.8_pSIGRo2cKeO8xCydduDNFbStdOmLR6FU7ZKqVu" - ) - }, + cookies={"xauth": auth} if (auth := environ.get("GISMETEO_AUTH")) else None, ) def _parse_oneday(self, date: datetime.date, data: str) -> WeatherResponse: @@ -45,6 +36,10 @@ class GismeteoApi(WeatherApi): result.append({}) result[index][parser.KEY] = value values = [WeatherValue(**item) for item in result] + # group values by 3 hours + if len(values) > 8: + n = 3 + values = [merge_weather_values(values[i].date, values[i : i + n]) for i in range(0, len(values), n)] return WeatherResponse( location=location or "n/a", date=date,