diff --git a/py/lav.py b/py/lav.py deleted file mode 100644 index 2386caf6..00000000 --- a/py/lav.py +++ /dev/null @@ -1,213 +0,0 @@ -# coding=utf-8 -# !/usr/bin/python -# 嗷呜 -import sys -from base64 import b64encode, b64decode -from Crypto.Hash import MD5, SHA256 -sys.path.append("..") -from base.spider import Spider -from Crypto.Cipher import AES -import json -import time - - -class Spider(Spider): - - def getName(self): - return "lav" - - def init(self, extend=""): - self.id = self.ms(str(int(time.time() * 1000)))[:16] - pass - - def isVideoFormat(self, url): - pass - - def manualVideoCheck(self): - pass - - def action(self, action): - pass - - def destroy(self): - pass - - host = "http://sir_new.tiansexyl.tv" - t = str(int(time.time() * 1000)) - headers = {'User-Agent': 'okhttp-okgo/jeasonlzy', 'Connection': 'Keep-Alive', - 'Content-Type': 'application/x-www-form-urlencoded'} - - def homeContent(self, filter): - cateManual = {"演员": "actor", "分类": "avsearch", } - classes = [] - for k in cateManual: - classes.append({'type_name': k, 'type_id': cateManual[k]}) - j = {'code': 'homePage', 'mod': 'down', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv', - 'app_type': 'rn', 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn', - 'oauth_id': self.id} - - body = self.aes(j) - data = self.post(f'{self.host}/api.php?t={str(int(time.time() * 1000))}', data=body, headers=self.headers).json()['data'] - data1 = self.aes(data, False)['data'] - self.r = data1['r'] - for i, d in enumerate(data1['avTag']): - # if i == 4: - # break - classes.append({'type_name': d['name'], 'type_id': d['tag']}) - resutl = {} - resutl["class"] = classes - return resutl - - def homeVideoContent(self): - pass - - def categoryContent(self, tid, pg, filter, extend): - id = tid.split("@@") - result = {} - result["page"] = pg - result["pagecount"] = 9999 - result["limit"] = 90 - result["total"] = 999999 - if id[0] == 'avsearch': - if pg == '1': - j = {'code': 'avsearch', 'mod': 'search', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv', - 'app_type': 'rn', 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn', - 'oauth_id': self.id} - if len(id) > 1: - j = {'code': 'find', 'mod': 'tag', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv', - 'app_type': 'rn', 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn', - 'oauth_id': self.id, 'type': 'av', 'dis': 'new', 'page': str(pg), 'tag': id[1]} - elif id[0] == 'actor': - j = {'mod': 'actor', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv', 'app_type': 'rn', - 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn', 'oauth_id': self.id, - 'page': str(pg), 'filter': ''} - if len(id) > 1: - j = {'code': 'eq', 'mod': 'actor', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv', - 'app_type': 'rn', 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn', - 'oauth_id': self.id, 'page': str(pg), 'id': id[1], 'actor': id[2]} - else: - j = {'code': 'search', 'mod': 'av', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv', - 'app_type': 'rn', 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn', - 'oauth_id': self.id, 'page': str(pg), 'tag': id[0]} - - body = self.aes(j) - data = self.post(f'{self.host}/api.php?t={str(int(time.time() * 1000))}', data=body, headers=self.headers).json()['data'] - data1 = self.aes(data, False)['data'] - videos = [] - if tid == 'avsearch' and len(id) == 1: - for item in data1: - videos.append({"vod_id": id[0] + "@@" + str(item.get('tags')), 'vod_name': item.get('name'), - 'vod_pic': self.imgs(item.get('ico')), 'vod_tag': 'folder', - 'style': {"type": "rect", "ratio": 1.33}}) - elif tid == 'actor' and len(id) == 1: - for item in data1: - videos.append({"vod_id": id[0] + "@@" + str(item.get('id')) + "@@" + item.get('name'), - 'vod_name': item.get('name'), 'vod_pic': self.imgs(item.get('cover')), - 'vod_tag': 'folder', 'style': {"type": "oval"}}) - else: - for item in data1: - if item.get('_id'): - videos.append({"vod_id": str(item.get('id')), 'vod_name': item.get('title'), - 'vod_pic': self.imgs(item.get('cover_thumb') or item.get('cover_full')), - 'vod_remarks': item.get('good'), 'style': {"type": "rect", "ratio": 1.33}}) - result["list"] = videos - return result - - def detailContent(self, ids): - id = ids[0] - j = {'code': 'detail', 'mod': 'av', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv', - 'app_type': 'rn', 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn', - 'oauth_id': self.id, 'id': id} - body = self.aes(j) - data = self.post(f'{self.host}/api.php?t={str(int(time.time() * 1000))}', data=body, headers=self.headers).json()['data'] - data1 = self.aes(data, False)['line'] - vod = {} - play = [] - for itt in data1: - a = itt['line'].get('s720') - if a: - b = a.split('.') - b[0] = 'https://m3u8' - a = '.'.join(b) - play.append(itt['info']['tips'] + "$" + a) - break - vod["vod_play_from"] = 'LAV' - vod["vod_play_url"] = "#".join(play) - result = {"list": [vod]} - return result - - def searchContent(self, key, quick, pg="1"): - pass - - def playerContent(self, flag, id, vipFlags): - url = self.getProxyUrl() + "&url=" + b64encode(id.encode('utf-8')).decode('utf-8') + "&type=m3u8" - self.hh = {'User-Agent': 'dd', 'Connection': 'Keep-Alive', 'Referer': self.r} - result = {} - result["parse"] = 0 - result["url"] = url - result["header"] = self.hh - return result - - def localProxy(self, param): - url = param["url"] - if param.get('type') == "m3u8": - return self.vod(b64decode(url).decode('utf-8')) - else: - return self.img(url) - - def vod(self, url): - data = self.fetch(url, headers=self.hh).text - key = bytes.fromhex("13d47399bda541b85e55830528d4e66f1791585b2d2216f23215c4c63ebace31") - iv = bytes.fromhex(data[:32]) - data = data[32:] - cipher = AES.new(key, AES.MODE_CFB, iv, segment_size=128) - data_bytes = bytes.fromhex(data) - decrypted = cipher.decrypt(data_bytes) - encoded = decrypted.decode("utf-8").replace("\x08", "") - return [200, "application/vnd.apple.mpegur", encoded] - - def imgs(self, url): - return self.getProxyUrl() + '&url=' + url - - def img(self, url): - type = url.split('.')[-1] - data = self.fetch(url).text - key = bytes.fromhex("ba78f184208d775e1553550f2037f4af22cdcf1d263a65b4d5c74536f084a4b2") - iv = bytes.fromhex(data[:32]) - data = data[32:] - cipher = AES.new(key, AES.MODE_CFB, iv, segment_size=128) - data_bytes = bytes.fromhex(data) - decrypted = cipher.decrypt(data_bytes) - return [200, f"image/{type}", decrypted] - - def ms(self, data, m=False): - h = MD5.new() - if m: - h = SHA256.new() - h.update(data.encode('utf-8')) - return h.hexdigest() - - def aes(self, data, operation=True): - key = bytes.fromhex("620f15cfdb5c79c34b3940537b21eda072e22f5d7151456dec3932d7a2b22c53") - t = str(int(time.time())) - ivt = self.ms(t) - if operation: - data = json.dumps(data, separators=(',', ':')) - iv = bytes.fromhex(ivt) - else: - iv = bytes.fromhex(data[:32]) - data = data[32:] - cipher = AES.new(key, AES.MODE_CFB, iv, segment_size=128) - if operation: - data_bytes = data.encode('utf-8') - encrypted = cipher.encrypt(data_bytes) - ep = f'{ivt}{encrypted.hex()}' - edata = f"data={ep}×tamp={t}0d27dfacef1338483561a46b246bf36d" - sign = self.ms(self.ms(edata, True)) - edata = f"timestamp={t}&data={ep}&sign={sign}" - return edata - else: - data_bytes = bytes.fromhex(data) - decrypted = cipher.decrypt(data_bytes) - return json.loads(decrypted.decode('utf-8')) -