Skip to content

Commit 7099479

Browse files
Add SpeedFiles hoster
1 parent 1ede825 commit 7099479

File tree

10 files changed

+126
-4
lines changed

10 files changed

+126
-4
lines changed

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,14 @@ List of supported Anime sites
119119

120120
List of supported video hoster.
121121

122-
- [x] Streamtape
123122
- [x] VEO
124123
- [x] Vidoza
125124
- [x] Doodstream
125+
- [x] SpeedFiles
126+
- [x] ~~Streamtape~~
127+
- [ ] Filemoon
128+
- [ ] Luluvdo
129+
- [ ] Vidmoly
126130

127131
## Player
128132

src/gucken/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
import warnings
22
warnings.filterwarnings('ignore', message='Using slow pure-python SequenceMatcher. Install python-Levenshtein to remove this warning')
33

4-
__version__ = "0.2.4"
4+
__version__ = "0.2.5"

src/gucken/hoster/_hosters.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,20 @@
44
from .streamtape import StreamtapeHoster
55
from .veo import VOEHoster
66
from .vidoza import VidozaHoster
7+
from .filemoon import FilemoonHoster
8+
from .luluvdo import LuluvdoHoster
9+
from .speedfiles import SpeedFilesHoster
10+
from .vidmoly import VidmolyHoster
711

812
hoster = TwoWayDict(
913
{
1014
"DS": DoodstreamHoster,
1115
"ST": StreamtapeHoster,
1216
"VEO": VOEHoster,
1317
"VZ": VidozaHoster,
18+
"FM": FilemoonHoster,
19+
"LU": LuluvdoHoster,
20+
"SF": SpeedFilesHoster,
21+
"VM": VidmolyHoster
1422
}
1523
)

src/gucken/hoster/filemoon.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from re import compile as re_compile
2+
3+
from ..networking import AsyncClient
4+
5+
from .common import DirectLink, Hoster
6+
7+
FILEMOON_PATTERN = re_compile("")
8+
9+
# TODO: WIP !!!
10+
class FilemoonHoster(Hoster):
11+
async def get_direct_link(self) -> DirectLink:
12+
return DirectLink("WIP")

src/gucken/hoster/luluvdo.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from re import compile as re_compile
2+
3+
from ..networking import AsyncClient
4+
5+
from .common import DirectLink, Hoster
6+
7+
LULUVODO_PATTERN = re_compile("")
8+
9+
# TODO: WIP !!!
10+
class LuluvdoHoster(Hoster):
11+
async def get_direct_link(self) -> DirectLink:
12+
return DirectLink("WIP")

src/gucken/hoster/speedfiles.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from re import compile as re_compile
2+
from base64 import b64decode
3+
4+
from ..networking import AsyncClient
5+
6+
from .common import DirectLink, Hoster
7+
8+
SPEEDFILES_PATTERN = re_compile("var _0x5opu234 = \"(?P<stuff>.*?)\";")
9+
10+
class SpeedFilesHoster(Hoster):
11+
async def get_direct_link(self) -> DirectLink:
12+
async with AsyncClient(verify=False) as client:
13+
response = await client.get(self.url)
14+
match = SPEEDFILES_PATTERN.search(response.text)
15+
stuff = match.group("stuff")
16+
stuff = b64decode(stuff).decode()
17+
stuff = stuff.swapcase()
18+
stuff = ''.join(reversed(stuff))
19+
stuff = b64decode(stuff).decode()
20+
stuff = ''.join(reversed(stuff))
21+
stuff2 = ""
22+
for i in range(0, len(stuff), 2):
23+
stuff2 += chr(int(stuff[i:i + 2], 16))
24+
stuff3 = ""
25+
for char in stuff2:
26+
stuff3 += chr(ord(char) - 3)
27+
stuff3 = stuff3.swapcase()
28+
stuff3 = ''.join(reversed(stuff3))
29+
stuff3 = b64decode(stuff3).decode()
30+
return DirectLink(stuff3)

src/gucken/hoster/vidmoly.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from re import compile as re_compile
2+
3+
from ..networking import AsyncClient
4+
5+
from .common import DirectLink, Hoster
6+
7+
VIDMOLY_PATTERN = re_compile("")
8+
9+
# TODO: WIP !!!
10+
class VidmolyHoster(Hoster):
11+
async def get_direct_link(self) -> DirectLink:
12+
return DirectLink("WIP")

