修改文件结构
This commit is contained in:
parent
f96c2e2e16
commit
f87ad871f9
|
@ -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
73
main.py
|
@ -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,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
152
tools.py
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue