広告のドメインの正引きを失敗させることで表示できないようにしているのだけれど、PHPで書いてたのでPythonに書き直した。これをbindでincludeして、nullゾーンに叩き落とす。
#!/usr/bin/env python3
import datetime
import re
import urllib.request as req
now = datetime.datetime.now()
URL = f"https://280blocker.net/files/280blocker_domain_{now.year}{now.month:02}.txt"
CONF_FMT = '''
zone "{0}" {{
type master;
allow-query {{ localnet; }};
file "null.zone";
allow-update {{ none; }};
}};
'''
with req.urlopen(URL) as f:
lines = f.read().decode('utf-8').splitlines()
for line in lines:
trimmed = line.strip()
if re.match('^([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*\.)+[a-zA-Z]{2,}$', trimmed):
print(CONF_FMT.format(trimmed))