xxxx
This commit is contained in:
110
PY1/91.py
Normal file
110
PY1/91.py
Normal file
@@ -0,0 +1,110 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# by @嗷呜
|
||||
import sys
|
||||
from Crypto.Cipher import AES
|
||||
from pyquery import PyQuery as pq
|
||||
sys.path.append('..')
|
||||
from base.spider import Spider
|
||||
|
||||
|
||||
class Spider(Spider):
|
||||
|
||||
def init(self, extend='{}'):
|
||||
pass
|
||||
|
||||
def destroy(self):
|
||||
pass
|
||||
|
||||
host='https://91-short.com'
|
||||
|
||||
headers = {
|
||||
'accept': 'application/json, text/plain, */*',
|
||||
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
|
||||
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="141", "Google Chrome";v="141"',
|
||||
'sec-ch-ua-platform': '"Windows"',
|
||||
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.55 Safari/537.36',
|
||||
}
|
||||
|
||||
cache={}
|
||||
|
||||
def getvs(self,data):
|
||||
videos = []
|
||||
for i in data.items():
|
||||
a = i("a")
|
||||
videos.append({
|
||||
'vod_id': a.attr('href'),
|
||||
'vod_name': a.attr('title'),
|
||||
'vod_pic': self.getProxyUrl()+"&url="+i("img").attr("data-cover"),
|
||||
'vod_remark': i(".module-item-caption").text() or i(".module-item-ru").text(),
|
||||
})
|
||||
return videos
|
||||
|
||||
def homeContent(self, filter):
|
||||
resp=self.fetch(self.host,headers=self.headers)
|
||||
tab1=pq(resp.content)("#tablist > a")
|
||||
resp = self.fetch(f"{self.host}/film/home_recommend_list", headers=self.headers)
|
||||
tab2 = pq(resp.content)("#tablist > a")
|
||||
classes = []
|
||||
for k in (tab1+tab2).items():
|
||||
href=k.attr('href')
|
||||
if not href or "http" in href:
|
||||
continue
|
||||
classes.append({
|
||||
'type_name': k.text(),
|
||||
'type_id': href,
|
||||
})
|
||||
return {'class':classes}
|
||||
|
||||
def categoryContent(self, tid, pg, filter, extend):
|
||||
if pg=="1":
|
||||
resp=self.fetch(self.host+tid,headers=self.headers)
|
||||
qu=".module-items > .module-item > .module-item-cover"
|
||||
doc=pq(resp.content)
|
||||
stext=doc('main').next('script').html()
|
||||
self.cache[tid]=stext.strip().split('\n',1)[0].strip().split('=',1)[-1].replace('"','').strip()
|
||||
else:
|
||||
resp=self.fetch(self.host+self.cache[tid],headers=self.headers)
|
||||
qu = ".module-item > .module-item-cover"
|
||||
doc=pq(resp.content.decode())
|
||||
self.cache[tid]=doc("script").eq(-1).text()
|
||||
result = {}
|
||||
result['list'] = self.getvs(doc(qu))
|
||||
result['page'] = pg
|
||||
result['pagecount'] = 9999
|
||||
result['limit'] = 90
|
||||
result['total'] = 999999
|
||||
return result
|
||||
|
||||
def detailContent(self, ids):
|
||||
resp=self.fetch(self.host+ids[0],headers=self.headers)
|
||||
doc=pq(resp.content)
|
||||
stext=doc('.player-wrapper > script').eq(-1).html().strip()
|
||||
try:
|
||||
url=stext.split('\n')[-1].split('=')[-1].replace('"','').strip()
|
||||
p=0
|
||||
except Exception as e:
|
||||
url=self.host+ids[0]
|
||||
p=1
|
||||
vod = {
|
||||
'vod_director': '沐辰',
|
||||
'vod_play_from': '91——short',
|
||||
'vod_play_url': f'{doc(".module-item-in").text() or doc("h2.module-title").text()}${url}@@{p}'
|
||||
}
|
||||
return {'list':[vod]}
|
||||
|
||||
def searchContent(self, key, quick, pg="1"):
|
||||
resp=self.fetch(f'{self.host}/search',headers=self.headers,params={'wd':key})
|
||||
qu = ".module-items > .module-item > .module-item-cover"
|
||||
data = pq(resp.content)(qu)
|
||||
return {'list':self.getvs(data),'page':pg}
|
||||
|
||||
def playerContent(self, flag, id, vipFlags):
|
||||
url,p=id.split('@@')
|
||||
return {'parse': int(p), 'url': url}
|
||||
|
||||
def localProxy(self, param):
|
||||
res=self.fetch(param['url'])
|
||||
key = b'Jui7X#cdleN^3eZb'
|
||||
cipher = AES.new(key, AES.MODE_ECB)
|
||||
decrypted = cipher.decrypt(res.content)
|
||||
return [200,res.headers.get('Content-Type'),decrypted]
|
||||
Reference in New Issue
Block a user