重构代码

This commit is contained in:
gently 2020-02-10 17:33:13 +08:00
parent bb73343c40
commit 6408403d96
11 changed files with 1732 additions and 260 deletions

View File

@ -1,5 +1,6 @@
#VER=20200208042322
#VER=20200210091359
#URL=https://github.com/privacy-protection-tools/anti-AD
#TOTAL COUNT=31344
address=/0024aaaa.com/
address=/0026645142c89aeb1.com/
address=/003store.com/
@ -1474,9 +1475,18 @@ address=/snbnhngl.ifeng.com/
address=/stadig.ifeng.com/
address=/ztyumn.ifeng.com/
address=/api.iapps.ifeng.com/
address=/api.newad.ifeng.com/
address=/dmpclick.deliver.ifeng.com/
address=/dol.deliver.ifeng.com/
address=/dolphin.deliver.ifeng.com/
address=/err.ifengcloud.ifeng.com/
address=/exp.3g.ifeng.com/
address=/ids.deliver.ifeng.com/
address=/ids1.deliver.ifeng.com/
address=/ifengad.3g.ifeng.com/
address=/iis1.deliver.ifeng.com/
address=/iis3g.deliver.ifeng.com/
address=/mfp.deliver.ifeng.com/
address=/stadig0.ifeng.com/
address=/aa24h.com/
address=/aa53df329975c325.com/
@ -4352,14 +4362,28 @@ address=/mlog.aipai.com/
address=/apas.aipai.com/
address=/atlas.astrology.com/
address=/cmstool.youku.com/
address=/adp.atm.youku.com/
address=/bsv.atm.youku.com/
address=/count.atm.youku.com/
address=/dmapp.youku.com/
address=/html.atm.youku.com/
address=/ipm.atm.youku.com/
address=/iyes.youku.com/
address=/m.atm.youku.com/
address=/mf.atm.youku.com/
address=/mobilemsg.youku.com/
address=/myes.youku.com/
address=/push.m.youku.com/
address=/r.l.youku.com/
address=/service.danmu.youku.com/
address=/statis.mobile.youku.com/
address=/v2html.atm.youku.com/
address=/val.atm.youku.com/
address=/valb.atm.youku.com/
address=/valc.atm.youku.com/
address=/valf.atm.youku.com/
address=/valp.atm.youku.com/
address=/valt.atm.youku.com/
address=/ad.api.3g.tudou.com/
address=/ad.api.mobile.youku.com/
address=/atmalinks.com/
@ -7487,6 +7511,7 @@ address=/cpl1.ru/
address=/cpm.amateurcommunity.com/
address=/cpm.amateurcommunity.de/
address=/cpm.biz/
address=/cm.kankan.com/
address=/biz5.kankan.com/
address=/stat.kankan.com/
address=/kkpgv.kankan.com/
@ -8150,14 +8175,27 @@ address=/da-ads.com/
address=/as.mgtv.com/
address=/audit.aaa.mgtv.com/
address=/cmop.mgtv.com/
address=/imgaliyun.da.mgtv.com/
address=/imgaliyun.res.mgtv.com/
address=/m2.da.mgtv.com/
address=/mobaliyun.res.mgtv.com/
address=/mobile.da.mgtv.com/
address=/mobile2.da.mgtv.com/
address=/pc.da.mgtv.com/
address=/pc1.da.mgtv.com/
address=/pcvideoaliyun.titan.mgtv.com/
address=/pcvideoyd.titan.mgtv.com/
address=/pcweb-v1.log.mgtv.com/
address=/pcweb.v1.mgtv.com/
address=/py.da.mgtv.com/
address=/v1-play.log.mgtv.com/
address=/v2.da.mgtv.com/
address=/v2.log.mgtv.com/
address=/web.da.mgtv.com/
address=/web2.da.mgtv.com/
address=/x.da.mgtv.com/
address=/y.da.mgtv.com/
address=/ys.da.mgtv.com/
address=/da.netease.com/
address=/analytics.hz.netease.com/
address=/statis.push.netease.com/
@ -15968,8 +16006,6 @@ address=/mindlytix.com/
address=/mindopu.com/
address=/mindrook.com/
address=/mindtake.com/
address=/mine.nahnoji.cz/
address=/js.nahnoji.cz/
address=/torrent.pw/
address=/minemytraffic.com/
address=/minerad.com/
@ -27853,7 +27889,6 @@ address=/valf.atm.cp31.ott.cibntv.net/
address=/adinf.voole.com/
address=/apkinfo.voole.com/
address=/adinfo.ra1.xlmc.sec.miui.com/
address=/adv.sec.miui.com/
address=/api.ra2.xlmc.sec.miui.com/
address=/api.sec.miui.com/
address=/api.tw06.xlmc.sec.miui.com/
@ -31004,7 +31039,6 @@ address=/crosspromo.voodoo.io/
address=/adtilt.com/
address=/activity.m.duiba.com.cn/
address=/activity.tuiapple.com/
address=/ad.api.3g.tudou.com/
address=/api.tatagou.com.cn/
address=/app.shandjj.com/
address=/tj.koudaitong.com/

