修改文件结构

This commit is contained in:
EvilCult 2019-05-24 13:32:26 +08:00
parent f96c2e2e16
commit f87ad871f9
5 changed files with 144 additions and 137 deletions

View File

@ -1,5 +1,5 @@
{
"python.pythonPath": "/usr/local/bin/python3",
"python.pythonPath": "/usr/local/opt/python@2/bin/python2.7",
"python.linting.pylintEnabled": true,
"python.linting.enabled": true
}

73
main.py
View File

@ -5,79 +5,29 @@ import tools
import db
import time
import re
from plugins import base
class Iptv :
def __init__ (self) :
self.T = tools.Tools()
self.DB = db.DataBase()
self.now = int(time.time() * 1000)
def run(self) :
self.getSourceA()
Base = base.Source()
urlList = Base.getSource()
for item in urlList :
self.addData(item)
# self.outPut()
print("DONE!!")
def getSourceA (self) :
url = 'https://www.jianshu.com/p/2499255c7e79'
req = [
'user-agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Mobile Safari/537.36',
]
res = self.T.getPage(url, req)
if res['code'] == 200 :
pattern = re.compile(r"<code(.*?)</code>", re.I|re.S)
tmp = pattern.findall(res['body'])
pattern = re.compile(r"#EXTINF:0,(.*?)\n#EXTVLCOPT:network-caching=1000\n(.*?)\n", re.I|re.S)
sourceList = pattern.findall(tmp[0])
sourceList = sourceList + pattern.findall(tmp[1])
for item in sourceList :
netstat = self.chkPlayable(item[1])
if netstat > 0 :
info = self.fmtTitle(item[0])
data = {
'title' : str(info['id']) + str(info['title']),
'url' : str(item[1]),
'quality': str(info['quality']),
'delay' : netstat,
'enable' : 1,
'online' : 1,
'udTime' : self.now,
}
self.addData(data)
else :
pass # MAYBE later :P
else :
pass # MAYBE later :P
def chkPlayable (self, url) :
try:
startTime = int(round(time.time() * 1000))
res = self.T.getPage(url)
if res['code'] == 200 :
endTime = int(round(time.time() * 1000))
useTime = endTime - startTime
return int(useTime)
else:
return 0
except:
return 0
def addData (self, data) :
sql = "SELECT * FROM %s WHERE url = '%s'" % (self.DB.table, data['url'])
result = self.DB.query(sql)
if len(result) == 0 :
print('add:' + str(data['title']))
self.DB.insert(data)
else :
print('update:' + str(data['title']))
id = result[0][0]
self.DB.edit(id, data)
@ -91,19 +41,6 @@ class Iptv :
f.write("#EXTINF:-1,%s\n" % (item[1]))
f.write("%s\n" % (item[3]))
def fmtTitle (self, string) :
pattern = re.compile(r"(cctv[-|\s]*\d*)*\s*?([^fhd|^hd|^sd|^\.m3u8]*)\s*?(fhd|hd|sd)*", re.I)
tmp = pattern.findall(string)[0]
result = {
'id' : tmp[0].strip('-').strip(),
'title' : tmp[1].strip('-').strip(),
'quality': tmp[2].strip('-').strip(),
}
return result
obj = Iptv()
obj.run()

0
plugins/__init__.py Normal file
View File

54
plugins/base.py Normal file
View File

@ -0,0 +1,54 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tools
import time
import re
class Source :
def __init__ (self):
self.T = tools.Tools()
self.now = int(time.time() * 1000)
def getSource (self) :
urlList = []
url = 'https://www.jianshu.com/p/2499255c7e79'
req = [
'user-agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Mobile Safari/537.36',
]
res = self.T.getPage(url, req)
if res['code'] == 200 :
pattern = re.compile(r"<code(.*?)</code>", re.I|re.S)
tmp = pattern.findall(res['body'])
pattern = re.compile(r"#EXTINF:0,(.*?)\n#EXTVLCOPT:network-caching=1000\n(.*?)\n", re.I|re.S)
sourceList = pattern.findall(tmp[0])
sourceList = sourceList + pattern.findall(tmp[1])
for item in sourceList :
print('Checking:' + str(item[0]))
netstat = self.T.chkPlayable(item[1])
if netstat > 0 :
info = self.T.fmtTitle(item[0])
data = {
'title' : str(info['id']) + str(info['title']),
'url' : str(item[1]),
'quality': str(info['quality']),
'delay' : netstat,
'enable' : 1,
'online' : 1,
'udTime' : self.now,
}
urlList.append(data)
else :
pass # MAYBE later :P
else :
pass # MAYBE later :P
return urlList

152
tools.py
View File

