From 98fadb3a90f22206541b1a733e195149d07608a1 Mon Sep 17 00:00:00 2001 From: tdc Date: Tue, 3 Feb 2026 09:37:01 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=A4=A1=20165?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AutoBuild/builder.py | 49 ++++++++++++++++++++++++++++++++++++------ AutoBuild/whitelist.py | 5 +++++ 2 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 AutoBuild/whitelist.py diff --git a/AutoBuild/builder.py b/AutoBuild/builder.py index b3436b6..9f4b6af 100644 --- a/AutoBuild/builder.py +++ b/AutoBuild/builder.py @@ -22,6 +22,12 @@ url = "https://filter.futa.gg/" tz = timezone(timedelta(hours=+8)) today = datetime.now(tz).date() +WHITELIST = [ + "google.com", + "line.me", + "apple.com", +] + # 新增 nrd 清單 for files in glob("nrd/past-*.txt"): filterlist["hosts"].append(files) @@ -116,7 +122,12 @@ async def to_hosts(filename: str, data: str, newversion: str): domains = [] for line in data: parsed = parse_url(line) - if not parsed['has_path'] and not parsed['is_ip']: + domain = parsed['domain'] + if ( + not parsed['has_path'] + and not parsed['is_ip'] + and not is_whitelisted_domain(domain) + ): domains.append(parsed['domain']) newoutput = "\n".join("0.0.0.0 " + d for d in sorted(set(domains))) else: @@ -140,8 +151,12 @@ async def to_abp(filename: str, data: str, newversion: str): rules = [] for line in data: parsed = parse_url(line) - if not parsed['is_ip']: - rules.append(f"||{parsed['full']}^") + if parsed['is_ip']: + continue + domain = parsed['domain'] + if is_whitelisted_domain(domain): + continue + rules.append(f"||{parsed['full']}^") newoutput = "\n".join(sorted(set(rules))) output.write(newhead) output.write(newoutput) @@ -185,6 +200,17 @@ def parse_url(url: str) -> dict: } +def is_whitelisted_domain(domain: str) -> bool: + if not domain: + return False + domain = domain.lower() + for item in WHITELIST: + entry = item.lower() + if domain == entry or domain.endswith('.' + entry): + return True + return False + + async def to_pure_domain(filename: str, data: str): data = data.splitlines() newdata = "\n".join(data) @@ -201,7 +227,13 @@ async def to_pure_domain(filename: str, data: str): if not line: continue parsed = parse_url(line) - if not parsed['has_path'] and not parsed['is_ip'] and parsed['is_valid']: + domain = parsed['domain'] + if ( + not parsed['has_path'] + and not parsed['is_ip'] + and parsed['is_valid'] + and not is_whitelisted_domain(domain) + ): domains.append(parsed['domain']) newoutput = "\n".join(sorted(set(domains))) else: @@ -257,8 +289,13 @@ async def run(): domains = [] for line in data.splitlines(): parsed = parse_url(line) - if not parsed['has_path'] and not parsed['is_ip']: - domains.append(parsed['domain']) + domain = parsed['domain'] + if ( + not parsed['has_path'] + and not parsed['is_ip'] + and not is_whitelisted_domain(domain) + ): + domains.append(domain) f.write( "\n".join( f"||{d}^$dnsrewrite=NOERROR;A;34.102.218.71" diff --git a/AutoBuild/whitelist.py b/AutoBuild/whitelist.py new file mode 100644 index 0000000..d7a6da1 --- /dev/null +++ b/AutoBuild/whitelist.py @@ -0,0 +1,5 @@ +WHITELIST = [ + "google.com", + "line.me", + "apple.com", +]