View File

@ -1,5 +1,6 @@
#VER=20200208042322
#VER=20200210091359
#URL=https://github.com/privacy-protection-tools/anti-AD
#TOTAL COUNT=35855
0024aaaa.com
0026645142c89aeb1.com
003store.com
@ -9046,6 +9047,7 @@ count.cpm.cm.kankan.com
distf.stat.kankan.com
kkpgv.kankan.com
kkpgv2.kankan.com
cm.kankan.com
float.kankan.com
stat.kankan.com
cpm10.com
@ -18663,8 +18665,6 @@ mindlytix.com
mindopu.com
mindrook.com
mindtake.com
mine.nahnoji.cz
js.nahnoji.cz
mine.torrent.pw
torrent.pw
minemytraffic.com

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,6 @@
#VER=20200208042322
#VER=20200210091359
#URL=https://github.com/privacy-protection-tools/anti-AD
#TOTAL COUNT=31344
DOMAIN-SUFFIX,0024aaaa.com
DOMAIN-SUFFIX,0026645142c89aeb1.com
DOMAIN-SUFFIX,003store.com
@ -1474,9 +1475,18 @@ DOMAIN-SUFFIX,snbnhngl.ifeng.com
DOMAIN-SUFFIX,stadig.ifeng.com
DOMAIN-SUFFIX,ztyumn.ifeng.com
DOMAIN-SUFFIX,api.iapps.ifeng.com
DOMAIN-SUFFIX,api.newad.ifeng.com
DOMAIN-SUFFIX,dmpclick.deliver.ifeng.com
DOMAIN-SUFFIX,dol.deliver.ifeng.com
DOMAIN-SUFFIX,dolphin.deliver.ifeng.com
DOMAIN-SUFFIX,err.ifengcloud.ifeng.com
DOMAIN-SUFFIX,exp.3g.ifeng.com
DOMAIN-SUFFIX,ids.deliver.ifeng.com
DOMAIN-SUFFIX,ids1.deliver.ifeng.com
DOMAIN-SUFFIX,ifengad.3g.ifeng.com
DOMAIN-SUFFIX,iis1.deliver.ifeng.com
DOMAIN-SUFFIX,iis3g.deliver.ifeng.com
DOMAIN-SUFFIX,mfp.deliver.ifeng.com
DOMAIN-SUFFIX,stadig0.ifeng.com
DOMAIN-SUFFIX,aa24h.com
DOMAIN-SUFFIX,aa53df329975c325.com
@ -4352,14 +4362,28 @@ DOMAIN-SUFFIX,mlog.aipai.com
DOMAIN-SUFFIX,apas.aipai.com
DOMAIN-SUFFIX,atlas.astrology.com
DOMAIN-SUFFIX,cmstool.youku.com
DOMAIN-SUFFIX,adp.atm.youku.com
DOMAIN-SUFFIX,bsv.atm.youku.com
DOMAIN-SUFFIX,count.atm.youku.com
DOMAIN-SUFFIX,dmapp.youku.com
DOMAIN-SUFFIX,html.atm.youku.com
DOMAIN-SUFFIX,ipm.atm.youku.com
DOMAIN-SUFFIX,iyes.youku.com
DOMAIN-SUFFIX,m.atm.youku.com
DOMAIN-SUFFIX,mf.atm.youku.com
DOMAIN-SUFFIX,mobilemsg.youku.com
DOMAIN-SUFFIX,myes.youku.com
DOMAIN-SUFFIX,push.m.youku.com
DOMAIN-SUFFIX,r.l.youku.com
DOMAIN-SUFFIX,service.danmu.youku.com
DOMAIN-SUFFIX,statis.mobile.youku.com
DOMAIN-SUFFIX,v2html.atm.youku.com
DOMAIN-SUFFIX,val.atm.youku.com
DOMAIN-SUFFIX,valb.atm.youku.com
DOMAIN-SUFFIX,valc.atm.youku.com
DOMAIN-SUFFIX,valf.atm.youku.com
DOMAIN-SUFFIX,valp.atm.youku.com
DOMAIN-SUFFIX,valt.atm.youku.com
DOMAIN-SUFFIX,ad.api.3g.tudou.com
DOMAIN-SUFFIX,ad.api.mobile.youku.com
DOMAIN-SUFFIX,atmalinks.com
@ -7487,6 +7511,7 @@ DOMAIN-SUFFIX,cpl1.ru
DOMAIN-SUFFIX,cpm.amateurcommunity.com
DOMAIN-SUFFIX,cpm.amateurcommunity.de
DOMAIN-SUFFIX,cpm.biz
DOMAIN-SUFFIX,cm.kankan.com
DOMAIN-SUFFIX,biz5.kankan.com
DOMAIN-SUFFIX,stat.kankan.com
DOMAIN-SUFFIX,kkpgv.kankan.com
@ -8150,14 +8175,27 @@ DOMAIN-SUFFIX,da-ads.com
DOMAIN-SUFFIX,as.mgtv.com
DOMAIN-SUFFIX,audit.aaa.mgtv.com
DOMAIN-SUFFIX,cmop.mgtv.com
DOMAIN-SUFFIX,imgaliyun.da.mgtv.com
DOMAIN-SUFFIX,imgaliyun.res.mgtv.com
DOMAIN-SUFFIX,m2.da.mgtv.com
DOMAIN-SUFFIX,mobaliyun.res.mgtv.com
DOMAIN-SUFFIX,mobile.da.mgtv.com
DOMAIN-SUFFIX,mobile2.da.mgtv.com
DOMAIN-SUFFIX,pc.da.mgtv.com
DOMAIN-SUFFIX,pc1.da.mgtv.com
DOMAIN-SUFFIX,pcvideoaliyun.titan.mgtv.com
DOMAIN-SUFFIX,pcvideoyd.titan.mgtv.com
DOMAIN-SUFFIX,pcweb-v1.log.mgtv.com
DOMAIN-SUFFIX,pcweb.v1.mgtv.com
DOMAIN-SUFFIX,py.da.mgtv.com
DOMAIN-SUFFIX,v1-play.log.mgtv.com
DOMAIN-SUFFIX,v2.da.mgtv.com
DOMAIN-SUFFIX,v2.log.mgtv.com
DOMAIN-SUFFIX,web.da.mgtv.com
DOMAIN-SUFFIX,web2.da.mgtv.com
DOMAIN-SUFFIX,x.da.mgtv.com
DOMAIN-SUFFIX,y.da.mgtv.com
DOMAIN-SUFFIX,ys.da.mgtv.com
DOMAIN-SUFFIX,da.netease.com
DOMAIN-SUFFIX,analytics.hz.netease.com
DOMAIN-SUFFIX,statis.push.netease.com
@ -15968,8 +16006,6 @@ DOMAIN-SUFFIX,mindlytix.com
DOMAIN-SUFFIX,mindopu.com
DOMAIN-SUFFIX,mindrook.com
DOMAIN-SUFFIX,mindtake.com
DOMAIN-SUFFIX,mine.nahnoji.cz
DOMAIN-SUFFIX,js.nahnoji.cz
DOMAIN-SUFFIX,torrent.pw
DOMAIN-SUFFIX,minemytraffic.com
DOMAIN-SUFFIX,minerad.com
@ -27853,7 +27889,6 @@ DOMAIN-SUFFIX,valf.atm.cp31.ott.cibntv.net
DOMAIN-SUFFIX,adinf.voole.com
DOMAIN-SUFFIX,apkinfo.voole.com
DOMAIN-SUFFIX,adinfo.ra1.xlmc.sec.miui.com
DOMAIN-SUFFIX,adv.sec.miui.com
DOMAIN-SUFFIX,api.ra2.xlmc.sec.miui.com
DOMAIN-SUFFIX,api.sec.miui.com
DOMAIN-SUFFIX,api.tw06.xlmc.sec.miui.com
@ -31004,7 +31039,6 @@ DOMAIN-SUFFIX,crosspromo.voodoo.io
DOMAIN-SUFFIX,adtilt.com
DOMAIN-SUFFIX,activity.m.duiba.com.cn
DOMAIN-SUFFIX,activity.tuiapple.com
DOMAIN-SUFFIX,ad.api.3g.tudou.com
DOMAIN-SUFFIX,api.tatagou.com.cn
DOMAIN-SUFFIX,app.shandjj.com
DOMAIN-SUFFIX,tj.koudaitong.com

