from flask import Flask, redirect, url_for, request, Response import requests from bs4 import BeautifulSoup import os from urllib.parse import urlparse import xmltodict import json import dicttoxml app = Flask(__name__) def get_youtube_rss_url(channel_url): # Send a GET request to the YouTube channel page response = requests.get(channel_url) # Check if the request was successful (status code 200) if response.status_code == 200: # Parse the HTML content of the page soup = BeautifulSoup(response.text, 'html.parser') # Find the RSS feed URL in the HTML source rss_link = soup.find('link', {'type': 'application/rss+xml'}) if rss_link: return rss_link.get('href') else: print("RSS feed not found on the page.") return None else: print(f"Failed to retrieve the page. Status code: {response.status_code}") return None def prepend_title(xml): xml_dict = xmltodict.parse(xml) channel_title = xml_dict["feed"]["title"] for entry in xml_dict["feed"]["entry"]: entry["title"] = channel_title + ' - ' + entry["title"] xml_data = xmltodict.unparse(xml_dict, pretty=True) return xml_data def read_rss(rss_url): resp = requests.get(rss_url) if resp.status_code == 200: proxy_url = os.getenv('youtube-proxy', 'https://www.youtube.com') parsed_url = urlparse(proxy_url) scheme = parsed_url.scheme netloc = parsed_url.netloc replace_url = scheme + "://" + netloc + "/watch?" rss_xml = prepend_title(resp.text) return rss_xml.replace("https://www.youtube.com/watch?", replace_url) else: return None @app.route('/') def doMagic(channelName): link = 'https://www.youtube.com/@' + channelName rss_url = get_youtube_rss_url(link) rss_xml = read_rss(rss_url) return Response(rss_xml, content_type='application/xml') if __name__ == '__main__': app.run(debug = True)