#!/usr/bin/python3
# -*- coding: UTF-8 -*-
#author:Wos
#a script to remove ads that appended to m3u8 file
#一个用于移除m3u8广告的脚本
#version 2
import requests
import os
import sys
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
m3u8_path = os.path.join(BASE_DIR, "removeads.m3u8")
hdr = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:102.0) Gecko/20100101 Goanna/5.2 Firefox/102.0 PaleMoon/31.3.0.1"
}
#get absolute m3u8 link
def get_real_m3u8(url):
premain = "/".join(str(url).split("/")[:-1])+"/"
premain_ = "/".join(str(url).split("/")[:3])
cnt = 0
while True:
try:
if cnt < 3:
res = requests.get(url,headers=hdr,timeout=(3,7))
break
else:
return
except:
cnt += 1
continue
temp = str(res.text).split("\n")
for i in temp:
if not str(i).startswith("#") and str(i).strip().endswith(".m3u8"):
if str(i).strip().startswith("http"):
return get_real_m3u8(str(i).strip())
else:
t = str(i).strip().split("/")[1]
if str(t) in str(premain):
url2 = premain_+str(i).strip()
else:
url2 = premain+str(i).strip()
return get_real_m3u8(url2)
return url
#移出广告相关的参数
def removeads(url):
url = get_real_m3u8(url)
if not str(url).strip().endswith(".m3u8"):
return False
print(url)
m3u8file = []
premain = "/".join(str(url).split("/")[:-1])+"/"
res = requests.get(url,headers=hdr)
temp = str(res.text).split("\n")
for i in temp:
if str(i).startswith("#EXT-X-KEY:METHOD=AES-128"):
kn = str(i).split("#EXT-X-KEY:METHOD=AES-128,URI=\"")[1].strip()
premain_ = "/".join(str(premain).split("/")[:3])
if str(kn).startswith("http"):
l = "#EXT-X-KEY:METHOD=AES-128,URI=\""+str(kn)
else:
if "/" in str(kn):
t = str(kn).split("/")[1]
if str(t) in str(premain):
l = "#EXT-X-KEY:METHOD=AES-128,URI=\""+str(premain_)+str(kn)
else:
l = "#EXT-X-KEY:METHOD=AES-128,URI=\""+str(premain)+str(kn)
m3u8file.append(str(l).strip())
elif not str(i).startswith("#"):
if str(i).startswith("http"):
m3u8file.append(i)
else:
premain_ = "/".join(str(premain).split("/")[:3])
if "/" in str(i):
t = str(i).split("/")[1]
if str(t) in str(premain):
l = premain_+str(i)
else:
l = premain+str(i)
m3u8file.append(l)
else:
m3u8file.append(i)
file_obj = open(m3u8_path,'w',encoding='UTF-8', newline='')
for i in m3u8file:
file_obj.write(str(i)+"\n")
file_obj.write("#EXT-X-ENDLIST\n")
file_obj.close()
#去广告核心代码---start
m3u8file = []
with open(m3u8_path, 'r') as file:
content = file.read()
temp = str(content).split("#EXT-X-DISCONTINUITY")
m3u8file.append(temp[0])
i = 1
while i < len(temp):
if len(temp[i].split("\n")) >= 18:
m3u8file.append("#EXT-X-DISCONTINUITY")
m3u8file.append(temp[i])
i += 1
file_obj = open(m3u8_path,'w',encoding='UTF-8', newline='')
for i in m3u8file:
file_obj.write(str(i))
file_obj.write("#EXT-X-ENDLIST")
file_obj.close()
#去广告核心代码---end
if __name__ == '__main__':
if len(sys.argv) == 2:
removeads(sys.argv[1])
cmdline = ("mpv --stream-lavf-o-append=\"protocol_whitelist=file,http,https,tcp,tls,crypto,hls,applehttp\" --really-quiet --ontop \"%s\""%(m3u8_path))
os.system(cmdline)
else:
print("python removeads.py [m3u8-link]")