mirror of
https://github.com/FutaGuard/LowTechFilter.git
synced 2025-06-21 05:21:02 +08:00
⚡️ 加速 Builder
This commit is contained in:
parent
c60bdfa574
commit
8c869e62a4
@ -2,6 +2,8 @@ import re
|
||||
from datetime import datetime, timedelta, timezone
|
||||
import requests
|
||||
from glob import glob
|
||||
import asyncio
|
||||
import time
|
||||
|
||||
filterlist = {
|
||||
"abp": [
|
||||
@ -16,9 +18,8 @@ url = "https://filter.futa.gg/"
|
||||
tz = timezone(timedelta(hours=+8))
|
||||
today = datetime.now(tz).date()
|
||||
|
||||
|
||||
# 新增 nrd 清單
|
||||
for files in glob("nrd/past-*.txt"):
|
||||
for files in glob("AutoBuild/nrd/past-*.txt"):
|
||||
filterlist["hosts"].append(files)
|
||||
|
||||
|
||||
@ -67,110 +68,115 @@ def update_version(filename: str) -> str:
|
||||
return newversion
|
||||
|
||||
|
||||
for category in filterlist:
|
||||
for filename in filterlist[category]:
|
||||
newversion = update_version(filename)
|
||||
# make hosts formats
|
||||
async def to_hosts(filename: str, data: str, newversion: str):
|
||||
data = data.splitlines()
|
||||
newdata = "\n".join(data)
|
||||
name = filename.split(".txt")[0].split("_")[0]
|
||||
heads: str = HEAD().__getattribute__("hosts")
|
||||
newhead = heads.format(name=name + " hosts", version=newversion)
|
||||
newfilename = name + "_hosts.txt" if name != "hosts" else "hosts.txt"
|
||||
with open(newfilename, "w") as output:
|
||||
if name == "hosts":
|
||||
pattern = r"(?<=^\|\|)\S+\.\S{2,}(?=\^)"
|
||||
newoutput = "\n".join(
|
||||
"0.0.0.0 " + e for e in re.findall(pattern, newdata, re.MULTILINE)
|
||||
)
|
||||
else:
|
||||
newoutput = "\n".join("0.0.0.0 " + e for e in data)
|
||||
output.write(newhead)
|
||||
output.write(newoutput)
|
||||
|
||||
with open(f"{filename}", "r") as files:
|
||||
data = files.read()
|
||||
with open(f"{filename}", "w") as output:
|
||||
heads: str = HEAD().__getattribute__(category)
|
||||
newhead = heads.format(
|
||||
name=filename.split(".")[0]
|
||||
.replace("_", " ")
|
||||
.replace("/", " ")
|
||||
.title(),
|
||||
version=newversion,
|
||||
)
|
||||
output.write(newhead + data)
|
||||
|
||||
# hide farm site from google 轉換 abp
|
||||
if filename == "nofarm.txt":
|
||||
domain_list = ""
|
||||
for domains in data.splitlines():
|
||||
if not domains.startswith("!"):
|
||||
domain = domains[2:-1]
|
||||
domain_list += 'google.*##div.g:has(div[data-hveid] a[href*="{domain}"])\n'.format(
|
||||
domain=domain
|
||||
)
|
||||
heads: str = HEAD().__getattribute__("abp")
|
||||
newhead = heads.format(
|
||||
name="hide farm content from google", version=newversion
|
||||
)
|
||||
with open("hide_farm_from_search.txt", "w") as f:
|
||||
f.write(newhead + domain_list)
|
||||
async def to_abp(filename: str, data: str, newversion: str):
|
||||
data = data.splitlines()
|
||||
newdata = "\n".join(data)
|
||||
name = filename.split(".txt")[0].split("_")[0]
|
||||
heads: str = HEAD().__getattribute__("abp")
|
||||
newhead = heads.format(name=name + " abp", version=newversion)
|
||||
|
||||
if filename == "TW165.txt":
|
||||
newfilename = "TW165-redirect.txt"
|
||||
heads: str = HEAD().__getattribute__("abp")
|
||||
newhead = heads.format(name="TW165 redirect", version=newversion)
|
||||
with open(newfilename, "w") as f:
|
||||
f.write(newhead)
|
||||
f.write(
|
||||
"".join(
|
||||
f"||{e}^$dnsrewrite=NOERROR;A;34.102.218.71\n"
|
||||
for e in data.splitlines()
|
||||
)
|
||||
with open(name + "_abp.txt", "w") as output:
|
||||
if name == "hosts":
|
||||
output.write(newhead + newdata)
|
||||
|
||||
else:
|
||||
newoutput = "\n".join(f"||{e}^" for e in data)
|
||||
output.write(newhead)
|
||||
output.write(newoutput)
|
||||
|
||||
|
||||
async def to_pure_domain(filename: str, data: str):
|
||||
data = data.splitlines()
|
||||
newdata = "\n".join(data)
|
||||
name = filename.split(".txt")[0].split("_")[0]
|
||||
with open(name + "_domains.txt", "w") as output:
|
||||
if name == "hosts":
|
||||
pattern = r"(?<=^\|\|)\S+\.\S{2,}(?=\^)"
|
||||
newoutput = "\n".join(re.findall(pattern, newdata, re.MULTILINE))
|
||||
else:
|
||||
newoutput = "\n".join(data)
|
||||
output.write(newoutput)
|
||||
|
||||
|
||||
async def run():
|
||||
import time
|
||||
# task = []
|
||||
|
||||
for category in filterlist:
|
||||
for filename in filterlist[category]:
|
||||
newversion = update_version(filename)
|
||||
|
||||
with open(f"{filename}", "r") as files:
|
||||
data = files.read()
|
||||
with open(f"{filename}", "w") as output:
|
||||
heads: str = HEAD().__getattribute__(category)
|
||||
newhead = heads.format(
|
||||
name=filename.split(".")[0]
|
||||
.replace("_", " ")
|
||||
.replace("/", " ")
|
||||
.title(),
|
||||
version=newversion,
|
||||
)
|
||||
output.write(newhead + data)
|
||||
|
||||
# hosts to domains
|
||||
def to_pure_domain(filename: str, data: str):
|
||||
data = data.splitlines()
|
||||
newdata = "\n".join(data)
|
||||
name = filename.split(".txt")[0].split("_")[0]
|
||||
with open(name + "_domains.txt", "w") as output:
|
||||
if name == "hosts":
|
||||
pattern = r"(?<=^\|\|)\S+\.\S{2,}(?=\^)"
|
||||
newoutput = "\n".join(
|
||||
re.findall(pattern, newdata, re.MULTILINE)
|
||||
# hide farm site from google 轉換 abp
|
||||
if filename == "nofarm.txt":
|
||||
domain_list = ""
|
||||
for domains in data.splitlines():
|
||||
if not domains.startswith("!"):
|
||||
domain = domains[2:-1]
|
||||
domain_list += 'google.*##div.g:has(div[data-hveid] a[href*="{domain}"])\n'.format(
|
||||
domain=domain
|
||||
)
|
||||
heads: str = HEAD().__getattribute__("abp")
|
||||
newhead = heads.format(
|
||||
name="hide farm content from google", version=newversion
|
||||
)
|
||||
with open("hide_farm_from_search.txt", "w") as f:
|
||||
f.write(newhead + domain_list)
|
||||
|
||||
if filename == "TW165.txt":
|
||||
newfilename = "TW165-redirect.txt"
|
||||
heads: str = HEAD().__getattribute__("abp")
|
||||
newhead = heads.format(name="TW165 redirect", version=newversion)
|
||||
with open(newfilename, "w") as f:
|
||||
f.write(newhead)
|
||||
f.write(
|
||||
"".join(
|
||||
f"||{e}^$dnsrewrite=NOERROR;A;34.102.218.71\n"
|
||||
for e in data.splitlines()
|
||||
)
|
||||
)
|
||||
else:
|
||||
newoutput = "\n".join(data)
|
||||
output.write(newoutput)
|
||||
|
||||
if filename in filterlist["hosts"]:
|
||||
to_pure_domain(filename, data)
|
||||
if category == "hosts":
|
||||
task = [
|
||||
asyncio.create_task(to_pure_domain(filename, data)),
|
||||
asyncio.create_task(to_abp(filename, data, newversion)),
|
||||
asyncio.create_task(to_hosts(filename, data, newversion)),
|
||||
]
|
||||
|
||||
# make hosts formats
|
||||
def to_hosts(filename: str, data: str):
|
||||
data = data.splitlines()
|
||||
newdata = "\n".join(data)
|
||||
name = filename.split(".txt")[0].split("_")[0]
|
||||
heads: str = HEAD().__getattribute__("hosts")
|
||||
newhead = heads.format(name=name + " hosts", version=newversion)
|
||||
newfilename = name + "_hosts.txt" if name != "hosts" else "hosts.txt"
|
||||
with open(newfilename, "w") as output:
|
||||
if name == "hosts":
|
||||
pattern = r"(?<=^\|\|)\S+\.\S{2,}(?=\^)"
|
||||
newoutput = "\n".join(
|
||||
"0.0.0.0 " + e
|
||||
for e in re.findall(pattern, newdata, re.MULTILINE)
|
||||
)
|
||||
else:
|
||||
newoutput = "\n".join("0.0.0.0 " + e for e in data)
|
||||
output.write(newhead)
|
||||
output.write(newoutput)
|
||||
await asyncio.gather(*task)
|
||||
|
||||
# if filename in filterlist['hosts']:
|
||||
# to_hosts(filename, data)
|
||||
|
||||
# 轉換為 abp 格式
|
||||
def to_abp(filename: str, data: str):
|
||||
data = data.splitlines()
|
||||
newdata = "\n".join(data)
|
||||
name = filename.split(".txt")[0].split("_")[0]
|
||||
heads: str = HEAD().__getattribute__("abp")
|
||||
newhead = heads.format(name=name + " abp", version=newversion)
|
||||
|
||||
with open(name + "_abp.txt", "w") as output:
|
||||
if name == "hosts":
|
||||
output.write(newhead + newdata)
|
||||
|
||||
else:
|
||||
newoutput = "\n".join(f"||{e}^" for e in data)
|
||||
output.write(newhead)
|
||||
output.write(newoutput)
|
||||
|
||||
if filename in filterlist["hosts"]:
|
||||
to_abp(filename, data)
|
||||
to_hosts(filename, data)
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(run())
|
||||
|
Loading…
x
Reference in New Issue
Block a user