You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

想看影视.py 5.8 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. # -*- coding: utf-8 -*-
  2. # by @嗷呜
  3. import re
  4. import sys
  5. from Crypto.Hash import MD5
  6. sys.path.append("..")
  7. import json
  8. import time
  9. from pyquery import PyQuery as pq
  10. from base.spider import Spider
  11. class Spider(Spider):
  12. def init(self, extend=""):
  13. pass
  14. def getName(self):
  15. pass
  16. def isVideoFormat(self, url):
  17. pass
  18. def manualVideoCheck(self):
  19. pass
  20. def action(self, action):
  21. pass
  22. def destroy(self):
  23. pass
  24. host = 'https://www.lreeok.vip'
  25. headers = {
  26. 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36',
  27. 'Accept': 'application/json, text/javascript, */*; q=0.01',
  28. 'sec-ch-ua-platform': '"macOS"',
  29. 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"',
  30. 'Origin': host,
  31. 'Referer': f"{host}/",
  32. }
  33. def homeContent(self, filter):
  34. data = self.getpq(self.fetch(self.host, headers=self.headers).text)
  35. result = {}
  36. classes = []
  37. for k in data('.head-more.box a').items():
  38. i = k.attr('href')
  39. if i and '/vod' in i:
  40. classes.append({
  41. 'type_name': k.text(),
  42. 'type_id': re.search(r'\d+', i).group(0)
  43. })
  44. result['class'] = classes
  45. result['list'] = self.getlist(data('.border-box.diy-center .public-list-div'))
  46. return result
  47. def homeVideoContent(self):
  48. pass
  49. def categoryContent(self, tid, pg, filter, extend):
  50. body = {'type': tid, 'class': '', 'area': '', 'lang': '', 'version': '', 'state': '', 'letter': '', 'page': pg}
  51. data = self.post(f"{self.host}/index.php/api/vod", headers=self.headers, data=self.getbody(body)).json()
  52. result = {}
  53. result['list'] = data['list']
  54. result['page'] = pg
  55. result['pagecount'] = 9999
  56. result['limit'] = 90
  57. result['total'] = 999999
  58. return result
  59. def detailContent(self, ids):
  60. data = self.getpq(self.fetch(f"{self.host}/voddetail/{ids[0]}.html", headers=self.headers).text)
  61. v = data('.detail-info.lightSpeedIn .slide-info')
  62. vod = {
  63. 'vod_year': v.eq(-1).text(),
  64. 'vod_remarks': v.eq(0).text(),
  65. 'vod_actor': v.eq(3).text(),
  66. 'vod_director': v.eq(2).text(),
  67. 'vod_content': data('.switch-box #height_limit').text()
  68. }
  69. np = data('.anthology.wow.fadeInUp')
  70. ndata = np('.anthology-tab .swiper-wrapper .swiper-slide')
  71. pdata = np('.anthology-list .anthology-list-box ul')
  72. play, names = [], []
  73. for i in range(len(ndata)):
  74. n = ndata.eq(i)('a')
  75. n('span').remove()
  76. names.append(n.text())
  77. vs = []
  78. for v in pdata.eq(i)('li').items():
  79. vs.append(f"{v.text()}${v('a').attr('href')}")
  80. play.append('#'.join(vs))
  81. vod["vod_play_from"] = "$$$".join(names)
  82. vod["vod_play_url"] = "$$$".join(play)
  83. result = {"list": [vod]}
  84. return result
  85. def searchContent(self, key, quick, pg="1"):
  86. # data = self.getpq(self.fetch(f"{self.host}/vodsearch/{key}----------{pg}---.html", headers=self.headers).text)
  87. # return {'list': self.getlist(data('.row-right .search-box .public-list-bj')), 'page': pg}
  88. data = self.fetch(
  89. f"{self.host}/index.php/ajax/suggest?mid={pg}&wd={key}&limit=999&timestamp={int(time.time() * 1000)}",
  90. headers=self.headers).json()
  91. videos = []
  92. for i in data['list']:
  93. videos.append({
  94. 'vod_id': i['id'],
  95. 'vod_name': i['name'],
  96. 'vod_pic': i['pic']
  97. })
  98. return {'list': videos, 'page': pg}
  99. def playerContent(self, flag, id, vipFlags):
  100. h, p = {"User-Agent": "okhttp/3.14.9"}, 1
  101. url = f"{self.host}{id}"
  102. data = self.getpq(self.fetch(url, headers=self.headers).text)
  103. try:
  104. jstr = data('.player .player-left script').eq(0).text()
  105. jsdata = json.loads(jstr.split('aaa=')[-1])
  106. body = {'url': jsdata['url']}
  107. if not re.search(r'\.m3u8|\.mp4', body['url']):
  108. data = self.post(f"{self.host}/okplay/api_config.php", headers=self.headers,
  109. data=self.getbody(body)).json()
  110. url = data.get('url') or data.get('data', {}).get('url')
  111. p = 0
  112. except Exception as e:
  113. print('错误信息:', e)
  114. pass
  115. result = {}
  116. result["parse"] = p
  117. result["url"] = url
  118. result["header"] = h
  119. return result
  120. def localProxy(self, param):
  121. pass
  122. def getbody(self, params):
  123. t = int(time.time())
  124. h = MD5.new()
  125. h.update(f"DS{t}DCC147D11943AF75".encode('utf-8'))
  126. key = h.hexdigest()
  127. params.update({'time': t, 'key': key})
  128. return params
  129. def getlist(self, data):
  130. videos = []
  131. for i in data.items():
  132. id = i('a').attr('href')
  133. if id:
  134. id = re.search(r'\d+', id).group(0)
  135. img = i('img').attr('data-src')
  136. if img and 'url=' in img: img = f'{self.host}{img}'
  137. videos.append({
  138. 'vod_id': id,
  139. 'vod_name': i('img').attr('alt'),
  140. 'vod_pic': img,
  141. 'vod_remarks': i('.public-prt').text() or i('.public-list-prb').text()
  142. })
  143. return videos
  144. def getpq(self, data):
  145. try:
  146. return pq(data)
  147. except Exception as e:
  148. print(f"{str(e)}")
  149. return pq(data.encode('utf-8'))

No Description