diff --git a/epg-grabber/getEpgs.py b/epg-grabber/getEpgs.py index 24bf2f2..72b4793 100644 --- a/epg-grabber/getEpgs.py +++ b/epg-grabber/getEpgs.py @@ -1,76 +1,75 @@ -import os -import gzip -import xml.etree.ElementTree as ET -import requests - -save_as_gz = True # Set to True to save an additional .gz version - -tvg_ids_file = os.path.join(os.path.dirname(__file__), 'tvg-ids.txt') -output_file = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'epg.xml') -output_file_gz = output_file + '.gz' - -def fetch_and_extract_xml(url): - response = requests.get(url) - if response.status_code != 200: - print(f"Failed to fetch {url}") - return None - - if url.endswith('.gz'): - try: - decompressed_data = gzip.decompress(response.content) - return ET.fromstring(decompressed_data) - except Exception as e: - print(f"Failed to decompress and parse XML from {url}: {e}") - return None - else: - try: - return ET.fromstring(response.content) - except Exception as e: - print(f"Failed to parse XML from {url}: {e}") - return None - -def filter_and_build_epg(urls): - with open(tvg_ids_file, 'r') as file: - valid_tvg_ids = set(line.strip() for line in file) - - root = ET.Element('tv') - - for url in urls: - epg_data = fetch_and_extract_xml(url) - if epg_data is None: - continue - - for channel in epg_data.findall('channel'): - tvg_id = channel.get('id') - if tvg_id in valid_tvg_ids: - root.append(channel) - - for programme in epg_data.findall('programme'): - tvg_id = programme.get('channel') - if tvg_id in valid_tvg_ids: - root.append(programme) - - tree = ET.ElementTree(root) - tree.write(output_file, encoding='utf-8', xml_declaration=True) - print(f"New EPG saved to {output_file}") - - if save_as_gz: - with gzip.open(output_file_gz, 'wb') as f: - tree.write(f, encoding='utf-8', xml_declaration=True) - print(f"New EPG saved to {output_file_gz}") - -def copy_to_server(): - os.system('scp -o StrictHostKeyChecking=no '+output_file_gz+' brock@192.168.1.10:/var/www/iptv.caldwell.local/epg.xml.gz') - os.system('ssh -o StrictHostKeyChecking=no brock@192.168.1.10 -t ') - -urls = [ - 'https://www.dropbox.com/scl/fi/i7kgakvjubjwiscuab467/m3u4u-103216-595281-EPG.xml?rlkey=ykvw6gyhx93erycl19sa6xft5&st=tlrrz59n&dl=1', - 'https://epgshare01.online/epgshare01/epg_ripper_US1.xml.gz', - 'https://epgshare01.online/epgshare01/epg_ripper_US_LOCALS2.xml.gz', - 'https://epgshare01.online/epgshare01/epg_ripper_CA1.xml.gz', - 'https://epgshare01.online/epgshare01/epg_ripper_PLEX1.xml.gz', -] - -if __name__ == "__main__": - filter_and_build_epg(urls) - copy_to_server() +import os +import gzip +import xml.etree.ElementTree as ET +import requests + +save_as_gz = True # Set to True to save an additional .gz version + +tvg_ids_file = os.path.join(os.path.dirname(__file__), 'tvg-ids.txt') +output_file = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'epg.xml') +output_file_gz = output_file + '.gz' + +def fetch_and_extract_xml(url): + response = requests.get(url) + if response.status_code != 200: + print(f"Failed to fetch {url}") + return None + + if url.endswith('.gz'): + try: + decompressed_data = gzip.decompress(response.content) + return ET.fromstring(decompressed_data) + except Exception as e: + print(f"Failed to decompress and parse XML from {url}: {e}") + return None + else: + try: + return ET.fromstring(response.content) + except Exception as e: + print(f"Failed to parse XML from {url}: {e}") + return None + +def filter_and_build_epg(urls): + with open(tvg_ids_file, 'r') as file: + valid_tvg_ids = set(line.strip() for line in file) + + root = ET.Element('tv') + + for url in urls: + epg_data = fetch_and_extract_xml(url) + if epg_data is None: + continue + + for channel in epg_data.findall('channel'): + tvg_id = channel.get('id') + if tvg_id in valid_tvg_ids: + root.append(channel) + + for programme in epg_data.findall('programme'): + tvg_id = programme.get('channel') + if tvg_id in valid_tvg_ids: + root.append(programme) + + tree = ET.ElementTree(root) + tree.write(output_file, encoding='utf-8', xml_declaration=True) + print(f"New EPG saved to {output_file}") + + if save_as_gz: + with gzip.open(output_file_gz, 'wb') as f: + tree.write(f, encoding='utf-8', xml_declaration=True) + print(f"New EPG saved to {output_file_gz}") + +def copy_to_server(): + os.system('scp -o StrictHostKeyChecking=no '+output_file_gz+' brock@192.168.1.10:/var/www/iptv.caldwell.local/epg.xml.gz') + os.system('ssh -o StrictHostKeyChecking=no brock@192.168.1.10 -t ') + +urls = [ + 'https://www.dropbox.com/scl/fi/i7kgakvjubjwiscuab467/m3u4u-103216-595281-EPG.xml?rlkey=ykvw6gyhx93erycl19sa6xft5&st=tlrrz59n&dl=1', + 'https://epgshare01.online/epgshare01/epg_ripper_US1.xml.gz', + 'https://epgshare01.online/epgshare01/epg_ripper_US_LOCALS2.xml.gz', + 'https://epgshare01.online/epgshare01/epg_ripper_CA1.xml.gz', + 'https://epgshare01.online/epgshare01/epg_ripper_PLEX1.xml.gz', +] + +if __name__ == "__main__": + filter_and_build_epg(urls)