mirror of
https://github.com/EDeev/npr_meteobot.git
synced 2026-10-07 20:49:33 +03:00
Docker-образ бота с Chromium; прогноз: запуск Chrome по API Selenium 4 (executable_path/chrome_options убраны в 4.10)
This commit is contained in:
parent
69830f156f
commit
111fda71b1
6 changed files with 70 additions and 2 deletions
5
.dockerignore
Normal file
5
.dockerignore
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
.git
|
||||
.github
|
||||
*.md
|
||||
**/__pycache__
|
||||
*.db
|
||||
35
.github/workflows/docker.yml
vendored
Normal file
35
.github/workflows/docker.yml
vendored
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
name: Docker
|
||||
|
||||
on:
|
||||
push:
|
||||
tags: ["v*"]
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
image:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: docker/setup-buildx-action@v3
|
||||
- uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
- id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: ghcr.io/edeev/npr_meteobot
|
||||
tags: |
|
||||
type=semver,pattern={{version}}
|
||||
type=semver,pattern={{major}}.{{minor}}
|
||||
type=raw,value=latest
|
||||
- uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
14
Dockerfile
Normal file
14
Dockerfile
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
# Школьный Telegram-бот погоды и актировок Норильска (aiogram 2). pymorphy2 0.9 не работает на Python 3.11+
|
||||
FROM python:3.10-slim
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends chromium chromium-driver \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
ENV PYTHONUNBUFFERED=1 PYTHONDONTWRITEBYTECODE=1 \
|
||||
CHROME_BIN=/usr/bin/chromium CHROMEDRIVER=/usr/bin/chromedriver
|
||||
WORKDIR /app
|
||||
COPY requirements.txt .
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
COPY *.py schema.sql ./
|
||||
# база подписок sub.db создаётся в томе /data из schema.sql
|
||||
VOLUME ["/data"]
|
||||
WORKDIR /data
|
||||
CMD ["python", "/app/bot.py"]
|
||||
|
|
@ -3,6 +3,7 @@
|
|||
[Русский](README.md) · **English**
|
||||
|
||||
[](https://github.com/EDeev/npr_meteobot/actions/workflows/ci.yml)
|
||||
[](https://github.com/EDeev/npr_meteobot/releases)
|
||||
|
||||
A Telegram bot for schoolchildren in the Norilsk industrial area: it sends class cancellations due to frost
|
||||
and wind ("aktirovka") for the user's shift and district and shows the weather forecast.
|
||||
|
|
@ -25,6 +26,9 @@ BOT_TOKEN=token_from_BotFather python bot.py
|
|||
The `sub.db` database is created on first run from `schema.sql`. Cancellations need Chrome: the
|
||||
administration site is read with Selenium.
|
||||
|
||||
**Docker:** `docker run -d -e BOT_TOKEN=token -v meteobot-data:/data ghcr.io/edeev/npr_meteobot` (same as
|
||||
`git.deev.su/edeev/npr_meteobot`). Chromium for the forecast is in the image, `sub.db` lives in the `/data` volume.
|
||||
|
||||
## License
|
||||
|
||||
School project (2022). The code is open for study; there is no separate license.
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
**Русский** · [English](README.en.md)
|
||||
|
||||
[](https://github.com/EDeev/npr_meteobot/actions/workflows/ci.yml)
|
||||
[](https://github.com/EDeev/npr_meteobot/releases)
|
||||
|
||||
Telegram-бот для школьников Норильского промышленного района: присылает актировки (отмену занятий
|
||||
из-за мороза и ветра) для своей смены и района и показывает прогноз погоды.
|
||||
|
|
@ -25,6 +26,9 @@ BOT_TOKEN=токен_от_BotFather python bot.py
|
|||
База `sub.db` создаётся при первом запуске из `schema.sql`. Для актировок нужен Chrome: сайт
|
||||
администрации читается через Selenium.
|
||||
|
||||
**Docker:** `docker run -d -e BOT_TOKEN=токен -v meteobot-data:/data ghcr.io/edeev/npr_meteobot` (то же —
|
||||
`git.deev.su/edeev/npr_meteobot`). Chromium для прогноза уже в образе, `sub.db` — в томе `/data`.
|
||||
|
||||
## Лицензия
|
||||
|
||||
Школьный проект (2022). Код открыт для изучения, отдельной лицензии нет.
|
||||
|
|
|
|||
10
info.py
10
info.py
|
|
@ -1,6 +1,8 @@
|
|||
# - * - coding: utf-8 - * -
|
||||
import os
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.chrome.options import Options
|
||||
from selenium.webdriver.chrome.service import Service
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
import requests, config
|
||||
|
|
@ -40,8 +42,12 @@ def weather(moment):
|
|||
chrome_options = Options()
|
||||
chrome_options.add_argument("--headless")
|
||||
chrome_options.add_argument('--no-sandbox')
|
||||
chromedriver = 'chromedriver'
|
||||
browser = webdriver.Chrome(executable_path=chromedriver, chrome_options=chrome_options)
|
||||
chrome_options.add_argument('--disable-dev-shm-usage')
|
||||
if os.environ.get('CHROME_BIN'):
|
||||
chrome_options.binary_location = os.environ['CHROME_BIN']
|
||||
# Selenium 4: драйвер — через Service, параметры executable_path/chrome_options убраны в 4.10
|
||||
service = Service(os.environ.get('CHROMEDRIVER', 'chromedriver'))
|
||||
browser = webdriver.Chrome(service=service, options=chrome_options)
|
||||
|
||||
# После успешного входа в систему переходим на страницу «Gismeteo»
|
||||
browser.get(f'https://www.gismeteo.ru/weather-norilsk-3957/{moment}')
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue