]*class=["\'][^"\']*\bhdinfo\b[^"\']*["\'][^>]*>.*?
]*>(.*?)', b)
- if m_qb:
- remark = re.sub(r"(?is)<[^>]+>", "", m_qb.group(1)).strip()
- m_score = re.search(r'(?is)
]*class=["\'][^"\']*\brating\b[^"\']*["\'][^>]*>\s*([^<]+)\s*
', b)
- score = (m_score.group(1).strip() if m_score else "")
- if remark and score and score not in remark:
- remark = f"{remark} {score}"
- elif not remark:
- remark = score
-
- vods.append({"vod_id": mid, "vod_name": name, "vod_pic": pic, "vod_remarks": remark})
-
- seen = set()
- unique = []
- for v in vods:
- if v["vod_id"] in seen:
- continue
- seen.add(v["vod_id"])
- unique.append(v)
- return unique
-
- def homeContent(self, filter):
- result = {"class": [], "list": []}
- for name, tid, _ in self._class_map:
- result["class"].append({"type_name": name, "type_id": tid})
-
- if self._use_api:
- return result
-
- html = self._fetch_text(self.host + "/")
- result["list"] = self._parse_vod_list(html)[:24]
- return result
-
- def homeVideoContent(self):
- if self._use_api:
- return {}
- html = self._fetch_text(self.host + "/")
- vods = self._parse_vod_list(html)[:24]
- if not vods:
- vods = [self._debug_item("home")]
- return {"list": vods}
-
- def categoryContent(self, tid, pg, filter, extend):
- pg = int(pg or 1)
- result = {"list": [], "page": pg, "pagecount": 999, "limit": 24, "total": 0}
-
- if self._use_api:
- return result
-
- tid = self._tid_map.get(tid, tid)
- if tid.startswith("http"):
- base = tid
- else:
- base = self._abs(tid)
-
- if pg > 1:
- if base.endswith("/"):
- url = base + f"page/{pg}"
- else:
- url = base + f"/page/{pg}"
- else:
- url = base
-
- html = self._fetch_text(url)
- result["list"] = self._parse_vod_list(html)
- if not result["list"]:
- result["list"] = [self._debug_item("cate")]
- result["pagecount"] = self._parse_pagecount(html, pg)
- result["total"] = result["pagecount"] * result["limit"]
- return result
-
- def detailContent(self, ids):
- if not ids or not ids[0]:
- return {"list": []}
- vid = ids[0]
- if isinstance(vid, str) and vid.startswith("debug@"):
- last = self._last or {}
- content = json.dumps(last, ensure_ascii=False)
- play_url = last.get("url") or ""
- play_url = play_url if isinstance(play_url, str) else ""
- play_from = "DEBUG"
- play = f'请求URL${play_url}' if play_url else ""
- return {
- "list": [
- {
- "vod_id": vid,
- "vod_name": "DEBUG",
- "vod_pic": "",
- "vod_remarks": "",
- "vod_year": "",
- "type_name": "",
- "vod_content": content,
- "vod_actor": "",
- "vod_director": "",
- "vod_play_from": play_from,
- "vod_play_url": play,
- }
- ]
- }
- if vid.startswith("http"):
- url = vid
- else:
- url = f"{self.host}/movie/{vid}.html"
-
- html = self._fetch_text(url)
- name = ""
- m_title = re.search(r"(?is)
]*>\s*([^<]+)\s*
", html or "")
- if m_title:
- name = m_title.group(1).strip()
-
- pic = ""
- m_pic = re.search(r'(?is)
]*class=["\'][^"\']*\bdyimg\b[^"\']*["\'][^>]*>[\s\S]*?
![]()
]*(?:data-original|data-src|data-lazy-src|src)=["\']([^"\']+)["\']', html or "")
- if not m_pic:
- m_pic = re.search(r'(?is)
![]()
]*(?:data-original|data-src|data-lazy-src|src)=["\']([^"\']+)["\']', html or "")
- if m_pic:
- pic = m_pic.group(1).strip()
-
- desc = ""
- m_desc = re.search(r'(?is)
]*class=["\'][^"\']*\byp_context\b[^"\']*["\'][^>]*>\s*([\s\S]*?)\s*
', html or "")
- if m_desc:
- desc = re.sub(r"(?is)<[^>]+>", "", m_desc.group(1)).strip()
-
- actor = ""
- director = ""
- m_actor = re.search(r"(?is)主演:\s*([^<\n\r]+)", html or "")
- if m_actor:
- actor = m_actor.group(1).strip()
- m_director = re.search(r"(?is)导演:\s*([^<\n\r]+)", html or "")
- if m_director:
- director = m_director.group(1).strip()
-
- play_items = []
- for m in re.finditer(r'(?is)
]*href=["\']([^"\']*/v_play/[^"\']+)["\'][^>]*>\s*([^<]+)\s*', html or ""):
- href = self._abs(m.group(1).strip())
- t = m.group(2).strip()
- if t and href:
- play_items.append(f"{t}${href}")
-
- if not play_items:
- play_items.append(f"播放${url}")
-
- return {
- "list": [
- {
- "vod_id": vid,
- "vod_name": name or vid,
- "vod_pic": pic,
- "vod_remarks": "",
- "vod_year": "",
- "type_name": "",
- "vod_content": desc,
- "vod_actor": actor,
- "vod_director": director,
- "vod_play_from": "厂长资源",
- "vod_play_url": "#".join(play_items),
- }
- ]
- }
-
- def searchContent(self, key, quick, pg="1"):
- if not key:
- return {"list": []}
- if self._use_api:
- return {"list": []}
- pg = str(pg or "1")
- url = f"{self.host}/boss1O1?q={quote(key)}"
- if pg != "1":
- url += f"&page={quote(pg)}"
- html = self._fetch_text(url)
- return {"list": self._parse_vod_list(html)}
-
- def playerContent(self, flag, id, vipFlags):
- h = {"User-Agent": self.headers.get("User-Agent", ""), "Referer": self.host + "/"}
-
- if not id:
- return {"parse": 1, "url": "", "header": h, "playUrl": ""}
-
- if isinstance(id, str) and (".m3u8" in id or ".mp4" in id) and id.startswith("http"):
- return {"parse": 0, "url": id, "header": h, "playUrl": ""}
-
- play_url = id if id.startswith("http") else self._abs(id)
- if "/v_play/" not in play_url:
- return {"parse": 1, "url": play_url, "header": h, "playUrl": ""}
-
- html = self._fetch_text(play_url)
- m_iframe = re.search(r'(?is)