Sync all projects

This commit is contained in:
github-actions[bot]
2026-07-05 04:58:38 +00:00
parent 286d42c940
commit a45a9bde55
651 changed files with 337816 additions and 0 deletions
+147
View File
@@ -0,0 +1,147 @@
# -*- coding: utf-8 -*-
# 本资源来源于互联网公开渠道,仅可用于个人学习爬虫技术。
# 严禁将其用于任何商业用途,下载后请于 24 小时内删除,搜索结果均来自源站,本人不承担任何责任。
from base.spider import Spider
import re,sys,time,urllib3,hashlib
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
sys.path.append('..')
class Spider(Spider):
headers,host,tab = {
'User-Agent': 'okhttp-okgo/jeasonlzy',
'Connection': 'Keep-Alive',
'Accept-Encoding': 'gzip',
'Accept-Language': 'zh-CN,zh;q=0.8'
},'',{'泰剧','日剧','美剧','台剧'}
def init(self, host=''):
if host.startswith('http'): self.host = host
def homeContent(self, filter):
if not self.host: return None
response = self.post(f'{self.host}/v3/type/top_type', data=self.payload(), headers=self.headers, verify=False).json()
classes = []
for i in response['data']['list']:
if isinstance(i, dict):
if i['type_name'] not in self.tab:
classes.append({'type_id': i['type_id'],'type_name': i['type_name']})
return {'class': classes}
def homeVideoContent(self):
if not self.host: return None
response = self.post(f'{self.host}/v3/type/tj_vod', data=self.payload({'':''}), headers=self.headers, verify=False).json()
data = response['data']
videos = []
videos.extend(self.arr2vods(data.get('cai',[])))
videos.extend(self.arr2vods(data.get('loop', [])))
for i in data.get('type_vod',[]):
if isinstance(i,dict):
if i['type_name'] not in self.tab:
videos.extend(self.arr2vods(i.get('vod', [])))
return {'list': videos}
def categoryContent(self, tid, pg, filter, extend):
if not self.host: return None
response = self.post(f'{self.host}/v3/home/type_search', data=self.payload({'type_id':str(tid),'page':str(pg)}), headers=self.headers, verify=False).json()
return {'list': self.arr2vods(response['data']['list']), 'page': pg}
def searchContent(self, key, quick, pg='1'):
if not self.host: return None
response = self.post(f'{self.host}/v3/home/search', data=self.payload({'keyword': key}), headers=self.headers, verify=False).json()
videos = self.arr2vods(response['data']['list'])
return {'list': videos, 'page': pg}
def detailContent(self, ids):
if not self.host: return None
response = self.post(f'{self.host}/v3/home/vod_details', data=self.payload({'vod_id':str(ids[0])}), headers=self.headers, verify=False).json()
data = response['data']
shows,play_urls = [],[]
for i in data['vod_play_list']:
parses = ','.join(i['parse_urls'])
urls = []
for j in i['urls']:
urls.append(f"{j['name']}${j['url']}@{parses}@{i['ua']}@{i['referer']}")
play_urls.append('#'.join(urls))
name = re.sub(r'[\(](?:点击|换)[^)]*[\)]|[Z▶❤【].*', '', i.get('title', i.get('name', '')))
if name == i['flag']:
shows.append(name)
else:
shows.append(f"{name}({i['flag']})")
video = {
'vod_id': data['vod_id'],
'vod_name': data['vod_name'],
'vod_pic': data.get('vod_pic',data.get('vod_pic_thumb')),
'vod_remarks': data['vod_remarks'],
'vod_year': data['vod_year'],
'vod_area': data['vod_area'],
'vod_actor': data['vod_actor'],
'vod_director': data['vod_director'],
'vod_content': data['vod_content'],
'vod_play_from': '$$$'.join(shows),
'vod_play_url': '$$$'.join(play_urls),
'type_name': data['vod_class']
}
return {'list': [video]}
def playerContent(self, flag, vid, vip_flags):
raw_url,parses,ua,referer = vid.split('@',3)
jx,url,play_headers = 0,'',{}
if ua:
play_headers['User-Agent'] = ua
if referer:
play_headers['Referer'] = referer
for parse in parses.split(','):
try:
if parse.startswith('http'):
res = self.fetch(f'{parse}{raw_url}',headers=self.headers, verify=False).json()
play_url = res['url']
if play_url.startswith('http'):
url = play_url
except Exception:
pass
if not url and raw_url.startswith('http'):
url = raw_url
if re.search(r'(?:www\.iqiyi|v\.qq|v\.youku|www\.mgtv|www\.bilibili)\.com', raw_url):
jx = 1
return {'jx': jx, 'parse': 0, 'url': url, 'header': play_headers}
def arr2vods(self, arr):
videos = []
for i in arr:
try:
if i.get('vod_name') == '首页轮播': continue
videos.append({
'vod_id': i['vod_id'],
'vod_name': i['vod_name'],
'vod_pic': i.get('vod_pic', i.get('vod_pic_thumb')),
'vod_remarks': i.get('vod_remarks'),
'type_name': i.get('vod_class'),
'vod_year': i.get('vod_year')
})
except Exception:
continue
return videos
def payload(self, payload={}):
timestamp = str(int(time.time()))
return {
'sign': hashlib.md5(f'7gp0bnd2sr85ydii2j32pcypscoc4w6c7g5spl{timestamp}'.encode()).hexdigest(),
**payload,
'timestamp': timestamp
}
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
def localProxy(self, param):
pass