StreamingCommunity 3.2.8__py3-none-any.whl → 3.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of StreamingCommunity might be problematic. Click here for more details.
- StreamingCommunity/Api/Player/Helper/Vixcloud/util.py +2 -1
- StreamingCommunity/Api/Player/hdplayer.py +2 -2
- StreamingCommunity/Api/Player/sweetpixel.py +5 -8
- StreamingCommunity/Api/Site/altadefinizione/__init__.py +32 -15
- StreamingCommunity/Api/Site/altadefinizione/film.py +10 -8
- StreamingCommunity/Api/Site/altadefinizione/series.py +9 -7
- StreamingCommunity/Api/Site/altadefinizione/site.py +1 -1
- StreamingCommunity/Api/Site/animeunity/__init__.py +31 -15
- StreamingCommunity/Api/Site/animeunity/serie.py +2 -2
- StreamingCommunity/Api/Site/animeworld/__init__.py +33 -7
- StreamingCommunity/Api/Site/animeworld/site.py +3 -5
- StreamingCommunity/Api/Site/animeworld/util/ScrapeSerie.py +8 -10
- StreamingCommunity/Api/Site/crunchyroll/__init__.py +44 -12
- StreamingCommunity/Api/Site/crunchyroll/film.py +9 -7
- StreamingCommunity/Api/Site/crunchyroll/series.py +9 -7
- StreamingCommunity/Api/Site/crunchyroll/site.py +16 -1
- StreamingCommunity/Api/Site/guardaserie/__init__.py +36 -10
- StreamingCommunity/Api/Site/guardaserie/series.py +8 -6
- StreamingCommunity/Api/Site/guardaserie/site.py +0 -3
- StreamingCommunity/Api/Site/guardaserie/util/ScrapeSerie.py +1 -2
- StreamingCommunity/Api/Site/mediasetinfinity/__init__.py +37 -12
- StreamingCommunity/Api/Site/mediasetinfinity/film.py +10 -16
- StreamingCommunity/Api/Site/mediasetinfinity/series.py +12 -18
- StreamingCommunity/Api/Site/mediasetinfinity/site.py +18 -3
- StreamingCommunity/Api/Site/mediasetinfinity/util/ScrapeSerie.py +214 -180
- StreamingCommunity/Api/Site/mediasetinfinity/util/get_license.py +2 -31
- StreamingCommunity/Api/Site/raiplay/__init__.py +47 -12
- StreamingCommunity/Api/Site/raiplay/film.py +42 -10
- StreamingCommunity/Api/Site/raiplay/series.py +53 -11
- StreamingCommunity/Api/Site/raiplay/site.py +4 -1
- StreamingCommunity/Api/Site/raiplay/util/ScrapeSerie.py +2 -1
- StreamingCommunity/Api/Site/raiplay/util/get_license.py +40 -0
- StreamingCommunity/Api/Site/streamingcommunity/__init__.py +5 -8
- StreamingCommunity/Api/Site/streamingcommunity/film.py +7 -5
- StreamingCommunity/Api/Site/streamingcommunity/series.py +9 -7
- StreamingCommunity/Api/Site/streamingcommunity/site.py +8 -3
- StreamingCommunity/Api/Site/streamingcommunity/util/ScrapeSerie.py +5 -2
- StreamingCommunity/Api/Site/streamingwatch/__init__.py +43 -9
- StreamingCommunity/Api/Site/streamingwatch/film.py +7 -5
- StreamingCommunity/Api/Site/streamingwatch/series.py +8 -6
- StreamingCommunity/Api/Site/streamingwatch/site.py +3 -1
- StreamingCommunity/Api/Site/streamingwatch/util/ScrapeSerie.py +3 -3
- StreamingCommunity/Api/Template/Util/__init__.py +10 -1
- StreamingCommunity/Api/Template/Util/manage_ep.py +4 -4
- StreamingCommunity/Api/Template/__init__.py +5 -1
- StreamingCommunity/Api/Template/site.py +10 -6
- StreamingCommunity/Lib/Downloader/DASH/cdm_helpher.py +13 -12
- StreamingCommunity/Lib/Downloader/DASH/decrypt.py +1 -1
- StreamingCommunity/Lib/Downloader/DASH/downloader.py +24 -22
- StreamingCommunity/Lib/Downloader/DASH/parser.py +1 -1
- StreamingCommunity/Lib/Downloader/DASH/segments.py +4 -3
- StreamingCommunity/Lib/Downloader/HLS/downloader.py +11 -9
- StreamingCommunity/Lib/Downloader/HLS/segments.py +4 -9
- StreamingCommunity/Lib/Downloader/MP4/downloader.py +25 -6
- StreamingCommunity/Lib/Downloader/TOR/downloader.py +3 -5
- StreamingCommunity/Lib/Downloader/__init__.py +9 -1
- StreamingCommunity/Lib/FFmpeg/__init__.py +10 -1
- StreamingCommunity/Lib/FFmpeg/command.py +4 -6
- StreamingCommunity/Lib/FFmpeg/util.py +1 -1
- StreamingCommunity/Lib/M3U8/__init__.py +9 -1
- StreamingCommunity/Lib/M3U8/decryptor.py +8 -4
- StreamingCommunity/Lib/M3U8/estimator.py +0 -6
- StreamingCommunity/Lib/M3U8/parser.py +1 -1
- StreamingCommunity/Lib/M3U8/url_fixer.py +1 -1
- StreamingCommunity/Lib/TMBD/__init__.py +6 -1
- StreamingCommunity/TelegramHelp/config.json +1 -5
- StreamingCommunity/TelegramHelp/telegram_bot.py +9 -10
- StreamingCommunity/Upload/update.py +2 -2
- StreamingCommunity/Upload/version.py +1 -1
- StreamingCommunity/Util/config_json.py +139 -59
- StreamingCommunity/Util/http_client.py +201 -0
- StreamingCommunity/Util/message.py +1 -1
- StreamingCommunity/Util/os.py +8 -5
- StreamingCommunity/Util/table.py +3 -3
- StreamingCommunity/__init__.py +9 -1
- StreamingCommunity/run.py +394 -258
- {streamingcommunity-3.2.8.dist-info → streamingcommunity-3.3.0.dist-info}/METADATA +147 -45
- streamingcommunity-3.3.0.dist-info/RECORD +110 -0
- StreamingCommunity/Api/Site/cb01new/__init__.py +0 -72
- StreamingCommunity/Api/Site/cb01new/film.py +0 -62
- StreamingCommunity/Api/Site/cb01new/site.py +0 -78
- streamingcommunity-3.2.8.dist-info/RECORD +0 -111
- {streamingcommunity-3.2.8.dist-info → streamingcommunity-3.3.0.dist-info}/WHEEL +0 -0
- {streamingcommunity-3.2.8.dist-info → streamingcommunity-3.3.0.dist-info}/entry_points.txt +0 -0
- {streamingcommunity-3.2.8.dist-info → streamingcommunity-3.3.0.dist-info}/licenses/LICENSE +0 -0
- {streamingcommunity-3.2.8.dist-info → streamingcommunity-3.3.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: StreamingCommunity
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.3.0
|
|
4
4
|
Home-page: https://github.com/Lovi-0/StreamingCommunity
|
|
5
5
|
Author: Lovi-0
|
|
6
6
|
Project-URL: Bug Reports, https://github.com/Lovi-0/StreamingCommunity/issues
|
|
@@ -38,14 +38,10 @@ Dynamic: requires-python
|
|
|
38
38
|
<div align="center">
|
|
39
39
|
|
|
40
40
|
## 📊 Project Status & Info
|
|
41
|
-
|
|
42
41
|
[](https://pypi.org/project/streamingcommunity)
|
|
43
|
-
[](https://pypi.org/project/streamingcommunity)
|
|
44
|
-
[](https://github.com/Arrowar/StreamingCommunity/blob/main/LICENSE)
|
|
45
|
-
|
|
46
|
-
[](https://github.com/Arrowar/StreamingCommunity)
|
|
47
42
|
[](https://github.com/Arrowar/StreamingCommunity/commits)
|
|
48
43
|
[](https://github.com/Arrowar/StreamingCommunity/issues)
|
|
44
|
+
[](https://github.com/Arrowar/StreamingCommunity/blob/main/LICENSE)
|
|
49
45
|
|
|
50
46
|
## 💝 Support the Project
|
|
51
47
|
|
|
@@ -97,6 +93,7 @@ Dynamic: requires-python
|
|
|
97
93
|
- 🔧 [Manual domain configuration](#update-domains)
|
|
98
94
|
- 🐳 [Docker](#docker)
|
|
99
95
|
- 📝 [Telegram Usage](#telegram-usage)
|
|
96
|
+
- 🧩 [Hook/Plugin System](#hookplugin-system)
|
|
100
97
|
</details>
|
|
101
98
|
|
|
102
99
|
<details>
|
|
@@ -216,6 +213,29 @@ client.start_download()
|
|
|
216
213
|
See [Torrent example](./Test/Download/TOR.py) for complete usage.
|
|
217
214
|
</details>
|
|
218
215
|
|
|
216
|
+
<details>
|
|
217
|
+
<summary>🎞️ DASH Downloader</summary>
|
|
218
|
+
|
|
219
|
+
```python
|
|
220
|
+
license_url = "https://example.com/stream.mpd"
|
|
221
|
+
mpd_url = "https://example.com/get_license"
|
|
222
|
+
|
|
223
|
+
dash_process = DASH_Downloader(
|
|
224
|
+
cdm_device=get_wvd_path(),
|
|
225
|
+
license_url=license_url,
|
|
226
|
+
mpd_url=mpd_url,
|
|
227
|
+
output_path="output.mp4",
|
|
228
|
+
)
|
|
229
|
+
dash_process.parse_manifest()
|
|
230
|
+
|
|
231
|
+
if dash_process.download_and_decrypt():
|
|
232
|
+
dash_process.finalize_output()
|
|
233
|
+
|
|
234
|
+
dash_process.get_status()
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
</details>
|
|
238
|
+
|
|
219
239
|
## Binary Location
|
|
220
240
|
|
|
221
241
|
<details>
|
|
@@ -346,40 +366,113 @@ python3 update.py
|
|
|
346
366
|
<details>
|
|
347
367
|
<summary>🌐 Domain Configuration Methods</summary>
|
|
348
368
|
|
|
349
|
-
There are two ways to
|
|
369
|
+
There are two ways to manage the domains for the supported websites:
|
|
350
370
|
|
|
351
|
-
### 1.
|
|
371
|
+
### 1. Online Domain Fetching (Recommended)
|
|
352
372
|
|
|
353
|
-
|
|
373
|
+
Set `fetch_domain_online` to `true` in your `config.json`:
|
|
354
374
|
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
{
|
|
358
|
-
"
|
|
359
|
-
"domain": "si",
|
|
360
|
-
"full_url": "https://altadefinizione.si/"
|
|
361
|
-
},
|
|
362
|
-
...
|
|
375
|
+
```json
|
|
376
|
+
{
|
|
377
|
+
"DEFAULT": {
|
|
378
|
+
"fetch_domain_online": true
|
|
363
379
|
}
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
380
|
+
}
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
This will:
|
|
384
|
+
- Download the latest domains from the GitHub repository
|
|
385
|
+
- Automatically save them to a local `domains.json` file
|
|
386
|
+
- Ensure you always have the most up-to-date streaming site domains
|
|
387
|
+
|
|
388
|
+
### 2. Local Domain Configuration
|
|
389
|
+
|
|
390
|
+
Set `fetch_domain_online` to `false` to use a local configuration:
|
|
391
|
+
|
|
392
|
+
```json
|
|
393
|
+
{
|
|
394
|
+
"DEFAULT": {
|
|
395
|
+
"fetch_domain_online": false
|
|
372
396
|
}
|
|
373
|
-
|
|
397
|
+
}
|
|
398
|
+
```
|
|
374
399
|
|
|
375
|
-
|
|
400
|
+
Then create a `domains.json` file in the root directory with your domain configuration:
|
|
376
401
|
|
|
377
|
-
|
|
402
|
+
```json
|
|
403
|
+
{
|
|
404
|
+
"altadefinizione": {
|
|
405
|
+
"domain": "si",
|
|
406
|
+
"full_url": "https://altadefinizione.si/"
|
|
407
|
+
},
|
|
408
|
+
"streamingcommunity": {
|
|
409
|
+
"domain": "best",
|
|
410
|
+
"full_url": "https://streamingcommunity.best/"
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
```
|
|
378
414
|
|
|
379
|
-
|
|
415
|
+
### 3. Automatic Fallback
|
|
380
416
|
|
|
381
|
-
|
|
382
|
-
|
|
417
|
+
If online fetching fails, the script will automatically attempt to use the local `domains.json` file as a fallback, ensuring maximum reliability.
|
|
418
|
+
|
|
419
|
+
#### 💡 Adding a New Site
|
|
420
|
+
If you want to request a new site to be added to the repository, message us on the Discord server!
|
|
421
|
+
|
|
422
|
+
</details>
|
|
423
|
+
|
|
424
|
+
## Hook/Plugin System
|
|
425
|
+
|
|
426
|
+
<details>
|
|
427
|
+
<summary>🧩 Run custom scripts before/after the main execution</summary>
|
|
428
|
+
|
|
429
|
+
Define pre/post hooks in `config.json` under the `HOOKS` section. Supported types:
|
|
430
|
+
|
|
431
|
+
- **python**: runs `script.py` with the current Python interpreter
|
|
432
|
+
- **bash/sh**: runs via `bash`/`sh` on macOS/Linux
|
|
433
|
+
- **bat/cmd**: runs via `cmd /c` on Windows
|
|
434
|
+
- Inline **command**: use `command` instead of `path`
|
|
435
|
+
|
|
436
|
+
Sample configuration:
|
|
437
|
+
|
|
438
|
+
```json
|
|
439
|
+
{
|
|
440
|
+
"HOOKS": {
|
|
441
|
+
"pre_run": [
|
|
442
|
+
{
|
|
443
|
+
"name": "prepare-env",
|
|
444
|
+
"type": "python",
|
|
445
|
+
"path": "scripts/prepare.py",
|
|
446
|
+
"args": ["--clean"],
|
|
447
|
+
"env": {"MY_FLAG": "1"},
|
|
448
|
+
"cwd": "~",
|
|
449
|
+
"os": ["linux", "darwin"],
|
|
450
|
+
"timeout": 60,
|
|
451
|
+
"enabled": true,
|
|
452
|
+
"continue_on_error": true
|
|
453
|
+
}
|
|
454
|
+
],
|
|
455
|
+
"post_run": [
|
|
456
|
+
{
|
|
457
|
+
"name": "notify",
|
|
458
|
+
"type": "bash",
|
|
459
|
+
"command": "echo 'Download completed'"
|
|
460
|
+
}
|
|
461
|
+
]
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
Notes:
|
|
467
|
+
|
|
468
|
+
- **os**: optional OS filter (`windows`, `darwin` (`darwin` is used for MacOS), `linux`).
|
|
469
|
+
- **args**: list of arguments passed to the script.
|
|
470
|
+
- **env**: additional environment variables.
|
|
471
|
+
- **cwd**: working directory for the script; supports `~` and environment variables.
|
|
472
|
+
- **continue_on_error**: if `false`, the app stops when the hook fails.
|
|
473
|
+
- **timeout**: in seconds; when exceeded the hook fails.
|
|
474
|
+
|
|
475
|
+
Hooks are executed automatically by `run.py` before (`pre_run`) and after (`post_run`) the main execution.
|
|
383
476
|
|
|
384
477
|
</details>
|
|
385
478
|
|
|
@@ -399,12 +492,9 @@ You can change some behaviors by tweaking the configuration file. The configurat
|
|
|
399
492
|
"DEFAULT": {
|
|
400
493
|
"debug": false,
|
|
401
494
|
"show_message": true,
|
|
402
|
-
"clean_console": true,
|
|
403
495
|
"show_trending": true,
|
|
404
|
-
"
|
|
405
|
-
"not_close": false,
|
|
496
|
+
"fetch_domain_online": true,
|
|
406
497
|
"telegram_bot": false,
|
|
407
|
-
"download_site_data": false,
|
|
408
498
|
"validate_github_config": false
|
|
409
499
|
}
|
|
410
500
|
}
|
|
@@ -412,13 +502,9 @@ You can change some behaviors by tweaking the configuration file. The configurat
|
|
|
412
502
|
|
|
413
503
|
- `debug`: Enables debug logging
|
|
414
504
|
- `show_message`: Displays informational messages
|
|
415
|
-
- `clean_console`: Clears the console between operations
|
|
416
505
|
- `show_trending`: Shows trending content
|
|
417
|
-
- `
|
|
418
|
-
- `not_close`: If set to true, keeps the program running after download is complete
|
|
419
|
-
* Can be changed from terminal with `--not_close true/false`
|
|
506
|
+
- `fetch_domain_online`: If true, downloads domains from GitHub repository and saves to local file; if false, uses existing local domains.json file
|
|
420
507
|
- `telegram_bot`: Enables Telegram bot integration
|
|
421
|
-
- `download_site_data`: If set to false, disables automatic site data download
|
|
422
508
|
- `validate_github_config`: If set to false, disables validation and updating of configuration from GitHub
|
|
423
509
|
</details>
|
|
424
510
|
|
|
@@ -630,8 +716,7 @@ Note: Requires updated drivers and FFmpeg with hardware acceleration support.
|
|
|
630
716
|
```json
|
|
631
717
|
{
|
|
632
718
|
"M3U8_PARSER": {
|
|
633
|
-
"force_resolution": "Best"
|
|
634
|
-
"get_only_link": false
|
|
719
|
+
"force_resolution": "Best"
|
|
635
720
|
}
|
|
636
721
|
}
|
|
637
722
|
```
|
|
@@ -651,8 +736,6 @@ Note: Requires updated drivers and FFmpeg with hardware acceleration support.
|
|
|
651
736
|
- 240p (320x240)
|
|
652
737
|
- 144p (256x144)
|
|
653
738
|
|
|
654
|
-
#### Link Options
|
|
655
|
-
- `get_only_link`: Return M3U8 playlist/index URL instead of downloading
|
|
656
739
|
</details>
|
|
657
740
|
|
|
658
741
|
# Global Search
|
|
@@ -700,6 +783,18 @@ The Global Search can be configured from the command line:
|
|
|
700
783
|
# Examples of terminal usage
|
|
701
784
|
|
|
702
785
|
```bash
|
|
786
|
+
# Run a specific site by name with a search term
|
|
787
|
+
python test_run.py --site streamingcommunity --search "interstellar"
|
|
788
|
+
|
|
789
|
+
# Run a specific site by numeric index (as shown in -h help)
|
|
790
|
+
python test_run.py --site 0 --search "interstellar"
|
|
791
|
+
|
|
792
|
+
# Auto-download the first result from search (requires --site and --search)
|
|
793
|
+
python test_run.py --site streamingcommunity --search "interstellar" --auto-first
|
|
794
|
+
|
|
795
|
+
# Show help (includes available sites by name and by index)
|
|
796
|
+
python test_run.py -h
|
|
797
|
+
|
|
703
798
|
# Change video and audio workers
|
|
704
799
|
python test_run.py --default_video_worker 8 --default_audio_worker 8
|
|
705
800
|
|
|
@@ -709,7 +804,7 @@ python test_run.py --specific_list_audio ita,eng --specific_list_subtitles eng,s
|
|
|
709
804
|
# Keep console open after download
|
|
710
805
|
python test_run.py --not_close true
|
|
711
806
|
|
|
712
|
-
# Use global
|
|
807
|
+
# Use global search
|
|
713
808
|
python test_run.py --global -s "cars"
|
|
714
809
|
|
|
715
810
|
# Select specific category
|
|
@@ -717,6 +812,9 @@ python test_run.py --category 1 # Search in anime category
|
|
|
717
812
|
python test_run.py --category 2 # Search in movies & series
|
|
718
813
|
python test_run.py --category 3 # Search in series
|
|
719
814
|
python test_run.py --category 4 # Search in torrent category
|
|
815
|
+
|
|
816
|
+
# If installed via pip, you can also use the entrypoint directly
|
|
817
|
+
streamingcommunity --site streamingcommunity --search "interstellar" --auto-first
|
|
720
818
|
```
|
|
721
819
|
|
|
722
820
|
# Docker
|
|
@@ -808,6 +906,10 @@ python3 telegram_bot.py
|
|
|
808
906
|
```
|
|
809
907
|
</details>
|
|
810
908
|
|
|
909
|
+
# SITE_LOGIN key
|
|
910
|
+
To use some site, you may need a SITE_LOGIN key.
|
|
911
|
+
See [guide.md](.github/.site/guide.md) for instructions on how to obtain it.
|
|
912
|
+
|
|
811
913
|
# Tutorials
|
|
812
914
|
|
|
813
915
|
- [Windows](https://www.youtube.com/watch?v=mZGqK4wdN-k)
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
StreamingCommunity/__init__.py,sha256=kOpFRfO3jz3gP2QjgPC_G85Z3rsMwMnsNa0POXMnDng,382
|
|
2
|
+
StreamingCommunity/global_search.py,sha256=ip3D0OKNRTXHpe_Wy7v2KM-yNZdnnbG5FOBYSSk6wB8,12401
|
|
3
|
+
StreamingCommunity/run.py,sha256=QKXm49zG8Q2STHk8Rx3uUJl5B8KEvJZnoBDkhigJR00,21122
|
|
4
|
+
StreamingCommunity/Api/Player/ddl.py,sha256=cPinK99iX4ThvAHLlzcACcnFvM-M_NK0f4imh9PQY1I,2174
|
|
5
|
+
StreamingCommunity/Api/Player/hdplayer.py,sha256=uQGU8ZVEk7qwwu1v4fjxScsP2x9NIHc7rRguXB1Fk2c,1942
|
|
6
|
+
StreamingCommunity/Api/Player/maxstream.py,sha256=JlVTCAo9ze0wF2h0eNPYqdorhwK7DPXpmLAyHMnT7-Y,5017
|
|
7
|
+
StreamingCommunity/Api/Player/mediapolisvod.py,sha256=Npm3HHUO5Wav8c2QX9E2c3SSW6d1STJw-kK8kHRF-zo,2403
|
|
8
|
+
StreamingCommunity/Api/Player/mixdrop.py,sha256=rZOE14yFdQM0l7ZNRMzFtOpaedgXUo6gdvoBu24y7IE,5127
|
|
9
|
+
StreamingCommunity/Api/Player/supervideo.py,sha256=AuAA6eXYODJN-ytdvKjqlzZLOHpwx3kwgy1CSiogs-o,5388
|
|
10
|
+
StreamingCommunity/Api/Player/sweetpixel.py,sha256=AAdLSD7ASLuZNiBx6btr8S44WkxtjTiToPhjtgA6HAE,1703
|
|
11
|
+
StreamingCommunity/Api/Player/vixcloud.py,sha256=0DnukAIBqGqTmL9I6JkpAkHLMf1UG1D_J8c7zt6KDmU,6609
|
|
12
|
+
StreamingCommunity/Api/Player/Helper/Vixcloud/js_parser.py,sha256=U-8QlD5kGzIk3-4t4D6QyYmiDe8UBrSuVi1YHRQb7AU,4295
|
|
13
|
+
StreamingCommunity/Api/Player/Helper/Vixcloud/util.py,sha256=WjpNA-ohE6AIwYOVzacYqy7CR3fXfdf7PfIp69vk8js,5343
|
|
14
|
+
StreamingCommunity/Api/Site/altadefinizione/__init__.py,sha256=fpFUhnjjRE2TXf1lNFBUoHH-WWyFQpXeG1xqkU_cQjw,4877
|
|
15
|
+
StreamingCommunity/Api/Site/altadefinizione/film.py,sha256=CQG1C9RGbPm_x89xgyTS8IqcP-lihNqCDY9ANghOlhE,3798
|
|
16
|
+
StreamingCommunity/Api/Site/altadefinizione/series.py,sha256=--XPvUzL4K3KKaS41jZ9WToT3wxt2rUwblNoJOp8hs0,8280
|
|
17
|
+
StreamingCommunity/Api/Site/altadefinizione/site.py,sha256=nrDmENnvWbW7iNO7OIGpQWJttzFGipZg0dsC8GiSEBU,2864
|
|
18
|
+
StreamingCommunity/Api/Site/altadefinizione/util/ScrapeSerie.py,sha256=9iulNlnNAhTfI5iKNW3I6pZqYeYwovAswa13L3LPGDM,4251
|
|
19
|
+
StreamingCommunity/Api/Site/animeunity/__init__.py,sha256=3eQ-AtLQCQK_ArTnnDit_NK5r04PuyPSSvEm4TUC9WE,4746
|
|
20
|
+
StreamingCommunity/Api/Site/animeunity/film.py,sha256=Vqg6yag2siR-Y3ougBsV8mzdQXChxg6ghz_KVXFQ3pE,998
|
|
21
|
+
StreamingCommunity/Api/Site/animeunity/serie.py,sha256=2PfpXblRpIrHC6gURfKYo16Vx_ZDcQX4CX03wAo8SCQ,5694
|
|
22
|
+
StreamingCommunity/Api/Site/animeunity/site.py,sha256=GLULPQATMHcXiH99d772v1ICH-PnnZgSM3q5__eN-gs,4977
|
|
23
|
+
StreamingCommunity/Api/Site/animeunity/util/ScrapeSerie.py,sha256=UladSvOlTEVLiV0-rAz45zrET5qRHMuTGuKEpeQoumU,3872
|
|
24
|
+
StreamingCommunity/Api/Site/animeworld/__init__.py,sha256=kbsIxaAJtnEyFIbAS-IdCdPWrrynE_1TLzHtZzYYDWE,3783
|
|
25
|
+
StreamingCommunity/Api/Site/animeworld/film.py,sha256=Ysp0k5AlrOsl19S9LV4nwVg8cjFf5w0FZRO9CiO6NxA,1748
|
|
26
|
+
StreamingCommunity/Api/Site/animeworld/serie.py,sha256=b1yuBnLNqJ-IWEVqLnQuYv6VbUQ60a5YFpZbJrS3lnI,3486
|
|
27
|
+
StreamingCommunity/Api/Site/animeworld/site.py,sha256=Zdp6ayA1L6hS1t0q4fclHs7J1eiD16Ta9isTc13Zye8,3746
|
|
28
|
+
StreamingCommunity/Api/Site/animeworld/util/ScrapeSerie.py,sha256=S6sLtQt4Wvp4IVDho1uAXL8_-bbdj-RTRA1D7x9V8n8,3591
|
|
29
|
+
StreamingCommunity/Api/Site/crunchyroll/__init__.py,sha256=tkjI_Spx6lOD95gVlSCwh2FeS1OMxKt1yXx6jYWayww,4893
|
|
30
|
+
StreamingCommunity/Api/Site/crunchyroll/film.py,sha256=MgA8bwJEf6unT_uBBsLpMqRdbctkLYLGeBB-_fX1wvk,2615
|
|
31
|
+
StreamingCommunity/Api/Site/crunchyroll/series.py,sha256=0JnPc9Bw02Ys-wmdAvcIbAlkyGHbw7ELemWVizWPl1k,7265
|
|
32
|
+
StreamingCommunity/Api/Site/crunchyroll/site.py,sha256=0IRbC7xPyfdHGNffZzGkpCzqZ0zB3o0MWe5sQLVmRVk,4073
|
|
33
|
+
StreamingCommunity/Api/Site/crunchyroll/util/ScrapeSerie.py,sha256=ZY6z4pT5q7igiNZnJAvE9x0WiORTvFSH-U_CpqOzusA,7855
|
|
34
|
+
StreamingCommunity/Api/Site/crunchyroll/util/get_license.py,sha256=KpVvJbGUTLeVD-tt8r7ajBPWVT7Tm6GrKwzpW8CS-tg,6881
|
|
35
|
+
StreamingCommunity/Api/Site/guardaserie/__init__.py,sha256=xKdy4puK4NI4ytFMZLqZXNeKaX8ub14mqpuelRFprSs,3800
|
|
36
|
+
StreamingCommunity/Api/Site/guardaserie/series.py,sha256=Q5i_nCAy8zAnublmWuujxrDwvP9XP2D207vrtYOdl_I,6566
|
|
37
|
+
StreamingCommunity/Api/Site/guardaserie/site.py,sha256=_AtrkOb5xUnIfqp212y3p7kWb7BKJYwQHleSRgDOSYA,2239
|
|
38
|
+
StreamingCommunity/Api/Site/guardaserie/util/ScrapeSerie.py,sha256=4wk2TVb4YDoPrhR2uuNijYuOpSt9mhcxwcXhmwTHPUY,4396
|
|
39
|
+
StreamingCommunity/Api/Site/mediasetinfinity/__init__.py,sha256=xfGtJEJx3LE7e-0UN85PipJ0VUJ4vk2JZHXUkrN65-Q,4286
|
|
40
|
+
StreamingCommunity/Api/Site/mediasetinfinity/film.py,sha256=L3jWSuxxO9SwRua9-zSF-nYfbwbmI4YG7YAM5yQlsDs,2308
|
|
41
|
+
StreamingCommunity/Api/Site/mediasetinfinity/series.py,sha256=BtZaZmpJ7-tbMPmosRLbZG4-oaIMK3Q1CHV29A5xmng,6898
|
|
42
|
+
StreamingCommunity/Api/Site/mediasetinfinity/site.py,sha256=n2c_Yg03fbOIx4ZYOg2FVoHM0rge16LIdACNvOyrURM,3872
|
|
43
|
+
StreamingCommunity/Api/Site/mediasetinfinity/util/ScrapeSerie.py,sha256=jZiSfwrvfdqu_dM0LG55VIsntM66OhRHGTP0o_78eUM,11174
|
|
44
|
+
StreamingCommunity/Api/Site/mediasetinfinity/util/fix_mpd.py,sha256=B7uZfQ8X4p8KsiPVangFSs5rKKKpA3tavjPCdNrqyCc,1712
|
|
45
|
+
StreamingCommunity/Api/Site/mediasetinfinity/util/get_license.py,sha256=CK1gmXlARi83DLrJzUeaQoFUOYiJtagtmG4AGUi11rY,5584
|
|
46
|
+
StreamingCommunity/Api/Site/raiplay/__init__.py,sha256=m8kN-_apnOoPQ7DBQ4ZK2hEXmw6ITt2ja7pO0OhDX9Y,4641
|
|
47
|
+
StreamingCommunity/Api/Site/raiplay/film.py,sha256=Ep1Kcbvm2nZoHvaxW5Qbg4FBl9QZORM-NEi2obhQyos,3029
|
|
48
|
+
StreamingCommunity/Api/Site/raiplay/series.py,sha256=EJx3ZUmXOGlha6J1vP93XVfh1VDAN_9fz_06dtdhIqI,7599
|
|
49
|
+
StreamingCommunity/Api/Site/raiplay/site.py,sha256=e0DoTIcSNLbk8uEBGgYCG6gbZ6yv-yo0Z-rT7PLNTlo,3182
|
|
50
|
+
StreamingCommunity/Api/Site/raiplay/util/ScrapeSerie.py,sha256=KsEL8XSr_c1vvaPo-_AY9RGE7_eHZ8oN2iyZtB0ocrw,5880
|
|
51
|
+
StreamingCommunity/Api/Site/raiplay/util/get_license.py,sha256=96Q5aSWhtxtmQl2yzylL-1x3jY24UpLLZlEE6YrO_gs,978
|
|
52
|
+
StreamingCommunity/Api/Site/streamingcommunity/__init__.py,sha256=6ETXEt0c-TnPkuO8wHo6VCphqM2LKuVr811eLxNJbsc,5469
|
|
53
|
+
StreamingCommunity/Api/Site/streamingcommunity/film.py,sha256=aA0tsDc5GCFFkrn_s2QKNcnyBYhK2S5OnDx29P1_rhA,2779
|
|
54
|
+
StreamingCommunity/Api/Site/streamingcommunity/series.py,sha256=eLCeVjur2w2J1PgYzhe8dIJYGZus6YEyQr5H0YXazH4,9055
|
|
55
|
+
StreamingCommunity/Api/Site/streamingcommunity/site.py,sha256=o1jdgF1nnUCnPnvybfc6a-0esHSYcRGjtUEOAXk6YAE,4131
|
|
56
|
+
StreamingCommunity/Api/Site/streamingcommunity/util/ScrapeSerie.py,sha256=b-PWO1fP68yfptLb5X3i4M1PFZHKkqJh32yHgKsoIGs,5684
|
|
57
|
+
StreamingCommunity/Api/Site/streamingwatch/__init__.py,sha256=K9gAeeJ6h7CQOhxXC2bUTXG4z9Dtv2R4Vv6XDSj9sik,4851
|
|
58
|
+
StreamingCommunity/Api/Site/streamingwatch/film.py,sha256=B_9z9xzfuqEbzv-eVHuadvOKTcEiHhRU92Gk_f2u7Zs,1693
|
|
59
|
+
StreamingCommunity/Api/Site/streamingwatch/series.py,sha256=nxGef_djMUZLAEDbHG-hbbly0eWagxPm8xu5aFIlSrI,6245
|
|
60
|
+
StreamingCommunity/Api/Site/streamingwatch/site.py,sha256=KEtm-TeTuryAODXdvJAGPHauaq8cVl8QxHV6CDT1mzo,3474
|
|
61
|
+
StreamingCommunity/Api/Site/streamingwatch/util/ScrapeSerie.py,sha256=h28W2Q_cZhBe4v91dvUDYbLBUV98i2Ghb1OOhVq3Iuk,4289
|
|
62
|
+
StreamingCommunity/Api/Template/__init__.py,sha256=fiDHu2yUk3Jk5CWmmnCJNy9fRLbq8RhHB_20NDD12tA,84
|
|
63
|
+
StreamingCommunity/Api/Template/config_loader.py,sha256=2RT_0mqQmWzXM4rYaqss-yhXztYAcfNkTalFPjzv270,2056
|
|
64
|
+
StreamingCommunity/Api/Template/site.py,sha256=4q8uLD5lnUof2ztod2_3xL6lKoELFpa_ixdZWZCQsL0,4993
|
|
65
|
+
StreamingCommunity/Api/Template/Class/SearchType.py,sha256=LOlE8UgraEM0UAVeNCThDGi8bleei31p7KpryuZm3VE,2530
|
|
66
|
+
StreamingCommunity/Api/Template/Util/__init__.py,sha256=v23VkosPNOQG5XbDkyCx5shEVJvRJffgkAF_Am5zMQc,377
|
|
67
|
+
StreamingCommunity/Api/Template/Util/manage_ep.py,sha256=JMGLj_SJY-K5YuvKISurEYyS-pa9jZ2EA-lshVS73z0,9268
|
|
68
|
+
StreamingCommunity/Lib/Downloader/__init__.py,sha256=Zh92xTvBIEIjNQN22iXItG7_VqiDGbOpO5gOZDBdGxc,288
|
|
69
|
+
StreamingCommunity/Lib/Downloader/DASH/cdm_helpher.py,sha256=-odu7Hc5dvzRXldQRlFalt6IVfvqi6XG_DCSyyqBGJ4,4767
|
|
70
|
+
StreamingCommunity/Lib/Downloader/DASH/decrypt.py,sha256=y3F5zrED-FSQzwE9e5rTl07aWkg76qwFgxtziPpPVuQ,2352
|
|
71
|
+
StreamingCommunity/Lib/Downloader/DASH/downloader.py,sha256=rswcxVXem_ddCbByZY1VbgdaQnhztsG02gMU7ZeD37s,8294
|
|
72
|
+
StreamingCommunity/Lib/Downloader/DASH/parser.py,sha256=QUyYhmu-zI2GieiNZaoOoDVPTclSKXsrdeToAtbC9yI,9858
|
|
73
|
+
StreamingCommunity/Lib/Downloader/DASH/segments.py,sha256=oiip_q3QOY_c17_t66D0m974hyzsQXivhHY5-uE9dlQ,12747
|
|
74
|
+
StreamingCommunity/Lib/Downloader/HLS/downloader.py,sha256=5ZOflDthkkmgZIGyLzL1Ao6ltyoJkQ7wAFe744Dyppk,21294
|
|
75
|
+
StreamingCommunity/Lib/Downloader/HLS/segments.py,sha256=YqlG628N7I0STPQhchw5LM7kerv8XjTzdzh8N-dw2QM,17914
|
|
76
|
+
StreamingCommunity/Lib/Downloader/MP4/downloader.py,sha256=_z61uQVnlfh-ktWYTisfbg_a4C3tpK7MO8HUdgLhTpI,8060
|
|
77
|
+
StreamingCommunity/Lib/Downloader/TOR/downloader.py,sha256=tYOCuKkKDcTIJ-2bGIeplovRkLTdp89i8lUvJs_N9jc,19133
|
|
78
|
+
StreamingCommunity/Lib/FFmpeg/__init__.py,sha256=NZmOXpnc5jvdvjNnHPxvj5bzp0GUuNMXd00Fcy4rQPI,258
|
|
79
|
+
StreamingCommunity/Lib/FFmpeg/capture.py,sha256=UUBaFK8WLkvqxsElqyEj-JvDvd9zUFZ2bRwRoUcGjVk,5039
|
|
80
|
+
StreamingCommunity/Lib/FFmpeg/command.py,sha256=E8EuihojWwMdxWYgZOEcjd-EUkh9il24bQBtphEV2n0,10679
|
|
81
|
+
StreamingCommunity/Lib/FFmpeg/util.py,sha256=_ep_Jxm1_TfNphemtgS2whd6BFqMtK_IQmW_jRmFys8,9297
|
|
82
|
+
StreamingCommunity/Lib/M3U8/__init__.py,sha256=Zxij4WFCxjwyfswUfBv0oys_o0vQpAL5PoK5TGG_StY,288
|
|
83
|
+
StreamingCommunity/Lib/M3U8/decryptor.py,sha256=1IutV-rZm3XLWGw1sEkApa3VkdwBc7BcC8AfyJ_zrrg,2965
|
|
84
|
+
StreamingCommunity/Lib/M3U8/estimator.py,sha256=S4pa4hBgtJsh11mmQcpQK_1_xhkb9fHrIZdfWBxEbAg,5592
|
|
85
|
+
StreamingCommunity/Lib/M3U8/parser.py,sha256=waHkNErWu-tnIJJvixVNjZ1R7OEtAWZDoTch-yey98M,22485
|
|
86
|
+
StreamingCommunity/Lib/M3U8/url_fixer.py,sha256=0Wd6MsBf8BBQ6mmHFElgCX3UbHAzRzSREmi03yb4gU4,1735
|
|
87
|
+
StreamingCommunity/Lib/TMBD/__init__.py,sha256=TBKZ0zwAUvil2V2AirEPy_Q-M3Ksar2CJsUNt4tpXhk,109
|
|
88
|
+
StreamingCommunity/Lib/TMBD/obj_tmbd.py,sha256=dRSvJFS5yqmsBZcw2wqbStcBtXNjU_3n5czMyremAtU,1187
|
|
89
|
+
StreamingCommunity/Lib/TMBD/tmdb.py,sha256=byg0EFnlmd9JeLvn1N9K3QkB1KEfeMuFa7OVfGqks1Y,10685
|
|
90
|
+
StreamingCommunity/TelegramHelp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
91
|
+
StreamingCommunity/TelegramHelp/config.json,sha256=v7FjA4smyLWZxChATewmvxDjJcclOCRZ_BIFPJd8Jvc,1374
|
|
92
|
+
StreamingCommunity/TelegramHelp/telegram_bot.py,sha256=KiurpTrgiUNyMcLfceseaxV4xGegCUSJ8YttSeGXhJM,26429
|
|
93
|
+
StreamingCommunity/Upload/update.py,sha256=9DStkCA_GGHjf47eDjUe-YeQ2mXhjmY-6E5C-HAwPlo,3829
|
|
94
|
+
StreamingCommunity/Upload/version.py,sha256=4e7vj7d6prEkm_3AF-tkZtIZ_DTn6sEocD_tl9G52mg,171
|
|
95
|
+
StreamingCommunity/Util/bento4_installer.py,sha256=P5ipziMCvezxan8GUh9vm8B1LXGyHusFVDf842LSwis,6966
|
|
96
|
+
StreamingCommunity/Util/color.py,sha256=NvD0Eni-25oOOkY-szCEoc0lGvzQxyL7xhM0RE4EvUM,458
|
|
97
|
+
StreamingCommunity/Util/config_json.py,sha256=vB6o6J5V874_bp9Y87VCCxp2wig0P3vwz4--zVokH4o,28576
|
|
98
|
+
StreamingCommunity/Util/ffmpeg_installer.py,sha256=yRVIPwbh05tZ-duZmXkH0qasLNxaQCAT_E4cTP79Z3c,14890
|
|
99
|
+
StreamingCommunity/Util/headers.py,sha256=RP3A6Gr8UB8VU6uzw_yDOjEKkIFKpi7Gi6_w2ACxE30,292
|
|
100
|
+
StreamingCommunity/Util/http_client.py,sha256=Z9537JZLoaPq3S9dfipe4nrWNL7QOyvxkqUlZHdSo40,6253
|
|
101
|
+
StreamingCommunity/Util/logger.py,sha256=9kGD6GmWj2pM8ADpJc85o7jm8DD0c5Aguqnq-9kmxos,3314
|
|
102
|
+
StreamingCommunity/Util/message.py,sha256=tstYQ9NxlfWupYkqPrOqOLqrKEb1iG5NsvIMNTUXXvA,1332
|
|
103
|
+
StreamingCommunity/Util/os.py,sha256=VgKPcQxFTU_aCDpIw-T-z61xl9sCCAWZZdc0UZBieu8,17135
|
|
104
|
+
StreamingCommunity/Util/table.py,sha256=xXfgd09oIYSxpJwnnkPZdWJ0DcCihSqxfvYYAEo-YMA,9806
|
|
105
|
+
streamingcommunity-3.3.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
106
|
+
streamingcommunity-3.3.0.dist-info/METADATA,sha256=uD8xka-sTPeGZIh7ZQEtlVYFx3qf1w9whuHQIrY2TuQ,27468
|
|
107
|
+
streamingcommunity-3.3.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
108
|
+
streamingcommunity-3.3.0.dist-info/entry_points.txt,sha256=Qph9XYfDC8n4LfDLOSl6gJGlkb9eFb5f-JOr_Wb_5rk,67
|
|
109
|
+
streamingcommunity-3.3.0.dist-info/top_level.txt,sha256=YsOcxKP-WOhWpIWgBlh0coll9XUx7aqmRPT7kmt3fH0,19
|
|
110
|
+
streamingcommunity-3.3.0.dist-info/RECORD,,
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
# 09.06.24
|
|
2
|
-
|
|
3
|
-
from urllib.parse import quote_plus
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
# External library
|
|
7
|
-
from rich.console import Console
|
|
8
|
-
from rich.prompt import Prompt
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
# Internal utilities
|
|
12
|
-
from StreamingCommunity.Api.Template import get_select_title
|
|
13
|
-
from StreamingCommunity.Api.Template.config_loader import site_constant
|
|
14
|
-
from StreamingCommunity.Api.Template.Class.SearchType import MediaItem
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
# Logic class
|
|
18
|
-
from .site import title_search, media_search_manager, table_show_manager
|
|
19
|
-
from .film import download_film
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
# Variable
|
|
23
|
-
indice = -1
|
|
24
|
-
_useFor = "Film"
|
|
25
|
-
_priority = 0
|
|
26
|
-
_engineDownload = "mp4"
|
|
27
|
-
_deprecate = True
|
|
28
|
-
|
|
29
|
-
msg = Prompt()
|
|
30
|
-
console = Console()
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
def process_search_result(select_title):
|
|
34
|
-
"""
|
|
35
|
-
Handles the search result and initiates the download for either a film or series.
|
|
36
|
-
"""
|
|
37
|
-
# !!! ADD TYPE DONT WORK FOR SERIE
|
|
38
|
-
download_film(select_title)
|
|
39
|
-
|
|
40
|
-
def search(string_to_search: str = None, get_onlyDatabase: bool = False, direct_item: dict = None):
|
|
41
|
-
"""
|
|
42
|
-
Main function of the application for search.
|
|
43
|
-
|
|
44
|
-
Parameters:
|
|
45
|
-
string_to_search (str, optional): String to search for
|
|
46
|
-
get_onylDatabase (bool, optional): If True, return only the database object
|
|
47
|
-
direct_item (dict, optional): Direct item to process (bypass search)
|
|
48
|
-
"""
|
|
49
|
-
if direct_item:
|
|
50
|
-
select_title = MediaItem(**direct_item)
|
|
51
|
-
process_search_result(select_title)
|
|
52
|
-
return
|
|
53
|
-
|
|
54
|
-
if string_to_search is None:
|
|
55
|
-
string_to_search = msg.ask(f"\n[purple]Insert word to search in [green]{site_constant.SITE_NAME}").strip()
|
|
56
|
-
|
|
57
|
-
# Search on database
|
|
58
|
-
len_database = title_search(quote_plus(string_to_search))
|
|
59
|
-
|
|
60
|
-
## If only the database is needed, return the manager
|
|
61
|
-
if get_onlyDatabase:
|
|
62
|
-
return media_search_manager
|
|
63
|
-
|
|
64
|
-
if len_database > 0:
|
|
65
|
-
select_title = get_select_title(table_show_manager, media_search_manager,len_database)
|
|
66
|
-
process_search_result(select_title)
|
|
67
|
-
|
|
68
|
-
else:
|
|
69
|
-
|
|
70
|
-
# If no results are found, ask again
|
|
71
|
-
console.print(f"\n[red]Nothing matching was found for[white]: [purple]{string_to_search}")
|
|
72
|
-
search()
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
# 03.07.24
|
|
2
|
-
|
|
3
|
-
import os
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
# External library
|
|
7
|
-
from rich.console import Console
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
# Internal utilities
|
|
11
|
-
from StreamingCommunity.Util.os import os_manager
|
|
12
|
-
from StreamingCommunity.Util.message import start_message
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
# Logic class
|
|
16
|
-
from StreamingCommunity.Api.Template.config_loader import site_constant
|
|
17
|
-
from StreamingCommunity.Api.Template.Class.SearchType import MediaItem
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
# Player
|
|
21
|
-
from StreamingCommunity import HLS_Downloader
|
|
22
|
-
from StreamingCommunity.Api.Player.maxstream import VideoSource
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
# Variable
|
|
26
|
-
console = Console()
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
def download_film(select_title: MediaItem) -> str:
|
|
30
|
-
"""
|
|
31
|
-
Downloads a film using the provided obj.
|
|
32
|
-
|
|
33
|
-
Parameters:
|
|
34
|
-
- select_title (MediaItem): The media item to be downloaded. This should be an instance of the MediaItem class, containing attributes like `name` and `url`.
|
|
35
|
-
|
|
36
|
-
Return:
|
|
37
|
-
- str: output path
|
|
38
|
-
"""
|
|
39
|
-
start_message()
|
|
40
|
-
console.print(f"[bold yellow]Download:[/bold yellow] [red]{site_constant.SITE_NAME}[/red] → [cyan]{select_title.name}[/cyan] \n")
|
|
41
|
-
|
|
42
|
-
# Setup api manger
|
|
43
|
-
video_source = VideoSource(select_title.url)
|
|
44
|
-
|
|
45
|
-
# Define output path
|
|
46
|
-
title_name = os_manager.get_sanitize_file(select_title.name) +".mp4"
|
|
47
|
-
mp4_path = os.path.join(site_constant.MOVIE_FOLDER, title_name.replace(".mp4", ""))
|
|
48
|
-
|
|
49
|
-
# Get m3u8 master playlist
|
|
50
|
-
master_playlist = video_source.get_playlist()
|
|
51
|
-
|
|
52
|
-
# Download the film using the m3u8 playlist, and output filename
|
|
53
|
-
r_proc = HLS_Downloader(
|
|
54
|
-
m3u8_url=master_playlist,
|
|
55
|
-
output_path=os.path.join(mp4_path, title_name)
|
|
56
|
-
).start()
|
|
57
|
-
|
|
58
|
-
if r_proc['error'] is not None:
|
|
59
|
-
try: os.remove(r_proc['path'])
|
|
60
|
-
except: pass
|
|
61
|
-
|
|
62
|
-
return r_proc['path']
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
# 03.07.24
|
|
2
|
-
|
|
3
|
-
# External libraries
|
|
4
|
-
import httpx
|
|
5
|
-
from bs4 import BeautifulSoup
|
|
6
|
-
from rich.console import Console
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
# Internal utilities
|
|
10
|
-
from StreamingCommunity.Util.config_json import config_manager
|
|
11
|
-
from StreamingCommunity.Util.headers import get_userAgent
|
|
12
|
-
from StreamingCommunity.Util.table import TVShowManager
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
# Logic class
|
|
16
|
-
from StreamingCommunity.Api.Template.config_loader import site_constant
|
|
17
|
-
from StreamingCommunity.Api.Template.Class.SearchType import MediaManager
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
# Variable
|
|
21
|
-
console = Console()
|
|
22
|
-
media_search_manager = MediaManager()
|
|
23
|
-
table_show_manager = TVShowManager()
|
|
24
|
-
max_timeout = config_manager.get_int("REQUESTS", "timeout")
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def title_search(query: str) -> int:
|
|
28
|
-
"""
|
|
29
|
-
Search for titles based on a search query.
|
|
30
|
-
|
|
31
|
-
Parameters:
|
|
32
|
-
- query (str): The query to search for.
|
|
33
|
-
|
|
34
|
-
Returns:
|
|
35
|
-
- int: The number of titles found.
|
|
36
|
-
"""
|
|
37
|
-
media_search_manager.clear()
|
|
38
|
-
table_show_manager.clear()
|
|
39
|
-
|
|
40
|
-
search_url = f"{site_constant.FULL_URL}/?s={query}"
|
|
41
|
-
console.print(f"[cyan]Search url: [yellow]{search_url}")
|
|
42
|
-
|
|
43
|
-
try:
|
|
44
|
-
response = httpx.get(
|
|
45
|
-
search_url,
|
|
46
|
-
headers={'user-agent': get_userAgent()},
|
|
47
|
-
timeout=max_timeout,
|
|
48
|
-
follow_redirects=True,
|
|
49
|
-
verify=False
|
|
50
|
-
)
|
|
51
|
-
response.raise_for_status()
|
|
52
|
-
|
|
53
|
-
except Exception as e:
|
|
54
|
-
console.print(f"Site: {site_constant.SITE_NAME}, request search error: {e}")
|
|
55
|
-
return 0
|
|
56
|
-
|
|
57
|
-
# Create soup and find table
|
|
58
|
-
soup = BeautifulSoup(response.text, "html.parser")
|
|
59
|
-
|
|
60
|
-
for card in soup.find_all("div", class_=["card", "mp-post", "horizontal"]):
|
|
61
|
-
try:
|
|
62
|
-
title_tag = card.find("h3", class_="card-title").find("a")
|
|
63
|
-
url = title_tag.get("href")
|
|
64
|
-
title = title_tag.get_text(strip=True)
|
|
65
|
-
|
|
66
|
-
title_info = {
|
|
67
|
-
'name': title,
|
|
68
|
-
'url': url,
|
|
69
|
-
'type': 'film'
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
media_search_manager.add_media(title_info)
|
|
73
|
-
|
|
74
|
-
except Exception as e:
|
|
75
|
-
print(f"Error parsing a film entry: {e}")
|
|
76
|
-
|
|
77
|
-
# Return the number of titles found
|
|
78
|
-
return media_search_manager.get_length()
|