| """HTTP Client with retries and delays.""" | |
| import time | |
| import requests | |
| from typing import Dict | |
| from google_play_scraper.config.settings import SETTINGS | |
| from google_play_scraper.exceptions import RateLimitError, RequestError | |
| session = requests.Session() | |
| def get(url: str, retries: int = 3, delay: float = 1.0) -> Dict: | |
| """Make GET request with retries.""" | |
| for attempt in range(retries): | |
| try: | |
| response = session.get(url, timeout=SETTINGS["timeout"]) | |
| response.raise_for_status() | |
| return response.json() | |
| except requests.exceptions.HTTPError as e: | |
| if response.status_code == 429: | |
| raise RateLimitError("Rate limit exceeded") | |
| raise RequestError(f"HTTP error: {e}") | |
| except requests.exceptions.RequestException as e: | |
| if attempt == retries - 1: | |
| raise RequestError(f"Request failed: {e}") | |
| time.sleep(delay) | |
| return {} |