src/gucken/provider/aniworld.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
from ..hoster.streamtape import StreamtapeHoster
1111
from ..hoster.veo import VOEHoster
1212
from ..hoster.vidoza import VidozaHoster
13+
from ..hoster.filemoon import FilemoonHoster
14+
from ..hoster.luluvdo import LuluvdoHoster
15+
from ..hoster.speedfiles import SpeedFilesHoster
16+
from ..hoster.vidmoly import VidmolyHoster
1317
from .common import Episode, Hoster, Language, Provider, SearchResult, Series
1418
from ..utils import json_loads
1519

@@ -23,6 +27,14 @@ def provider_to_hoster(provider: str, url: str) -> Hoster:
2327
return VidozaHoster(url)
2428
if provider == "Streamtape":
2529
return StreamtapeHoster(url)
30+
if provider == "SpeedFiles":
31+
return SpeedFilesHoster(url)
32+
if provider == "Filemoon":
33+
return FilemoonHoster(url)
34+
if provider == "Luluvdo":
35+
return LuluvdoHoster(url)
36+
if provider == "Vidmoly":
37+
return VidmolyHoster(url)
2638

2739

2840
def lang_img_src_lang_name_to_lang(name: str) -> Language:
@@ -276,6 +288,14 @@ async def get_episodes_from_soup(
276288
hoster.add(VidozaHoster)
277289
if t == "Streamtape":
278290
hoster.add(StreamtapeHoster)
291+
if t == "SpeedFiles":
292+
hoster.add(SpeedFilesHoster)
293+
if t == "Filemoon":
294+
hoster.add(FilemoonHoster)
295+
if t == "Luluvdo":
296+
hoster.add(LuluvdoHoster)
297+
if t == "Vidmoly":
298+
hoster.add(VidmolyHoster)
279299

280300
e_count += 1
281301
title_en = title.find("span").text.strip()

src/gucken/provider/serienstream.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
from ..hoster.streamtape import StreamtapeHoster
1111
from ..hoster.veo import VOEHoster
1212
from ..hoster.vidoza import VidozaHoster
13+
from ..hoster.filemoon import FilemoonHoster
14+
from ..hoster.luluvdo import LuluvdoHoster
15+
from ..hoster.speedfiles import SpeedFilesHoster
16+
from ..hoster.vidmoly import VidmolyHoster
1317
from .common import Episode, Hoster, Language, Provider, SearchResult, Series
1418
from ..utils import json_loads
1519

@@ -32,6 +36,14 @@ def provider_to_hoster(provider: str, url: str) -> Hoster:
3236
return VidozaHoster(url)
3337
if provider == "Streamtape":
3438
return StreamtapeHoster(url)
39+
if provider == "SpeedFiles":
40+
return SpeedFilesHoster(url)
41+
if provider == "Filemoon":
42+
return FilemoonHoster(url)
43+
if provider == "Luluvdo":
44+
return LuluvdoHoster(url)
45+
if provider == "Vidmoly":
46+
return VidmolyHoster(url)
3547

3648

3749
def lang_img_src_lang_name_to_lang(name: str) -> Language:
@@ -286,6 +298,14 @@ async def get_episodes_from_soup(
286298
hoster.add(VidozaHoster)
287299
if t == "Streamtape":
288300
hoster.add(StreamtapeHoster)
301+
if t == "SpeedFiles":
302+
hoster.add(SpeedFilesHoster)
303+
if t == "Filemoon":
304+
hoster.add(FilemoonHoster)
305+
if t == "Luluvdo":
306+
hoster.add(LuluvdoHoster)
307+
if t == "Vidmoly":
308+
hoster.add(VidmolyHoster)
289309

290310
e_count += 1
291311
title_en = title.find("span").text.strip()

src/gucken/resources/default_settings.toml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,14 @@ language = [
1111
"JP_ENSUB"
1212
]
1313
hoster = [
14-
"ST",
1514
"VEO",
1615
"VZ",
17-
"DS"
16+
"DS",
17+
"SF",
18+
"FM",
19+
"LU",
20+
"VM",
21+
"ST"
1822
]
1923
update_checker = true
2024

0 commit comments

Comments
 (0)