From 4560f3da2fed17b967aeced02cca87c8dcc06836 Mon Sep 17 00:00:00 2001 From: VISHNU VARDHAN VEMULA Date: Wed, 24 Jul 2024 21:05:01 +0530 Subject: [PATCH] Add files via upload --- main.py | 81 +++++++++++++++++++++++++++++++++++++++++++ templates/index.html | 17 +++++++++ templates/result.html | 30 ++++++++++++++++ 3 files changed, 128 insertions(+) create mode 100644 main.py create mode 100644 templates/index.html create mode 100644 templates/result.html diff --git a/main.py b/main.py new file mode 100644 index 0000000..5890c99 --- /dev/null +++ b/main.py @@ -0,0 +1,81 @@ +from flask import Flask, request, render_template, send_file +import requests +import feedparser +import json +import re + +app = Flask(__name__) + +def sanitize_filename(name): + return re.sub(r'[^a-zA-Z0-9_\-\.]', '_', name) + +def verify_rss_url(rss_url): + try: + response = requests.get(rss_url) + if response.status_code != 200: + return False, f"The URL did not return a successful response. Status code: {response.status_code}" + + content_type = response.headers.get('Content-Type', '') + if 'xml' not in content_type.lower(): + return False, f"The URL does not seem to point to an RSS feed (Content-Type: {content_type})" + + feed = feedparser.parse(response.content) + if feed.bozo: + return False, "Failed to parse RSS feed. The URL may not be an RSS feed." + + feed_info = { + 'title': feed.feed.title, + 'link': feed.feed.link, + 'description': feed.feed.description, + 'entries': [], + 'total_entries': len(feed.entries) + } + + for entry in feed.entries: + entry_info = { + 'title': entry.title, + 'link': entry.link, + 'published': entry.published, + 'summary': entry.summary + } + # Check for common places where images might be stored in RSS entries + if 'media_content' in entry and entry.media_content: + entry_info['image'] = entry.media_content[0]['url'] + elif 'media_thumbnail' in entry and entry.media_thumbnail: + entry_info['image'] = entry.media_thumbnail[0]['url'] + elif 'image' in entry: + entry_info['image'] = entry.image + elif 'enclosures' in entry and entry.enclosures: + entry_info['image'] = entry.enclosures[0]['href'] + + feed_info['entries'].append(entry_info) + + # Use the feed title as the file name + file_name = sanitize_filename(feed.feed.title) + '.json' + + # Save feed_info to a JSON file + with open(file_name, 'w') as json_file: + json.dump(feed_info, json_file, indent=4) + + return True, file_name + except requests.RequestException as e: + return False, f"An error occurred while trying to fetch the URL: {e}" + +@app.route('/', methods=['GET', 'POST']) +def index(): + if request.method == 'POST': + rss_url = request.form['rss_url'] + is_valid, result = verify_rss_url(rss_url) + if is_valid: + return render_template('result.html', feed_info=result) # Pass feed_info to the template + else: + return render_template('index.html', error=result) + + return render_template('index.html') + +@app.route('/download/', methods=['GET']) +def download_file(filename): + return send_file(filename, as_attachment=True) + +if __name__ == '__main__': + app.run(debug=True) diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..2602df6 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,17 @@ + + + + RSS Feed Verifier + + +

RSS Feed Verifier

+
+ + + +
+ {% if error %} +

{{ error }}

+ {% endif %} + + diff --git a/templates/result.html b/templates/result.html new file mode 100644 index 0000000..51e4702 --- /dev/null +++ b/templates/result.html @@ -0,0 +1,30 @@ + + + + RSS Feed Information + + +

RSS Feed Information

+

Feed Title: {{ feed_info['title'] }}

+

Feed Link: {{ feed_info['link'] }}

+

Feed Description: {{ feed_info['description'] }}

+

Total Entries: {{ feed_info['total_entries'] }}

+ +

Entries:

+ + + Download JSON file
+ Back + +