View File

@ -70,9 +70,10 @@ class addressMaker{
*
* @param String $str_easylist 原始的easylist列表字符串
* @param Boolean $strict_mode 严格模式启用时将屏蔽该域所在的主域名例如www.baidu.com将获取到baidu.com并写入最终列表
* @param Array $arr_whitelist 白名单列表
* @return array
*/
public static function get_domain_from_easylist($str_easylist, $strict_mode = false){
public static function get_domain_from_easylist($str_easylist, $strict_mode = false, $arr_whitelist = array()){
$strlen = strlen($str_easylist);
if($strlen < 10){
return array();
@ -102,7 +103,7 @@ class addressMaker{
$row = $matches[1];
}
$main_domain = self::extract_main_domain($matches[1]);
if($strict_mode && !array_key_exists($main_domain, $GLOBALS['arr_whitelist'])){
if($strict_mode && (!array_key_exists($main_domain, $arr_whitelist) || ($arr_whitelist[$main_domain] === 1))){
$arr_domains[$main_domain] = array($main_domain);
}else{
$arr_domains[$main_domain][] = $row;
@ -118,9 +119,10 @@ class addressMaker{
*
* @param String $str_hosts 原始的hosts字符串
* @param Boolean $strict_mode 严格模式启用时将屏蔽该域所在的主域名例如www.baidu.com将获取到baidu.com并写入最终列表
* @param Array $arr_whitelist 白名单
* @return array
*/
public static function get_domain_list($str_hosts, $strict_mode = false){
public static function get_domain_list($str_hosts, $strict_mode = false, $arr_whitelist = array()){
$strlen = strlen($str_hosts);
if($strlen < 3){
return array();
@ -150,7 +152,7 @@ class addressMaker{
continue;
}
$main_domain = self::extract_main_domain($row[1]);
if($strict_mode && !array_key_exists($main_domain, $GLOBALS['arr_whitelist'])){
if($strict_mode && (!array_key_exists($main_domain, $arr_whitelist) || ($arr_whitelist[$main_domain] === 1))){
$arr_domains[$main_domain] = array($main_domain);
}else{
$arr_domains[$main_domain][] = $row[1];
@ -160,92 +162,115 @@ class addressMaker{
return $arr_domains;
}
private static function write_conf_header($fp, $header){
private static function write_conf_header($fp, $header, $arr_params = array()){
$header = str_replace('{DATE}', date('YmdHis'), $header);
$header = str_replace('{URL}', self::LINK_URL, $header);
foreach($arr_params as $keyword => $val){
$header = str_replace('{' . $keyword . '}', $val, $header);
}
return fwrite($fp, $header);
}
public static function write_to_conf($arr_result, $formatObj){
/**
* 写入结果到最终文件
*
* @param array $arr_src
* @param $arr_format
* @param array $arr_whitelist
* @return false|int
*/
public static function write_to_file(array $arr_src, array $arr_format, $arr_whitelist = array()){
$fp = fopen(ROOT_DIR . $formatObj['filename'], 'w');
$write_len = self::write_conf_header($fp, $formatObj['header']);
if(count($arr_src) < 1){
return false;
}
foreach($arr_result as $rk => $rv){
$str_result = '';
$line_count = 0;
$arr_written = [];
foreach($arr_src as $main_domain => $arr_subdomains){
if(array_key_exists($main_domain, $arr_whitelist) && ($arr_whitelist[$main_domain] > 0)){
continue;
}
if(empty($main_domain)){//不匹配记录(一般是不合法域名或者未收录的后缀)
continue;
}
$arr_subdomains = array_unique($arr_subdomains);
if(
array_key_exists($rk, $GLOBALS['arr_whitelist'])
&& ($GLOBALS['arr_whitelist'][$rk] > 0)
){//主域名在白名单的并且标识为1的整个不写入屏蔽列表,
continue;
}
if(empty($rk)){//遗漏的域名,不会写入到最终的配置里
// print_r($rv);
continue;
}
$rv = array_unique($rv);
if((in_array('.' . $rk, $rv) || in_array('www.' . $rk, $rv) || in_array($rk, $rv))
&& !array_key_exists($rk, $GLOBALS['arr_whitelist'])
&& (1 !== $formatObj['full_domain'])
(1 !== $arr_format['full_domain'])
&& (in_array($main_domain, $arr_subdomains) || in_array('www.' . $main_domain, $arr_subdomains))
&& (!array_key_exists($main_domain, $arr_whitelist) || $arr_whitelist[$main_domain] > 0)
){
$write_len += fwrite($fp, str_replace('{DOMAIN}', $rk, $formatObj['format']) . "\n");
$str_result .= str_replace('{DOMAIN}', $main_domain, $arr_format['format']) . "\n";
$line_count ++;
continue;
}
$arr_written = [];
foreach($rv as $rvv){
if(array_key_exists($rvv, $GLOBALS['arr_whitelist'])){
foreach($arr_subdomains as $subdomain){
if(array_key_exists($subdomain, $arr_whitelist)){
continue;
}
if(1 === $arr_format['full_domain']){
$str_result .= str_replace('{DOMAIN}', $subdomain, $arr_format['format']) . "\n";
$line_count ++;
$arr_written[] = $subdomain;
continue;
}
//合并三级域名逻辑
$tmp_arr1 = explode('.', $rvv);
$written_flag = false;
$tmp_arr1_len = count($tmp_arr1);
$arr_tmp_domain = explode('.', $subdomain);
$tmp_domain_len = count($arr_tmp_domain);
if($tmp_domain_len < 3){
$str_result .= str_replace('{DOMAIN}', $subdomain, $arr_format['format']) . "\n";
$line_count ++;
$arr_written[] = $subdomain;
continue;
}
if($tmp_arr1_len > 2){
for($tmp_pos = 3; $tmp_pos <= $tmp_arr1_len; $tmp_pos++){
$tmp_arr2 = array_slice($tmp_arr1, -1 * $tmp_pos);
$tmp_domain = implode('.', $tmp_arr2);
if(array_key_exists($tmp_domain, $GLOBALS['arr_whitelist'])
&& (1 === $GLOBALS['arr_whitelist'][$tmp_domain])){
$written_flag = true;
break;
$matched_flag = false;
for($pos = 3; $pos <= $tmp_domain_len; $pos ++){
$arr_tmp = array_slice($arr_tmp_domain, -1 * $pos);
$tmp = implode('.', $arr_tmp);
if(array_key_exists($tmp, $arr_whitelist)){
if($arr_whitelist[$tmp] === 1){
$matched_flag = true;
}else{
$matched_flag = false;
$arr_written[] = $tmp;
}
if((1 !== $formatObj['full_domain']) && in_array($tmp_domain, $rv)){
if(!in_array($tmp_domain, $arr_written)){
if(array_key_exists($tmp_domain, $GLOBALS['arr_whitelist'])){
continue;
}
$arr_written[] = $tmp_domain;
$write_len += fwrite(
$fp,
str_replace('{DOMAIN}',
$tmp_domain,
$formatObj['format']
) . "\n"
);
}
$written_flag = true;
break;
break;
}elseif(($tmp === $subdomain) || in_array($tmp, $arr_subdomains)){
if(!in_array($tmp, $arr_written)){
$str_result .= str_replace('{DOMAIN}', $tmp, $arr_format['format']) . "\n";
$line_count ++;
$arr_written[] = $tmp;
}
$matched_flag = true;
break;
}
}
if(in_array($rvv, $arr_written) || $written_flag){
if($matched_flag){
continue;
}
$arr_written[] = $rvv;
$write_len += fwrite($fp, str_replace('{DOMAIN}', $rvv, $formatObj['format']) . "\n");
if(!in_array($subdomain, $arr_written)){
$str_result .= str_replace('{DOMAIN}', $subdomain, $arr_format['format']) . "\n";
$line_count ++;
$arr_written[] = $subdomain;
}
}
}
unset($arr_written);
fclose($fp);
$fp = fopen(ROOT_DIR . $arr_format['filename'], 'w');
$write_len = self::write_conf_header($fp, $arr_format['header'], array('COUNT' => $line_count));
$write_len += fwrite($fp, $str_result);
return $write_len;
}
}

View File

@ -2,6 +2,7 @@
//white_domain_list
//白名单机制...,白名单是
//@date 2018年12月23日
//value=0,代表仅加白单条域名
//value=1,代表其下级域名全部加白例如3级域名则其4级子域名全部加白
//value=2,代表仅加白主域名及其子域名,即如果是主域名,加白全部,如果是子域名,加白命中的单条

View File

@ -11,12 +11,15 @@ class writerFormat{
/*dnsmasq支持格式的屏蔽广告列表*/
const DNSMASQ = array(
'format' => 'address=/{DOMAIN}/',
'header' => "#VER={DATE}\n#URL={URL}\n",
'header' => "#VER={DATE}\n#URL={URL}\n#TOTAL COUNT={COUNT}\n",
'full_domain' => 0,
'name' => 'dnsmasq',
'filename' => 'adblock-for-dnsmasq.conf',
'require_black_list' => true,
'require_white_list' => true,
'whitelist_attached' => array(
'base-dead-hosts.txt' =>array(
'merge_mode' => 2, //0=单条1=单条+子域名2=根域名相当于1非根域名相当于0
),
),
'src' => array(
'base-src-easylist.txt' => array(
'type' => 'easylist',
@ -36,28 +39,85 @@ class writerFormat{
/*easylist 兼容格式的屏蔽广告列表*/
const EASYLIST = array(
'format' => '||{DOMAIN}^',
'header' => "!AdBlock-style blocklists\n!VER={DATE}\n!URL={URL}\n",
'header' => "!AdBlock-style blocklists\n!VER={DATE}\n!URL={URL}\n!TOTAL COUNT=UNLIMITED\n",
'full_domain' => 0,
'name' => 'easylist',
'filename' => 'anti-ad-easylist.txt'
'filename' => 'anti-ad-easylist.txt',
'whitelist_attached' => array(
'base-dead-hosts.txt' =>array(
'merge_mode' => 2, //0=单条1=单条+子域名2=根域名相当于1非根域名相当于0
),
),
'src' => array(
'base-src-easylist.txt' => array(
'type' => 'easylist',
'strict_mode' => false,
),
'base-src-hosts.txt' => array(
'type' => 'hosts',
'strict_mode' => false,
),
'base-src-strict-hosts.txt' => array(
'type' => 'hosts',
'strict_mode' => true,
),
),
);
/*Surge 兼容格式的屏蔽广告列表*/
const SURGE = array(
'format' => 'DOMAIN-SUFFIX,{DOMAIN}',
'header' => "#VER={DATE}\n#URL={URL}\n",
'header' => "#VER={DATE}\n#URL={URL}\n#TOTAL COUNT={COUNT}\n",
'full_domain' => 0,
'name' => 'surge',
'filename' => 'anti-ad-surge.txt'
'filename' => 'anti-ad-surge.txt',
'whitelist_attached' => array(
'base-dead-hosts.txt' =>array(
'merge_mode' => 2, //0=单条1=单条+子域名2=根域名相当于1非根域名相当于0
),
),
'src' => array(
'base-src-easylist.txt' => array(
'type' => 'easylist',
'strict_mode' => false,
),
'base-src-hosts.txt' => array(
'type' => 'hosts',
'strict_mode' => false,
),
'base-src-strict-hosts.txt' => array(
'type' => 'hosts',
'strict_mode' => true,
),
),
);
/*Domains 格式的屏蔽广告列表用于支持pi-hole等*/
const DOMAINS = array(
'format' => '{DOMAIN}',
'header' => "#VER={DATE}\n#URL={URL}\n",
'header' => "#VER={DATE}\n#URL={URL}\n#TOTAL COUNT={COUNT}\n",
'full_domain' => 1, //保留子域名,即使其上级域名
'name' => 'domains',
'filename' => 'anti-ad-domains.txt'
'filename' => 'anti-ad-domains.txt',
'whitelist_attached' => array(
'base-dead-hosts.txt' =>array(
'merge_mode' => 2, //0=单条1=单条+子域名2=根域名相当于1非根域名相当于0
),
),
'src' => array(
'base-src-easylist.txt' => array(
'type' => 'easylist',
'strict_mode' => false,
),
'base-src-hosts.txt' => array(
'type' => 'hosts',
'strict_mode' => false,
),
'base-src-strict-hosts.txt' => array(
'type' => 'hosts',
'strict_mode' => true,
),
),
);
/*and etc...*/

View File

@ -10,44 +10,62 @@
*/
define('ROOT_DIR', __DIR__ . '/');
define('ORIG_DIR', ROOT_DIR . 'origin-files/');
set_time_limit(600);
error_reporting(0);
if(PHP_SAPI != 'cli'){
die('nothing.');
die('nothing.');
}
$arr_blacklist = require ROOT_DIR . 'lib/black_domain_list.php';
$arr_whitelist = require ROOT_DIR . 'lib/white_domain_list.php';
$ARR_BLACKLIST = require ROOT_DIR . 'lib/black_domain_list.php';
$ARR_WHITELIST = require ROOT_DIR . 'lib/white_domain_list.php';
require ROOT_DIR . 'lib/writerFormat.class.php';
require ROOT_DIR . 'lib/addressMaker.class.php';
//白名单机制增强加入dead hosts
$arr_dead_hosts = file(ROOT_DIR . 'origin-files/base-src-dead-hosts.txt', FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
$arr_dead_hosts=array_fill_keys($arr_dead_hosts, 1); //这里设置为1表示命中的子域名同时加白
$arr_whitelist = array_merge($arr_dead_hosts, $arr_whitelist);
$arr_result = array();
$easylist = file_get_contents('./origin-files/base-src-easylist.txt');
$arr_result = array_merge_recursive($arr_result, addressMaker::get_domain_from_easylist($easylist));
$hosts = file_get_contents('./origin-files/base-src-hosts.txt');
$arr_result = array_merge_recursive($arr_result, addressMaker::get_domain_list($hosts));
$strict_hosts = file_get_contents('./origin-files/base-src-strict-hosts.txt');
$arr_result = array_merge_recursive($arr_result, addressMaker::get_domain_list($strict_hosts, true));
$arr_result = array_merge_recursive($arr_result, $arr_blacklist);
$arr_input_cache = $arr_whitelist_cache = $arr_output = array();
$reflect = new ReflectionClass('writerFormat');
$formatterList = $reflect->getConstants();
$arr_output = array();
foreach($formatterList as $name => $formatObj){
if(!is_array($formatObj['src'])){
continue;
}
$arr_src_domains = array();
$arr_tmp_whitelist = array();//单次的白名单列表
if(is_array($formatObj['whitelist_attached']) && (count($formatObj['whitelist_attached']) > 0)){
foreach($formatObj['whitelist_attached'] as $white_file => $white_attr){
if(!array_key_exists("{$white_file}_{$white_attr['merge_mode']}", $arr_whitelist_cache)){
$arr_attached = file(ORIG_DIR . $white_file, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
$arr_attached = array_fill_keys($arr_attached, $white_attr['merge_mode']);
$arr_whitelist_cache["{$white_file}_{$white_attr['merge_mode']}"] = $arr_attached;
}
foreach ($formatterList as $name => $formatObj){
$arr_output[] = '['. $name . ']' . addressMaker::write_to_conf($arr_result, $formatObj);
$arr_tmp_whitelist = array_merge(
$arr_tmp_whitelist,
$arr_whitelist_cache["{$white_file}_{$white_attr['merge_mode']}"]
);
}
}
$arr_tmp_whitelist = array_merge($arr_tmp_whitelist, $ARR_WHITELIST);
foreach($formatObj['src'] as $src_file => $src_attr){
if(!array_key_exists($src_file, $arr_input_cache)){
$src_content = file_get_contents(ORIG_DIR . $src_file);
if($src_attr['type'] === 'easylist'){
$src_content = addressMaker::get_domain_from_easylist($src_content, $src_attr['strict_mode'], $arr_tmp_whitelist);
}elseif($src_attr['type'] === 'hosts'){
$src_content = addressMaker::get_domain_list($src_content, $src_attr['strict_mode'], $arr_tmp_whitelist);
}
$arr_input_cache[$src_file] = $src_content;
}
$arr_src_domains = array_merge_recursive($arr_src_domains, $arr_input_cache[$src_file]);
}
$arr_src_domains = array_merge_recursive($arr_src_domains, $ARR_BLACKLIST);
$arr_output[] = addressMaker::write_to_file($arr_src_domains, $formatObj, $arr_tmp_whitelist);
}
echo implode('---', $arr_output);
var_dump($arr_output);

View File

@ -90,7 +90,7 @@ cat strict-hosts*.txt | grep -v -E "^((#.*)|(\s*))$" \
cat dead-hosts*.txt | grep -v -E "^(#|\!)" \
| sort \
| uniq >base-src-dead-hosts.txt
| uniq >base-dead-hosts.txt
cat easylist*.txt | grep -E "^\|\|[^\*\^]+?\^" | sort | uniq >base-src-easylist.txt

View File

@ -92,6 +92,7 @@ $ARR_WHITE_RULE_LIST = array(
'@@||tongji.*kuwo.cn^' => 0,
'@@||ntp.org^' => 1, //针对上面正则表达式的一个赦免规则例如2.android.pool.ntp.org
'@@||*push-apple.com.akadns.net^' => 1, //强制加白, 苹果推送2.courier-push-apple.com.akadns.net
'@@||tracking.epicgames.com' => 0,
);
//针对上游赦免规则anti-AD不予赦免的规则即赦免名单的黑名单