123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461 |
- # -*- coding: utf-8 -*-
- # @Author : Doubebly
- # @Time : 2025/1/20 01:47
- import sys
- import hashlib
- import time
- import requests
- import re
- import json
- sys.path.append('..')
- from base.spider import Spider
- class Spider(Spider):
- def getName(self):
- return "JinPai"
- def init(self, extend):
- self.home_url = 'https://www.cfkj86.com'
- self.ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
- def getDependence(self):
- return []
- def isVideoFormat(self, url):
- pass
- def manualVideoCheck(self):
- pass
- def homeContent(self, filter):
- return {
- 'class': [{'type_id': '1', 'type_name': '电影'},
- {'type_id': '2', 'type_name': '电视剧'},
- {'type_id': '3', 'type_name': '综艺'},
- {'type_id': '4', 'type_name': '动漫'}],
- 'filters': {
- '1': [
- {'key': 'type',
- 'name': '类型',
- 'value': [{'n': '全部', 'v': ''},
- {'n': '喜剧', 'v': '/type/22'},
- {'n': '动作', 'v': '/type/23'},
- {'n': '科幻', 'v': '/type/30'},
- {'n': '爱情', 'v': '/type/26'},
- {'n': '悬疑', 'v': '/type/27'},
- {'n': '奇幻', 'v': '/type/87'},
- {'n': '剧情', 'v': '/type/37'},
- {'n': '恐怖', 'v': '/type/36'},
- {'n': '犯罪', 'v': '/type/35'},
- {'n': '动画', 'v': '/type/33'},
- {'n': '惊悚', 'v': '/type/34'},
- {'n': '战争', 'v': '/type/25'},
- {'n': '冒险', 'v': '/type/31'},
- {'n': '灾难', 'v': '/type/81'},
- {'n': '伦理', 'v': '/type/83'},
- {'n': '其他', 'v': '/type/43'}]},
- {'key': 'area',
- 'name': '地区',
- 'value': [{'n': '全部', 'v': ''},
- {'n': '中国大陆', 'v': '/area/中国大陆'},
- {'n': '中国香港', 'v': '/area/中国香港'},
- {'n': '中国台湾', 'v': '/area/中国台湾'},
- {'n': '美国', 'v': '/area/美国'},
- {'n': '日本', 'v': '/area/日本'},
- {'n': '韩国', 'v': '/area/韩国'},
- {'n': '印度', 'v': '/area/印度'},
- {'n': '泰国', 'v': '/area/泰国'},
- {'n': '其他', 'v': '/area/其他'}]},
- {'key': 'year',
- 'name': '年份',
- 'value': [{'n': '全部', 'v': ''},
- {'n': '2024', 'v': '/year/2024'},
- {'n': '2023', 'v': '/year/2023'},
- {'n': '2022', 'v': '/year/2022'},
- {'n': '2021', 'v': '/year/2021'},
- {'n': '2020', 'v': '/year/2020'},
- {'n': '2019', 'v': '/year/2019'},
- {'n': '2018', 'v': '/year/2018'},
- {'n': '2017', 'v': '/year/2017'},
- {'n': '2016', 'v': '/year/2016'},
- {'n': '2015', 'v': '/year/2015'},
- {'n': '2014', 'v': '/year/2014'},
- {'n': '2013', 'v': '/year/2013'},
- {'n': '2012', 'v': '/year/2012'},
- {'n': '2011', 'v': '/year/2011'},
- {'n': '2010', 'v': '/year/2010'},
- {'n': '2009~2000', 'v': '/year/2009~2000'}]},
- {'key': 'lang',
- 'name': '语言',
- 'value': [{'n': '全部', 'v': ''},
- {'n': '国语', 'v': '/lang/国语'},
- {'n': '英语', 'v': '/lang/英语'},
- {'n': '粤语', 'v': '/lang/粤语'},
- {'n': '韩语', 'v': '/lang/韩语'},
- {'n': '日语', 'v': '/lang/日语'},
- {'n': '其他', 'v': '/lang/其他'}]},
- {'key': 'by',
- 'name': '排序',
- 'value': [{'n': '上映时间', 'v': '/sortType/1/sortOrder/0'},
- {'n': '人气高低', 'v': '/sortType/3/sortOrder/0'},
- {'n': '评分高低', 'v': '/sortType/4/sortOrder/0'}]}
- ],
- '2': [
- {'key': 'type',
- 'name': '类型',
- 'value': [{'n': '全部', 'v': ''},
- {'n': '国产剧', 'v': '/type/14'},
- {'n': '欧美剧', 'v': '/type/15'},
- {'n': '港台剧', 'v': '/type/16'},
- {'n': '日韩剧', 'v': '/type/62'},
- {'n': '其他剧', 'v': '/type/68'}]},
- {'key': 'class',
- 'name': '剧情',
- 'value': [{'n': '全部', 'v': ''},
- {'n': '古装', 'v': '/class/古装'},
- {'n': '战争', 'v': '/class/战争'},
- {'n': '喜剧', 'v': '/class/喜剧'},
- {'n': '家庭', 'v': '/class/家庭'},
- {'n': '犯罪', 'v': '/class/犯罪'},
- {'n': '动作', 'v': '/class/动作'},
- {'n': '奇幻', 'v': '/class/奇幻'},
- {'n': '剧情', 'v': '/class/剧情'},
- {'n': '历史', 'v': '/class/历史'},
- {'n': '短片', 'v': '/class/短片'}]},
- {'key': 'area',
- 'name': '地区',
- 'value': [{'n': '全部', 'v': ''},
- {'n': '中国大陆', 'v': '/area/中国大陆'},
- {'n': '中国香港', 'v': '/area/中国香港'},
- {'n': '中国台湾', 'v': '/area/中国台湾'},
- {'n': '日本', 'v': '/area/日本'},
- {'n': '韩国', 'v': '/area/韩国'},
- {'n': '美国', 'v': '/area/美国'},
- {'n': '泰国', 'v': '/area/泰国'},
- {'n': '其他', 'v': '/area/其他'}]},
- {'key': 'year',
- 'name': '时间',
- 'value': [{'n': '全部', 'v': ''},
- {'n': '2024', 'v': '/year/2024'},
- {'n': '2023', 'v': '/year/2023'},
- {'n': '2022', 'v': '/year/2022'},
- {'n': '2021', 'v': '/year/2021'},
- {'n': '2020', 'v': '/year/2020'},
- {'n': '2019', 'v': '/year/2019'},
- {'n': '2018', 'v': '/year/2018'},
- {'n': '2017', 'v': '/year/2017'},
- {'n': '2016', 'v': '/year/2016'},
- {'n': '2015', 'v': '/year/2015'},
- {'n': '2014', 'v': '/year/2014'},
- {'n': '2013', 'v': '/year/2013'},
- {'n': '2012', 'v': '/year/2012'},
- {'n': '2011', 'v': '/year/2011'},
- {'n': '2010', 'v': '/year/2010'}]},
- {'key': 'lang',
- 'name': '语言',
- 'value': [{'n': '全部', 'v': ''},
- {'n': '普通话', 'v': '/lang/普通话'},
- {'n': '英语', 'v': '/lang/英语'},
- {'n': '粤语', 'v': '/lang/粤语'},
- {'n': '韩语', 'v': '/lang/韩语'},
- {'n': '日语', 'v': '/lang/日语'},
- {'n': '泰语', 'v': '/lang/泰语'},
- {'n': '其他', 'v': '/lang/其他'}, ]},
- {'key': 'by',
- 'name': '排序',
- 'value': [{'n': '最近更新', 'v': '/sortType/1/sortOrder/0'},
- {'n': '添加时间', 'v': '/sortType/2/sortOrder/0'},
- {'n': '人气高低', 'v': '/sortType/3/sortOrder/0'},
- {'n': '评分高低', 'v': '/sortType/4/sortOrder/0'}]}
- ],
- '3': [
- {'key': 'type',
- 'name': '类型',
- 'value': [{'n': '全部', 'v': ''},
- {'n': '国产综艺', 'v': '/type/69'},
- {'n': '港台综艺', 'v': '/type/70'},
- {'n': '日韩综艺', 'v': '/type/72'},
- {'n': '欧美综艺', 'v': '/type/73'}]},
- {'key': 'class',
- 'name': '剧情',
- 'value': [{'n': '全部', 'v': ''},
- {'n': '真人秀', 'v': '/class/真人秀'},
- {'n': '音乐', 'v': '/class/音乐'},
- {'n': '脱口秀', 'v': '/class/脱口秀'}]},
- {'key': 'area',
- 'name': '地区',
- 'value': [{'n': '全部', 'v': ''},
- {'n': '中国大陆', 'v': '/area/中国大陆'},
- {'n': '中国香港', 'v': '/area/中国香港'},
- {'n': '中国台湾', 'v': '/area/中国台湾'},
- {'n': '日本', 'v': '/area/日本'},
- {'n': '韩国', 'v': '/area/韩国'},
- {'n': '美国', 'v': '/area/美国'},
- {'n': '其他', 'v': '/area/其他'}]},
- {'key': 'year',
- 'name': '时间',
- 'value': [{'n': '全部', 'v': ''},
- {'n': '2024', 'v': '/year/2024'},
- {'n': '2023', 'v': '/year/2023'},
- {'n': '2022', 'v': '/year/2022'},
- {'n': '2021', 'v': '/year/2021'},
- {'n': '2020', 'v': '/year/2020'}]},
- {'key': 'lang',
- 'name': '语言',
- 'value': [{'n': '全部', 'v': ''},
- {'n': '国语', 'v': '/lang/国语'},
- {'n': '英语', 'v': '/lang/英语'},
- {'n': '粤语', 'v': '/lang/粤语'},
- {'n': '韩语', 'v': '/lang/韩语'},
- {'n': '日语', 'v': '/lang/日语'},
- {'n': '其他', 'v': '/lang/其他'}, ]},
- {'key': 'by',
- 'name': '排序',
- 'value': [{'n': '最近更新', 'v': '/sortType/1/sortOrder/0'},
- {'n': '添加时间', 'v': '/sortType/2/sortOrder/0'},
- {'n': '人气高低', 'v': '/sortType/3/sortOrder/0'},
- {'n': '评分高低', 'v': '/sortType/4/sortOrder/0'}]}
- ],
- '4': [
- {'key': 'type',
- 'name': '类型',
- 'value': [{'n': '全部', 'v': ''},
- {'n': '国产动漫', 'v': '/type/75'},
- {'n': '日韩动漫', 'v': '/type/76'},
- {'n': '欧美动漫', 'v': '/type/77'}]},
- {'key': 'class',
- 'name': '剧情',
- 'value': [{'n': '全部', 'v': ''},
- {'n': '喜剧', 'v': '/class/喜剧'},
- {'n': '科幻', 'v': '/class/科幻'},
- {'n': '热血', 'v': '/class/热血'},
- {'n': '冒险', 'v': '/class/冒险'},
- {'n': '动作', 'v': '/class/动作'},
- {'n': '运动', 'v': '/class/运动'},
- {'n': '战争', 'v': '/class/战争'},
- {'n': '儿童', 'v': '/class/儿童'}]},
- {'key': 'area',
- 'name': '地区',
- 'value': [{'n': '全部', 'v': ''},
- {'n': '中国大陆', 'v': '/area/中国大陆'},
- {'n': '日本', 'v': '/area/日本'},
- {'n': '美国', 'v': '/area/美国'},
- {'n': '其他', 'v': '/area/其他'}]},
- {'key': 'year',
- 'name': '时间',
- 'value': [{'n': '全部', 'v': ''},
- {'n': '2024', 'v': '/year/2024'},
- {'n': '2023', 'v': '/year/2023'},
- {'n': '2022', 'v': '/year/2022'},
- {'n': '2021', 'v': '/year/2021'},
- {'n': '2020', 'v': '/year/2020'},
- {'n': '2019', 'v': '/year/2019'},
- {'n': '2018', 'v': '/year/2018'},
- {'n': '2017', 'v': '/year/2017'},
- {'n': '2016', 'v': '/year/2016'},
- {'n': '2015', 'v': '/year/2015'},
- {'n': '2014', 'v': '/year/2014'},
- {'n': '2013', 'v': '/year/2013'},
- {'n': '2012', 'v': '/year/2012'},
- {'n': '2011', 'v': '/year/2011'},
- {'n': '2010', 'v': '/year/2010'}]},
- {'key': 'lang',
- 'name': '语言',
- 'value': [{'n': '全部', 'v': ''},
- {'n': '国语', 'v': '/lang/国语'},
- {'n': '英语', 'v': '/lang/英语'},
- {'n': '日语', 'v': '/lang/日语'},
- {'n': '其他', 'v': '/lang/其他'}]},
- {'key': 'by',
- 'name': '排序',
- 'value': [{'n': '最近更新', 'v': '/sortType/1/sortOrder/0'},
- {'n': '添加时间', 'v': '/sortType/2/sortOrder/0'},
- {'n': '人气高低', 'v': '/sortType/3/sortOrder/0'},
- {'n': '评分高低', 'v': '/sortType/4/sortOrder/0'}]}
- ]
- }
- }
- def homeVideoContent(self):
- video_list = []
- t = str(int(time.time() * 1000))
- # t = '1723292093234'
- data = f'key=cb808529bae6b6be45ecfab29a4889bc&t={t}'
- data_md5 = hashlib.md5(data.encode()).hexdigest()
- data_sha1 = hashlib.sha1(data_md5.encode()).hexdigest()
- h = {
- "User-Agent": self.ua,
- 'referer': self.home_url, 't': t, 'sign': data_sha1}
- try:
- res = requests.get(f'{self.home_url}/api/mw-movie/anonymous/home/hotSearch', headers=h)
- data_list = res.json()['data']
- for i in data_list:
- video_list.append(
- {
- 'vod_id': i['vodId'],
- 'vod_name': i['vodName'],
- 'vod_pic': i['vodPic'],
- 'vod_remarks': i['vodVersion'] if i['typeId1'] == 1 else i['vodRemarks']
- }
- )
- except requests.RequestException as e:
- return {
- 'list': [],
- 'parse': 0,
- 'jx': 0
- }
- return {
- 'list': video_list,
- 'parse': 0,
- 'jx': 0
- }
- def categoryContent(self, cid, page, filter, ext):
- t = cid
- _type = ext.get('type') if ext.get('type') else ''
- __class = ext.get('class') if ext.get('class') else ''
- _area = ext.get('area') if ext.get('area') else ''
- _year = ext.get('year') if ext.get('year') else ''
- _lang = ext.get('lang') if ext.get('lang') else ''
- _by = ext.get('by') if ext.get('by') else ''
- video_list = []
- h = {
- "User-Agent": self.ua,
- 'referer': self.home_url,
- }
- try:
- res = requests.get(
- f'{self.home_url}/vod/show/id/{t}{_type}{__class}{_area}{_year}{_lang}{_by}/page/{page}',
- headers=h)
- aa = re.findall(r'\\"list\\":(.*?)}}}]', res.text)
- if not aa:
- return {'list': [], 'parse': 0, 'jx': 0}
- bb = aa[0].replace('\\"', '"')
- data_list = json.loads(bb)
- for i in data_list:
- video_list.append(
- {
- 'vod_id': i['vodId'],
- 'vod_name': i['vodName'],
- 'vod_pic': i['vodPic'],
- 'vod_remarks': i['vodVersion'] if i['typeId1'] == 1 else i['vodRemarks']
- }
- )
- except requests.RequestException as e:
- return {'list': [], 'msg': e}
- return {'list': video_list, 'parse': 0, 'jx': 0}
- def detailContent(self, did):
- ids = did[0]
- video_list = []
- t = str(int(time.time() * 1000))
- # t = '1723292093234'
- data = f'id={ids}&key=cb808529bae6b6be45ecfab29a4889bc&t={t}'
- data_md5 = hashlib.md5(data.encode()).hexdigest()
- data_sha1 = hashlib.sha1(data_md5.encode()).hexdigest()
- h = {
- "User-Agent": self.ua,
- 'referer': self.home_url,
- 't': t, 'sign': data_sha1
- }
- try:
- res = requests.get(f'{self.home_url}/api/mw-movie/anonymous/video/detail?id={ids}', headers=h)
- data = res.json()['data']
- play_list = data['episodeList']
- vod_play_url = []
- for i in play_list:
- name = i['name']
- url = ids + '/' + str(i['nid'])
- vod_play_url.append(name + '$' + url)
- video_list.append(
- {
- 'type_name': data['typeName'],
- 'vod_id': ids,
- 'vod_name': data['vodName'],
- 'vod_remarks': data['vodRemarks'],
- 'vod_year': data['vodYear'],
- 'vod_area': data['vodArea'],
- 'vod_actor': data['vodActor'],
- 'vod_director': data['vodDirector'],
- 'vod_content': data['vodContent'],
- 'vod_play_from': '官方线路',
- 'vod_play_url': '#'.join(vod_play_url)
- }
- )
- except requests.RequestException as e:
- return {'list': [], 'msg': e}
- return {"list": video_list, 'parse': 0, 'jx': 0}
- def searchContent(self, key, quick, page='1'):
- wd = key
- video_list = []
- t = str(int(time.time() * 1000))
- data = f'keyword={wd}&pageNum={page}&pageSize=12&key=cb808529bae6b6be45ecfab29a4889bc&t={t}'
- data_md5 = hashlib.md5(data.encode()).hexdigest()
- data_sha1 = hashlib.sha1(data_md5.encode()).hexdigest()
- h = {
- "User-Agent": self.ua,
- 'referer': self.home_url,
- 't': t, 'sign': data_sha1
- }
- try:
- response = requests.get(
- f'{self.home_url}/api/mw-movie/anonymous/video/searchByWord?keyword={wd}&pageNum={page}&pageSize=12',
- headers=h,
- )
- data_list = response.json()['data']['result']['list']
- for i in data_list:
- video_list.append(
- {
- 'vod_id': i['vodId'],
- 'vod_name': i['vodName'],
- 'vod_pic': i['vodPic'],
- 'vod_remarks': i['vodVersion'] if i['typeId1'] == 1 else i['vodRemarks']
- }
- )
- except requests.RequestException as e:
- return {'list': [], 'msg': e}
- return {'list': video_list, 'parse': 0, 'jx': 0}
- def playerContent(self, flag, pid, vipFlags):
- # https://www.cfkj86.com/api/mw-movie/anonymous/v1/video/episode/url?id=83882&nid=175817
- url = pid
- play_url = 'https://gitee.com/dobebly/my_img/raw/c1977fa6134aefb8e5a34dabd731a4d186c84a4d/x.mp4'
- data = url.split('/')
- _id = data[0]
- _nid = data[1]
- t = str(int(time.time() * 1000))
- # t = '1723292093234'
- data = f'id={_id}&nid={_nid}&key=cb808529bae6b6be45ecfab29a4889bc&t={t}'
- data_md5 = hashlib.md5(data.encode()).hexdigest()
- data_sha1 = hashlib.sha1(data_md5.encode()).hexdigest()
- h = {
- "User-Agent": self.ua,
- 'referer': self.home_url,
- 't': t, 'sign': data_sha1
- }
- h2 = {
- "User-Agent": self.ua,
- }
- try:
- res = requests.get(
- f'{self.home_url}/api/mw-movie/anonymous/v1/video/episode/url?id={_id}&nid={_nid}',
- headers=h)
- play_url = res.json()['data']['playUrl']
- except requests.RequestException as e:
- print(e)
- return {"url": play_url, "header": h2, "parse": 0, "jx": 0}
- return {"url": play_url, "header": h2, "parse": 0, "jx": 0}
- def localProxy(self, params):
- pass
- def destroy(self):
- return '正在Destroy'
|