Update routeros_version_notify.py
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user