```
feat(PyramidStore): 初始化项目并添加基础配置文件 添加 .gitignore 忽略子仓库的 .git 目录 添加 LICENSE 文件,使用 GNU General Public License v3.0 添加 README.md 说明文档,包含调试示例、免责声明和配置说明 添加 base/localProxy.py 基础代理配置文件 添加版本控制图片文件(二进制差异) ```
This commit is contained in:
132
PyramidStore/plugin/adult/香蕉APP.py
Normal file
132
PyramidStore/plugin/adult/香蕉APP.py
Normal file
@@ -0,0 +1,132 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# by @嗷呜
|
||||
import random
|
||||
import string
|
||||
import sys
|
||||
sys.path.append('..')
|
||||
from base.spider import Spider
|
||||
|
||||
|
||||
class Spider(Spider):
|
||||
|
||||
def init(self, extend=""):
|
||||
self.host,self.headers = self.getat()
|
||||
pass
|
||||
|
||||
def getName(self):
|
||||
pass
|
||||
|
||||
def isVideoFormat(self, url):
|
||||
pass
|
||||
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
|
||||
def destroy(self):
|
||||
pass
|
||||
|
||||
def homeContent(self, filter):
|
||||
data=self.fetch(f'{self.host}/vod/listing-0-0-0-0-0-0-0-0-0-0',headers=self.headers).json()
|
||||
result = {}
|
||||
classes = [{
|
||||
'type_name': '全部',
|
||||
'type_id': '0'
|
||||
}]
|
||||
filters = {}
|
||||
ft=[]
|
||||
filter_keys = ['orders', 'areas', 'years', 'definitions', 'durations', 'mosaics', 'langvoices']
|
||||
for key in filter_keys:
|
||||
if key in data['data']:
|
||||
filter_item = {
|
||||
'key': key,
|
||||
'name': key,
|
||||
'value': []
|
||||
}
|
||||
for item in data['data'][key]:
|
||||
first_two = dict(list(item.items())[:2])
|
||||
filter_item['value'].append({
|
||||
'v': list(first_two.values())[0],
|
||||
'n': list(first_two.values())[1]
|
||||
})
|
||||
ft.append(filter_item)
|
||||
filters['0']=ft
|
||||
for k in data['data']['categories']:
|
||||
classes.append({
|
||||
'type_name': k['catename'],
|
||||
'type_id': k['cateid']
|
||||
})
|
||||
filters[k['cateid']]=ft
|
||||
|
||||
result['class'] = classes
|
||||
result['filters'] =filters
|
||||
result['list'] = self.getlist(data['data']['vodrows'])
|
||||
return result
|
||||
|
||||
def homeVideoContent(self):
|
||||
pass
|
||||
|
||||
def categoryContent(self, tid, pg, filter, extend):
|
||||
data=self.fetch(f'{self.host}/vod/listing-{tid}-{extend.get("areas","0")}-{extend.get("years","0")}-1-{extend.get("definitions","0")}-{extend.get("durations","0")}-{extend.get("mosaics","0")}-{extend.get("langvoices","0")}-{extend.get("orders","0")}-{pg}',headers=self.headers).json()
|
||||
result = {}
|
||||
result['list'] = self.getlist(data['data']['vodrows'])
|
||||
result['page'] = pg
|
||||
result['pagecount'] = 9999
|
||||
result['limit'] = 90
|
||||
result['total'] = 999999
|
||||
return result
|
||||
|
||||
def detailContent(self, ids):
|
||||
data=self.fetch(f'{self.host}/vod/reqplay/{ids[0]}',headers=self.headers).json()
|
||||
vod = {
|
||||
'vod_play_from': data['errmsg'],
|
||||
'vod_play_url': '#'.join([f"{i['hdtype']}${i['httpurl']}" for i in data['data']['httpurls']]),
|
||||
}
|
||||
return {'list':[vod]}
|
||||
|
||||
def searchContent(self, key, quick, pg="1"):
|
||||
data=self.fetch(f'{self.host}/search?page={pg}&wd={key}',headers=self.headers).json()
|
||||
return {'list':self.getlist(data['data']['vodrows']),'page':pg}
|
||||
|
||||
def playerContent(self, flag, id, vipFlags):
|
||||
return {'parse': 0, 'url': id, 'header': {'User-Agent':'ExoPlayer'}}
|
||||
|
||||
def localProxy(self, param):
|
||||
pass
|
||||
|
||||
def getlist(self,data):
|
||||
vlist=[]
|
||||
for i in data:
|
||||
if i['isvip'] !='1':
|
||||
vlist.append({
|
||||
'vod_id': i['vodid'],
|
||||
'vod_name': i['title'],
|
||||
'vod_pic': i['coverpic'],
|
||||
'vod_year': i.get('duration'),
|
||||
'vod_remarks': i.get('catename'),
|
||||
'style': {"type": "rect", "ratio": 1.33}
|
||||
})
|
||||
return vlist
|
||||
|
||||
def getat(self):
|
||||
headers = {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2012K10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36',
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'x-auth-uuid': self.random_str(32),
|
||||
'x-system': 'Android',
|
||||
'x-version': '5.0.5',
|
||||
'x-channel': 'xj2',
|
||||
'x-requested-with': 'com.uyvzkv.pnjzdv',
|
||||
'sec-fetch-site': 'cross-site',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||||
}
|
||||
host=f'https://{self.random_str(6)}.bjhpz.com'
|
||||
data=self.fetch(f'{host}/init',headers=headers).json()
|
||||
headers.update({'x-cookie-auth': data['data']['globalData'].get('xxx_api_auth')})
|
||||
return host,headers
|
||||
|
||||
def random_str(self,length=16):
|
||||
chars = string.ascii_lowercase + string.digits
|
||||
return ''.join(random.choice(chars) for _ in range(length))
|
||||
|
Reference in New Issue
Block a user