1
0
mirror of https://github.com/serega404/VodokanalBot.git synced 2026-07-01 17:39:17 +03:00

Compare commits

..

3 Commits

Author SHA1 Message Date
serega404 23ab8113cf Добавил поддежку прокси 2026-05-21 00:15:01 +03:00
serega404 dde75d0ef8 Удалил php наследие 2026-05-21 00:01:43 +03:00
serega404 0742f9fcc3 Загрузил gitattribute 2026-05-21 00:01:17 +03:00
9 changed files with 59 additions and 2483 deletions
Executable
+9
View File
@@ -0,0 +1,9 @@
#
# https://help.github.com/articles/dealing-with-line-endings/
#
# These are explicitly windows files and should use crlf
* text=auto eol=lf
*.bat text eol=crlf
*.nsi text eol=crlf
+11 -3
View File
@@ -2,7 +2,7 @@
[![MIT License](https://img.shields.io/github/license/serega404/VodokanalBot)](https://github.com/serega404/VodokanalBot) [![MIT License](https://img.shields.io/github/license/serega404/VodokanalBot)](https://github.com/serega404/VodokanalBot)
### Запуск в Docker ## Запуск в Docker
``` Docker ``` Docker
docker volume create vodokanal_bot_data docker volume create vodokanal_bot_data
@@ -15,11 +15,19 @@ docker run -d --name VodokanalBot \
ghcr.io/serega404/vodokanalbot:main ghcr.io/serega404/vodokanalbot:main
``` ```
### Библиотеки ## Запуск в Docker Compose
Укажи `TELEGRAM_TOKEN` и `TELEGRAM_CHANNEL` в [`docker-compose.yml`](./docker-compose.yml), затем запусти:
``` Docker
docker compose up -d --build
```
## Библиотеки
* [Requests](https://requests.readthedocs.io/en/latest/) * [Requests](https://requests.readthedocs.io/en/latest/)
* [BeautifulSoup](https://www.crummy.com/software/BeautifulSoup/) * [BeautifulSoup](https://www.crummy.com/software/BeautifulSoup/)
### Лицензия ## Лицензия
Распространяется под MIT License. Смотри файл [`LICENSE`](./LICENSE) для того что бы узнать подробности. Распространяется под MIT License. Смотри файл [`LICENSE`](./LICENSE) для того что бы узнать подробности.
+16
View File
@@ -0,0 +1,16 @@
services:
vodokanalbot:
image: ghcr.io/serega404/vodokanalbot:main
container_name: VodokanalBot
restart: always
environment:
TZ: Europe/Moscow
TELEGRAM_TOKEN: TOKEN
TELEGRAM_CHANNEL: CHAT_ID
# PROXY_URL: socks5h://user:password@proxy-host:1080
# PROXY_URL: http://user:password@proxy-host:3128
volumes:
- vodokanal_bot_data:/app/data
volumes:
vodokanal_bot_data:
+21 -3
View File
@@ -8,6 +8,7 @@ URL = os.environ.get('VODOKANAL_URL', 'http://www.tgnvoda.ru/avarii.php')
SEND_SILENT = os.environ.get('SEND_SILENT', False) SEND_SILENT = os.environ.get('SEND_SILENT', False)
TELEGRAM_TOKEN = os.environ.get('TELEGRAM_TOKEN', '') TELEGRAM_TOKEN = os.environ.get('TELEGRAM_TOKEN', '')
TELEGRAM_CHANNEL = os.environ.get('TELEGRAM_CHANNEL', '') TELEGRAM_CHANNEL = os.environ.get('TELEGRAM_CHANNEL', '')
PROXY_URL = os.environ.get('PROXY_URL', '')
if TELEGRAM_TOKEN == '': if TELEGRAM_TOKEN == '':
print("Telegram token is not set") print("Telegram token is not set")
@@ -17,6 +18,16 @@ if TELEGRAM_CHANNEL == '':
print("Telegram channel is not set") print("Telegram channel is not set")
exit() exit()
# Configure HTTP client
session = requests.Session()
if PROXY_URL != '':
session.proxies.update({
'http': PROXY_URL,
'https': PROXY_URL,
})
# Load database # Load database
db = None db = None
@@ -28,7 +39,7 @@ else:
# Get data # Get data
req = requests.get(URL) req = session.get(URL)
if (req.status_code != 200): if (req.status_code != 200):
print("Request error: " + str(req.status_code)) print("Request error: " + str(req.status_code))
@@ -52,7 +63,14 @@ print("The number of posts for this day:", len(elements))
# Send telegram message # Send telegram message
def send_message(message): def send_message(message):
req = requests.get("https://api.telegram.org/bot" + TELEGRAM_TOKEN + "/sendMessage?chat_id=" + TELEGRAM_CHANNEL + "&disable_notification=" + str(SEND_SILENT) + "&text=" + message) req = session.get(
"https://api.telegram.org/bot" + TELEGRAM_TOKEN + "/sendMessage",
params={
'chat_id': TELEGRAM_CHANNEL,
'disable_notification': str(SEND_SILENT),
'text': message,
},
)
if (req.status_code != 200): if (req.status_code != 200):
print("Telegram request error: " + str(req.status_code)) print("Telegram request error: " + str(req.status_code))
exit() exit()
@@ -63,7 +81,7 @@ def send_message(message):
if db is not None: if db is not None:
diff = set(elements) - set(db) diff = set(elements) - set(db)
if diff == []: if not diff:
print("No new posts") print("No new posts")
exit() exit()
+1 -1
View File
@@ -1,2 +1,2 @@
requests requests[socks]
beautifulsoup4 beautifulsoup4
-9
View File
@@ -1,9 +0,0 @@
<?php
return [
'url' => 'http://www.tgnvoda.ru/avarii.php',
// Telegram
'Send_silent' => 'false',
'Telegram_token' => 'token',
'Telegram_channel' => '@channel'
];
?>
@@ -1,21 +0,0 @@
MIT License
Copyright (c) 2019 S.C. Chen, John Schlick, logmanoriginal
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
File diff suppressed because it is too large Load Diff
-92
View File
@@ -1,92 +0,0 @@
<?php
// Connect library
include('libs/simplehtmldom/simple_html_dom.php');
// Load config
$config = include('config.php');
$db = null;
if (file_exists("db.json")) {
$db = json_decode(file_get_contents('./db.json', true), true);
echo print_r($db);
} else {
echo ("Database not exist\n");
}
// get DOM from URL
$html = file_get_html($config['url']);
$all_elements = null;
$dateNow = date("d.m.Y");
echo "Date now: " . $dateNow . "\n";
foreach ($html->find('td[bgcolor="#ffffff"]') as $e) {
$date = "";
preg_match("/(0[1-9]|1[0-9]|2[0-9]|3[01])[.](0[1-9]|1[0-2])[.](20[0-9][0-9]|[0-9][0-9])/", $e->plaintext, $date);
if (strcasecmp(reset($date), $dateNow) == 0) { // get current date posts
// remove date from content
$content = str_replace(reset($date), "", $e->plaintext);
$content = htmlspecialchars_decode($content);
$content = str_replace("\r\n \r\n", "", $content);
$content = str_replace("\n\n", "", $content);
display_message($content);
// add post to array
$all_elements[] = $content;
}
}
if ($all_elements == null) {
echo "Posts not found\n";
exit;
}
echo "The number of posts for this day: " . count($all_elements) . "\n";
if ($db != null) {
$diff = array_diff($all_elements, $db);
if ($diff != null) {
foreach ($diff as $e) {
echo "Message sended.\n";
send_telegram_message($e);
}
} else {
echo "No changes.\n";
exit;
}
} else {
foreach ($all_elements as $e) {
echo "Message sended.\n";
send_telegram_message($e);
}
}
// save posts to database
$json = json_encode($all_elements, JSON_UNESCAPED_UNICODE);
file_put_contents("db.json", $json);
function display_message($message)
{
echo "---- START MESSAGE ----\n";
echo $message . "\n";
echo "---- END MESSAGE ----\n";
}
function send_telegram_message($message)
{
$t_message = urlencode($message); // Url fix
global $config;
$obj = json_decode(file_get_contents("https://api.telegram.org/bot" . $config['Telegram_token'] . "/sendMessage?chat_id=" . $config['Telegram_channel'] . "&disable_notification=" . $config['Send_silent'] . "&text=" . $t_message));
if ($http_response_header[0] != null && $http_response_header[0] == "HTTP/1.1 200 OK") {
try {
echo "Successfully sented message, mess id: " . $obj->{'result'}->{'message_id'} . "\n";
} catch (Exception $e) {
echo "Telegram: Не удалось записать id в файл\n";
}
} else {
echo "Telegram: Не удачный запрос: " . $http_response_header[0] . "\n";
}
}