aboutsummaryrefslogtreecommitdiff
path: root/generate-rss.py
diff options
context:
space:
mode:
authorheqnx <root@heqnx.com>2025-05-20 10:38:11 +0300
committerheqnx <root@heqnx.com>2025-05-20 10:38:11 +0300
commit0495a548c9fb670b442fdde92eb9fbfddd570cc3 (patch)
treed61bc75994199c151f570d2f78272c220f95b07b /generate-rss.py
parentdb02b8c623bd778567007c11608f2adb6c3996e7 (diff)
downloadcve-poc-mon-0495a548c9fb670b442fdde92eb9fbfddd570cc3.tar.gz
cve-poc-mon-0495a548c9fb670b442fdde92eb9fbfddd570cc3.zip
added cve-poc-mon
Diffstat (limited to 'generate-rss.py')
-rwxr-xr-xgenerate-rss.py65
1 files changed, 65 insertions, 0 deletions
diff --git a/generate-rss.py b/generate-rss.py
new file mode 100755
index 0000000..a0ee6dd
--- /dev/null
+++ b/generate-rss.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python3
+
+import re
+import os
+
+from xml.dom import minidom
+from xml.etree import ElementTree as ET
+from argparse import ArgumentParser
+
+def generate_rss(input_file, output_file, feed_url):
+ try:
+ with open(input_file, "r", encoding="utf-8") as f:
+ lines = f.readlines()
+ except FileNotFoundError:
+ print(f'[err] {input_file} not found')
+ exit(1)
+
+ lines = lines[::-1]
+
+ feed_file = os.path.basename(output_file)
+ rss = ET.Element('rss', version='2.0')
+ rss.set('xmlns:atom', 'http://www.w3.org/2005/Atom')
+ channel = ET.SubElement(rss, 'channel')
+ ET.SubElement(channel, 'title').text = 'CVE Updates Feed'
+ ET.SubElement(channel, 'link').text = feed_url
+ ET.SubElement(channel, 'description').text = 'RSS feed for recent CVE GitHub repositories'
+ ET.SubElement(channel, 'atom:link', href=f'{feed_url}/{feed_file}', rel='self', type='application/rss+xml')
+
+ pattern = r'-\s*\[[^\]]+\]\(([^)]+)\)\s*(.*)'
+
+ for line in lines:
+ match = re.match(pattern, line.strip())
+ if match:
+ url = match.group(1).strip()
+ description = match.group(2).strip() or 'No description'
+
+ title = os.path.basename(url)
+
+ item_elem = ET.SubElement(channel, 'item')
+ ET.SubElement(item_elem, 'title').text = title
+ ET.SubElement(item_elem, 'link').text = url
+ ET.SubElement(item_elem, 'description').text = description
+
+ rough_string = ET.tostring(rss, 'utf-8')
+ reparsed = minidom.parseString(rough_string)
+ pretty_xml = reparsed.toprettyxml(indent=' ', encoding='utf-8').decode('utf-8')
+
+ with open(output_file, 'w', encoding='utf-8') as f:
+ f.write(pretty_xml)
+
+ print(f'[inf] rss feed generated at {output_file}')
+
+if __name__ == '__main__':
+ parser = ArgumentParser()
+ parser.add_argument('-i', '--input', required=True, help='path to input markdown file')
+ parser.add_argument('-o', '--output', required=True, help='path to output xml file')
+ parser.add_argument('-u', '--url', required=True, help='feed url')
+ args = parser.parse_args()
+
+ generate_rss(
+ args.input,
+ args.output,
+ args.url
+ )
+