Update routeros_version_notify.py

This commit is contained in:
gru
2026-02-20 13:26:16 +01:00
parent 1f685003e0
commit 1a312e3414

View File

@@ -1 +1,90 @@
@
#!/usr/bin/env python3
# Hi MikroTik Team! Great RSS feeds, thanks!
# Mateusz Gruszczyński (linuxiarz.pl), contact: zdzichu6969@gmail.com
# Script: https://git.linuxiarz.pl/gru/tools_scripts/src/branch/master/routeros_version_notify.py
import requests
from bs4 import BeautifulSoup
import json
import os
import re
from datetime import datetime
import time
PUSHOVER_USER = 'your_user_key'
PUSHOVER_TOKEN = 'your_api_token'
STATE_FILE = 'mikrotik_versions.json'
RSS_URLS = {
'stable': 'https://cdn.mikrotik.com/routeros/latest-stable.rss',
'long-term': 'https://cdn.mikrotik.com/routeros/latest-long-term.rss',
'development': 'https://cdn.mikrotik.com/routeros/latest-development.rss',
'testing': 'https://cdn.mikrotik.com/routeros/latest-testing.rss'
}
def get_latest_versions():
versions = {}
headers = {
'User-Agent': 'RSSChecker/1.0 (Hi MikroTik Team! zdzichu6969@gmail.com https://git.linuxiarz.pl/gru/tools_scripts/src/branch/master/routeros_version_notify.py)'
}
for channel, url in RSS_URLS.items():
print(f"Checking {channel}: {url}")
try:
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status()
soup = BeautifulSoup(response.content, 'xml')
item = soup.find('item')
if item:
title = item.title.string.strip()
match = re.search(r'(\d+\.\d+(?:\.\d+)?(?:\w+)?)', title)
if match:
versions[channel] = match.group(1)
continue
versions[channel] = 'Not found'
except Exception as e:
print(f"RSS error {url}: {e}")
versions[channel] = 'Error'
time.sleep(0.5)
return versions
def load_saved_versions():
if os.path.exists(STATE_FILE):
with open(STATE_FILE, 'r') as f:
return json.load(f)
return {}
def save_versions(versions):
versions['last_check'] = datetime.now().isoformat()
with open(STATE_FILE, 'w') as f:
json.dump(versions, f, indent=2)
def send_pushover(title, message):
url = 'https://api.pushover.net/1/messages.json'
data = {
'token': PUSHOVER_TOKEN,
'user': PUSHOVER_USER,
'title': title,
'message': message,
'timestamp': int(datetime.now().timestamp())
}
requests.post(url, data=data).raise_for_status()
current_versions = get_latest_versions()
saved_versions = load_saved_versions()
new_versions = False
message_parts = []
for channel, ver in current_versions.items():
saved_ver = saved_versions.get(channel, '0.0')
if ver != 'Not found' and ver != 'Error' and ver > saved_ver:
new_versions = True
message_parts.append(f"{channel}: {saved_ver} -> {ver}")
if new_versions and PUSHOVER_USER != 'your_user_key':
message = "New RouterOS versions:\n" + "\n".join(message_parts)
send_pushover("MikroTik Update", message)
print("Pushover sent!")
save_versions(current_versions)
print("Checked:", current_versions)