|
1 | 1 | from base64 import b64decode
|
2 | 2 | from re import compile as re_compile
|
| 3 | +from ..utils import json_loads |
3 | 4 |
|
4 | 5 | from ..networking import AsyncClient
|
5 | 6 | from .common import DirectLink, Hoster
|
6 | 7 |
|
7 | 8 | REDIRECT_PATTERN = re_compile("https?://[^'\"<>]+")
|
8 |
| -EXTRACT_VEO_HLS_PATTERN = re_compile(r"'hls': '(?P<hls>.*)'") |
9 | 9 |
|
| 10 | +EXTRACT_VEO_HLS_PATTERN = re_compile(r"'hls': '(?P<hls>.*)'") |
| 11 | +HIDDEN_JSON_PATTERN = re_compile(r"var a168c='(?P<hidden_json>[^']+)'") |
10 | 12 |
|
11 | 13 | class VOEHoster(Hoster):
|
12 | 14 | async def get_direct_link(self) -> DirectLink:
|
13 | 15 | async with AsyncClient(verify=False) as client:
|
14 |
| - response = await client.get(self.url) |
15 |
| - match = REDIRECT_PATTERN.search(response.text) |
16 |
| - link = match.group() |
| 16 | + redirect_response = await client.get(self.url) |
| 17 | + redirect_match = REDIRECT_PATTERN.search(redirect_response.text) |
| 18 | + redirect_link = redirect_match.group() |
| 19 | + |
| 20 | + response = await client.get(redirect_link) |
17 | 21 |
|
18 |
| - response2 = await client.get(link) |
19 |
| - match2 = EXTRACT_VEO_HLS_PATTERN.search(response2.text) |
20 |
| - link2 = match2.group("hls") |
| 22 | + match = HIDDEN_JSON_PATTERN.search(response.text) |
| 23 | + if match: |
| 24 | + hidden_json = b64decode(match.group("hidden_json")).decode() |
| 25 | + hidden_json = hidden_json[::-1] |
| 26 | + hidden_json = json_loads(hidden_json) |
| 27 | + hidden_json = hidden_json["source"] |
| 28 | + return DirectLink(hidden_json) |
21 | 29 |
|
22 |
| - return DirectLink(b64decode(link2).decode()) |
| 30 | + hls_match = EXTRACT_VEO_HLS_PATTERN.search(response.text) |
| 31 | + hls_link = hls_match.group("hls") |
| 32 | + hls_link = b64decode(hls_link).decode() |
| 33 | + return DirectLink( |
| 34 | + url=hls_link, |
| 35 | + # Requires "host", "origin" or "referer" |
| 36 | + # can be "bypassed" by http get once for players without headers |
| 37 | + headers = {"Referer": "https://nathanfromsubject.com/"} |
| 38 | + ) |
0 commit comments