|
|
import os |
|
|
from datetime import datetime |
|
|
|
|
|
import sys |
|
|
from pathlib import Path |
|
|
sys.path.append(str(Path(__file__).resolve().parents[1])) |
|
|
from utils.logger import * |
|
|
|
|
|
from components.api_gnews_fetcher import GNewsFetcher |
|
|
from components.api_weather_fetcher import WeatherFetcher |
|
|
from config.config import API_CONFIG |
|
|
from utils.logger import * |
|
|
|
|
|
import logging |
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
def ensure_dir(path): |
|
|
if not os.path.exists(path): |
|
|
os.makedirs(path) |
|
|
logger.info(f"Directory created: {path}") |
|
|
|
|
|
def save_snapshot(data, folder, prefix, region): |
|
|
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") |
|
|
fname = f"{prefix}_{region.replace(' ', '_')}_{timestamp}.json" |
|
|
fpath = os.path.join(folder, fname) |
|
|
with open(fpath, "w", encoding="utf-8") as f: |
|
|
import json |
|
|
json.dump(data, f, ensure_ascii=False, indent=2) |
|
|
logger.info(f"Snapshot saved: {fpath}") |
|
|
|
|
|
def refresh_gnews(regions, out_dir): |
|
|
fetcher = GNewsFetcher() |
|
|
ensure_dir(out_dir) |
|
|
for region in regions: |
|
|
try: |
|
|
news_data = fetcher.fetch_news(region) |
|
|
save_snapshot(news_data, out_dir, "gnews", region) |
|
|
logger.info(f"GNews data for {region} saved.") |
|
|
except Exception as e: |
|
|
logger.error(f"Error fetching GNews for {region}: {e}") |
|
|
|
|
|
def refresh_weather(weather_regions, out_dir): |
|
|
fetcher = WeatherFetcher() |
|
|
ensure_dir(out_dir) |
|
|
for loc in weather_regions: |
|
|
try: |
|
|
weather_data = fetcher.fetch_weather(loc["lat"], loc["lon"]) |
|
|
save_snapshot(weather_data, out_dir, "weather", loc["city"]) |
|
|
logger.info(f"Weather data for {loc['city']} saved.") |
|
|
except Exception as e: |
|
|
logger.error(f"Error fetching Weather for {loc['city']}: {e}") |
|
|
|
|
|
def run_all(): |
|
|
logger.info("Starting data refresh workflow...") |
|
|
regions = API_CONFIG['regions'] |
|
|
weather_regions = API_CONFIG['weather_regions'] |
|
|
news_dir = API_CONFIG['news_output_dir'] |
|
|
weather_dir = API_CONFIG['weather_output_dir'] |
|
|
|
|
|
refresh_gnews(regions, news_dir) |
|
|
refresh_weather(weather_regions, weather_dir) |
|
|
logger.info("All data refreshes complete.") |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
run_all() |
|
|
|