@ -5,96 +5,112 @@ import urllib.parse
import urllib.error
import re
import ssl
import os
import platform
import sys
import io
import gzip
import random
import socket
import time
socket.setdefaulttimeout(10.0)
class Tools :
def __init__ (self) :
pass
def __init__ (self) :
pass
def getPage (self, url, requestHeader = [], postData = {}) :
fakeIp = self.fakeIp()
requestHeader.append('CLIENT-IP:' + fakeIp)
requestHeader.append('X-FORWARDED-FOR:' + fakeIp)
def getPage (self, url, requestHeader = [], postData = {}) :
fakeIp = self.fakeIp()
requestHeader.append('CLIENT-IP:' + fakeIp)
requestHeader.append('X-FORWARDED-FOR:' + fakeIp)
if postData == {} :
request = urllib.request.Request(url)
elif isinstance(postData, str) :
request = urllib.request.Request(url, postData)
else :
request = urllib.request.Request(url, urllib.parse.urlencode(postData).encode('utf-8'))
if postData == {} :
request = urllib.request.Request(url)
elif isinstance(postData, str) :
request = urllib.request.Request(url, postData)
else :
request = urllib.request.Request(url, urllib.parse.urlencode(postData).encode('utf-8'))
for x in requestHeader :
headerType = x.split(':')[0]
headerCon = x.replace(headerType + ':', '')
request.add_header(headerType, headerCon)
for x in requestHeader :
headerType = x.split(':')[0]
headerCon = x.replace(headerType + ':', '')
request.add_header(headerType, headerCon)
try :
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
response = urllib.request.urlopen(request, context = ctx)
header = response.headers
body = response.read().decode('utf-8')
code = response.code
except urllib.error.HTTPError as e:
header = e.headers
body = e.read().decode('utf-8')
code = e.code
try :
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
response = urllib.request.urlopen(request, context = ctx)
header = response.headers
body = response.read().decode('utf-8')
code = response.code
except urllib.error.HTTPError as e:
header = e.headers
body = e.read().decode('utf-8')
code = e.code
result = {
'code': code,
'header': header,
'body': body
}
result = {
'code': code,
'header': header,
'body': body
}
return result
return result
def fakeIp (self) :
fakeIpList = []
def fakeIp (self) :
fakeIpList = []
for x in range(0, 4):
fakeIpList.append(str(int(random.uniform(0, 255))))
for x in range(0, 4):
fakeIpList.append(str(int(random.uniform(0, 255))))
fakeIp = '.'.join(fakeIpList)
fakeIp = '.'.join(fakeIpList)
return fakeIp
return fakeIp
def fmtCookie (self, string) :
result = re.sub(r"path\=\/.", "", string)
result = re.sub(r"(\S*?)\=deleted.", "", result)
result = re.sub(r"expires\=(.*?)GMT;", "", result)
result = re.sub(r"domain\=(.*?)tv.", "", result)
result = re.sub(r"httponly", "", result)
result = re.sub(r"\s", "", result)
def fmtCookie (self, string) :
result = re.sub(r"path\=\/.", "", string)
result = re.sub(r"(\S*?)\=deleted.", "", result)
result = re.sub(r"expires\=(.*?)GMT;", "", result)
result = re.sub(r"domain\=(.*?)tv.", "", result)
result = re.sub(r"httponly", "", result)
result = re.sub(r"\s", "", result)
return result
return result
def urlencode(self, str) :
reprStr = repr(str).replace(r'\x', '%')
return reprStr[1:-1]
def urlencode(self, str) :
reprStr = repr(str).replace(r'\x', '%')
return reprStr[1:-1]
def gzdecode(self, data) :
try:
compressedstream = io.StringIO(data)
gziper = gzip.GzipFile(fileobj = compressedstream)
html = gziper.read()
return html
except :
return data
def gzdecode(self, data) :
try:
compressedstream = io.StringIO(data)
gziper = gzip.GzipFile(fileobj = compressedstream)
html = gziper.read()
return html
except :
return data
def isWin (self) :
osType = platform.system()
def fmtTitle (self, string) :
pattern = re.compile(r"(cctv[-|\s]*\d*)*\s*?([^fhd|^hd|^sd|^\.m3u8]*)\s*?(fhd|hd|sd)*", re.I)
tmp = pattern.findall(string)[0]
if osType == 'Windows' :
return True
else :
return False
result = {
'id' : tmp[0].strip('-').strip(),
'title' : tmp[1].strip('-').strip(),
'quality': tmp[2].strip('-').strip(),
}
return result
def chkPlayable (self, url) :
try:
startTime = int(round(time.time() * 1000))
res = self.getPage(url)
if res['code'] == 200 :
endTime = int(round(time.time() * 1000))
useTime = endTime - startTime
return int(useTime)
else:
return 0
except:
return 0