{{ paragraph }}
+ {% endfor %} + {% endif %} +Вендоры в корзине МОНТ
+Вендоры в портфеле MONT
Актуальная матрица вендоров, продуктов и категорий. Выбирайте вендоров или категории, чтобы видеть релевантные продуктовые линейки в Инфраструктуре и ИБ.
diff --git a/.gitignore b/.gitignore index fe88a36..aefcdef 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ __pycache__/ *.pyc .venv/ +.env CONTEXT.md CONTEXT.local.md backups/ diff --git a/docker-compose.yml b/docker-compose.yml index 7d664c0..2428810 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,8 +6,16 @@ services: SECRET_KEY: ${SECRET_KEY:-change-me-please} WEB_CONCURRENCY: ${WEB_CONCURRENCY:-4} GUNICORN_THREADS: ${GUNICORN_THREADS:-5} + TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN:-} + TELEGRAM_CHAT_ID: ${TELEGRAM_CHAT_ID:-} + NEWS_API_TOKEN: ${NEWS_API_TOKEN:-} + TZ: ${TZ:-Europe/Moscow} volumes: - ./matrix.db:/app/matrix.db + - ./static/news_images:/app/static/news_images + - ./static/events_images:/app/static/events_images + - ./static/css:/app/static/css + - ./templates:/app/templates restart: unless-stopped nginx: @@ -16,7 +24,7 @@ services: depends_on: - app ports: - - "5000:80" + - "5002:80" volumes: - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro restart: unless-stopped diff --git a/mont_logo.png b/mont_logo.png index 7c4ec2f..49805c4 100644 Binary files a/mont_logo.png and b/mont_logo.png differ diff --git a/mont_scraper.py b/mont_scraper.py new file mode 100644 index 0000000..62f3c95 --- /dev/null +++ b/mont_scraper.py @@ -0,0 +1,717 @@ +#!/usr/bin/env python3 +""" +Парсер новостей с mont.ru → публикует в ZKART БД. +Запуск: python3 mont_scraper.py [--all10] +""" +import re, os, sys, secrets, datetime, sqlite3, time, json +from urllib.request import urlopen, Request, build_opener, HTTPCookieProcessor +from http.cookiejar import CookieJar +from urllib.parse import urlencode, urlparse +from html import unescape + +DB_PATH = "/home/ruslan/docker/ZKART#/matrix.db" +IMG_DIR = "/home/ruslan/docker/ZKART#/static/news_images" +BASE_URL = "https://www.mont.ru" +LIST_URL = "https://www.mont.ru/ru-ru/news?period=1" +SITE_BASE = "https://maps.4mont.ru" +TG_TOKEN = "8181219074:AAGvqWqb6t10YP4xpMOQnBq_6LrUqAFm5hM" +TG_CHAT_ID = "54986411" +MONT_EMAIL = "rgalyaviev@mont.com" +MONT_PASS = "utOgbZ09mont" + +HEADERS = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36", + "Accept": "text/html,application/xhtml+xml,*/*;q=0.9"} + +os.makedirs(IMG_DIR, exist_ok=True) + + +# ── Auth ────────────────────────────────────────────────────────────────────── + +def make_authenticated_opener() -> build_opener: + """Login to mont.ru via OIDC and return an opener with auth cookies.""" + jar = CookieJar() + opener = build_opener(HTTPCookieProcessor(jar)) + + # Step 1: GET login → redirected to passport.mont.ru + req = Request(f"{BASE_URL}/ru-ru/account/login", headers=HEADERS) + with opener.open(req, timeout=20) as r: + html = r.read().decode("utf-8", errors="replace") + login_url = r.url + + form_action = re.search(r'
{{ paragraph }}
+ {% endfor %} + {% endif %} +{{ e.body | striptags | truncate(160, true, '...') }}
+Актуальная матрица вендоров, продуктов и категорий. Выбирайте вендоров или категории, чтобы видеть релевантные продуктовые линейки в Инфраструктуре и ИБ.