rsstube/scripts/rsstube.py

105 lines
3.4 KiB
Python
Executable File

#!/usr/bin/python3
import sys,importlib
from utils import debug,notify,warn,error,success
network = True
verbosity = 3
args = {}
arg_count = 0
config = None
try:
from pathlib import Path
home = str(Path.home())
local_config_path = home + "/.config/rsstube/config"
config = open(local_config_path,"r")
except FileNotFoundError:
try:
global_config_path = "/etc/rsstube/config"
config = open(global_config_path,"r")
except FileNotFoundError:
# no change
config = None
file_params = None
if not config is None:
for line in config:
line = line.strip()
# comment lines should begin with # after stripping
if line[0] != "#":
file_params += " " + line
from options import options
def process_args (network,verbosity,args,arg_count,network_new,verbosity_new,args_new,arg_count_new):
if network_new == False:
network = network_new
if not verbosity_new is None:
verbosity = verbosity_new
for i in args_new:
args[i] = args_new[i]
arg_count = arg_count_new
return network,verbosity,args,arg_count
# config file options
if not file_params == "" and not file_params is None:
network_new,verbosity_new,args_new,arg_count_new = options(file_params.split())
network,verbosity,args,arg_count = process_args(network,verbosity,args,arg_count,network_new,verbosity_new,args_new,arg_count_new)
# command-line options
network_new,verbosity_new,args_new,arg_count_new = options(sys.argv[1:])
network,verbosity,args,arg_count = process_args(network,verbosity,args,arg_count,network_new,verbosity_new,args_new,arg_count_new)
#if not verbosity_temp is None:
# verbosity = verbosity_temp
if len(sys.argv) == arg_count+1:
error ("Please provide one or more URL.", verbosity)
for url in sys.argv[arg_count+1:]:
from determine_site import determine_site
debug ("Attempting to determine site...", verbosity)
site = determine_site (url)
if not site is None:
debug ("Site identified as " + site, verbosity)
notify ("Trying " + site + " extractor...", verbosity)
# get appropriate extractor
extractor = importlib.import_module("extractors." + site)
feed = extractor.extract(url, None, network, verbosity, args)
if feed is None:
error ("Unable to get RSS feed for " + url, verbosity, site)
else:
success (feed)
elif network:
from download_page import download
page = download (None, url, args, verbosity)
if page is None:
error ("Failed to download " + url, verbosity)
continue
# try to get feed for common software like PeerTube
debug ("Attempting to determine software from page...", verbosity)
from determine_software import determine_software
software = determine_software (page)
if not software is None:
debug ("Software identified as " + software, verbosity)
notify ("Trying " + software + " extractor...", verbosity)
extractor = importlib.import_module("extractors." + software)
feed = extractor.extract(url, page, network, verbosity, args)
if feed is None:
notify ("Unable to get RSS feed for " + url + " with " + software + " extractor", verbosity, software)
else:
success (feed)
continue
# try generic extractor even if software is known
debug ("Trying generic extractor...", verbosity)
extractor = importlib.import_module("extractors.generic")
feed = extractor.extract(url, page, network, verbosity, args)
if feed is None:
error ("Unable to get RSS feed for " + url, verbosity, "generic")
else:
success (feed)
else:
error ("Unable to get RSS feed for " + url + " without downloading page", verbosity)