123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- # -*- coding: utf-8 -*-
- # @Author : Doubebly
- # @Time : 2025/1/21 23:07
- import hashlib
- import re
- import sys
- import time
- import requests
- sys.path.append('..')
- from base.spider import Spider
- class Spider(Spider):
- def getName(self):
- return "JieYingShi"
- def init(self, extend):
- self.home_url = 'https://www.hkybqufgh.com'
- self.error_url = 'https://json.doube.eu.org/error/4gtv/index.m3u8'
- self.headers = {
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.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': '4',
- 'type_name': '动漫'
- },
- {
- 'type_id': '3',
- 'type_name': '综艺'
- }
- ]}
- def homeVideoContent(self):
- a = self.get_data(self.home_url)
- return {'list': a, 'parse': 0, 'jx': 0}
- def categoryContent(self, cid, page, filter, ext):
- url = self.home_url + f'/vod/show/id/{cid}/page/{page}'
- data = self.get_data(url)
- return {'list': data, 'parse': 0, 'jx': 0}
- def detailContent(self, did):
- ids = did[0]
- data = self.get_detail_data(ids)
- return {"list": data, 'parse': 0, 'jx': 0}
- def searchContent(self, key, quick, page='1'):
- if int(page) > 1:
- return {'list': [], 'parse': 0, 'jx': 0}
- url = self.home_url + f'/vod/search/{key}'
- data = self.get_data(url)
- return {'list': data, 'parse': 0, 'jx': 0}
- def playerContent(self, flag, pid, vipFlags):
- url = self.get_play_data(pid)
- return {"url": url, "header": self.headers, "parse": 1, "jx": 0}
- def localProxy(self, params):
- pass
- def destroy(self):
- return '正在Destroy'
- def get_data(self, url):
- data = []
- try:
- res = requests.get(url, headers=self.headers)
- if res.status_code != 200:
- return data
- vod_id_s = re.findall(r'\\"vodId\\":(.*?),', res.text)
- vod_name_s = re.findall(r'\\"vodName\\":\\"(.*?)\\"', res.text)
- vod_pic_s = re.findall(r'\\"vodPic\\":\\"(.*?)\\"', res.text)
- vod_remarks_s = re.findall(r'\\"vodRemarks\\":\\"(.*?)\\"', res.text)
- for i in range(len(vod_id_s)):
- data.append(
- {
- 'vod_id': vod_id_s[i],
- 'vod_name': vod_name_s[i],
- 'vod_pic': vod_pic_s[i],
- 'vod_remarks': vod_remarks_s[i],
- }
- )
- except requests.RequestException as e:
- print(e)
- return data
- def get_detail_data(self, ids):
- url = self.home_url + f'/api/mw-movie/anonymous/video/detail?id={ids}'
- t = str(int(time.time() * 1000))
- headers = self.get_headers(t, f'id={ids}&key=cb808529bae6b6be45ecfab29a4889bc&t={t}')
- try:
- res = requests.get(url, headers=headers)
- if res.status_code != 200:
- return []
- i = res.json()['data']
- urls = []
- for ii in res.json()['data']['episodeList']:
- name = ii['name']
- url = ii['nid']
- urls.append(f'{name}${ids}-{url}')
- data = {
- 'type_name': i['vodClass'],
- 'vod_id': i['vodId'],
- 'vod_name': i['vodName'],
- 'vod_remarks': i['vodRemarks'],
- 'vod_year': i['vodYear'],
- 'vod_area': i['vodArea'],
- 'vod_actor': i['vodActor'],
- 'vod_director': i['vodDirector'],
- 'vod_content': i['vodContent'],
- 'vod_play_from': '默认',
- 'vod_play_url': '#'.join(urls),
- }
- return [data]
- except requests.RequestException as e:
- print(e)
- return []
- def get_play_data(self, play):
- info = play.split('-')
- _id = info[0]
- _pid = info[1]
- url = self.home_url + f'/api/mw-movie/anonymous/v1/video/episode/url?id={_id}&nid={_pid}'
- t = str(int(time.time() * 1000))
- headers = self.get_headers(t, f'id={_id}&nid={_pid}&key=cb808529bae6b6be45ecfab29a4889bc&t={t}')
- try:
- res = requests.get(url, headers=headers)
- if res.status_code != 200:
- return self.error_url
- return res.json()['data']['playUrl']
- except requests.RequestException as e:
- print(e)
- return self.error_url
- @staticmethod
- def get_headers(t, e):
- sign = hashlib.sha1(hashlib.md5(e.encode()).hexdigest().encode()).hexdigest()
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
- 'Accept': 'application/json, text/plain, */*',
- 'sign': sign,
- 'sec-ch-ua': '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
- 't': t,
- 'referer': 'https://www.hkybqufgh.com/',
- }
- return headers
- if __name__ == '__main__':
- pass
|