Home Assistant Git Exporter
This commit is contained in:
69
config/custom_components/pollens/pollensasync.py
Normal file
69
config/custom_components/pollens/pollensasync.py
Normal file
@@ -0,0 +1,69 @@
|
||||
"""asyncio-friendly python API for RNSA (https://pollens.fr)."""
|
||||
import asyncio
|
||||
import aiohttp
|
||||
from aiohttp.client import ClientError, ClientTimeout
|
||||
import json
|
||||
|
||||
import async_timeout
|
||||
|
||||
DEFAULT_TIMEOUT = 240
|
||||
|
||||
CLIENT_TIMEOUT = ClientTimeout(total=DEFAULT_TIMEOUT)
|
||||
|
||||
BASE_URL = "https://pollens.fr/risks/thea/counties/{}"
|
||||
|
||||
|
||||
class PollensClient:
|
||||
"""Pollens client implementation."""
|
||||
|
||||
def __init__(self, session: aiohttp.ClientSession = None, timeout=CLIENT_TIMEOUT):
|
||||
"""Constructor.
|
||||
session: aiohttp.ClientSession or None to create a new session.
|
||||
"""
|
||||
self._county_name = None
|
||||
self._params = {}
|
||||
self._risk_level = None
|
||||
self._risks = {}
|
||||
self._timeout = timeout
|
||||
if session is not None:
|
||||
self._session = session
|
||||
else:
|
||||
self._session = aiohttp.ClientSession()
|
||||
|
||||
async def Get(self, number):
|
||||
"""Get data by station number."""
|
||||
try:
|
||||
request = await self._session.get(
|
||||
BASE_URL.format(number), timeout=CLIENT_TIMEOUT
|
||||
)
|
||||
if "application/json" in request.headers["content-type"]:
|
||||
request_json = await request.json()
|
||||
else:
|
||||
request_json = await request.text()
|
||||
request_json = json.loads(request_json)
|
||||
|
||||
self._county_name = request_json["countyName"]
|
||||
for risk in request_json["risks"]:
|
||||
self._risks[risk["pollenName"]] = risk["level"]
|
||||
self._risk_level = request_json["riskLevel"]
|
||||
return request_json
|
||||
except (ClientError, asyncio.TimeoutError, ConnectionRefusedError) as err:
|
||||
return None
|
||||
|
||||
@property
|
||||
def county_name(self):
|
||||
return self._county_name
|
||||
|
||||
@property
|
||||
def risks(self):
|
||||
return self._risks
|
||||
|
||||
@property
|
||||
def risk_level(self):
|
||||
return self._risk_level
|
||||
|
||||
# async def _get(self, path, **kwargs):
|
||||
# with async_timeout.timeout(self._timeout):
|
||||
# resp = await self._session.get(path, params=dict(self._params, **kwargs))
|
||||
# print(type(resp.headers["Content-Type"]))
|
||||
# return await resp.text(encoding="utf-8")
|
||||
Reference in New Issue
Block a user