StreamingCommunity 2.0.5__tar.gz → 2.3.0__tar.gz
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-2.0.5 → StreamingCommunity-2.3.0}/PKG-INFO +37 -20
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/README.md +36 -19
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Player/Helper/Vixcloud/util.py +15 -24
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/1337xx/site.py +9 -6
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/1337xx/title.py +2 -2
- StreamingCommunity-2.3.0/StreamingCommunity/Api/Site/altadefinizione/costant.py +19 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/altadefinizione/film.py +2 -2
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/altadefinizione/site.py +28 -22
- StreamingCommunity-2.3.0/StreamingCommunity/Api/Site/animeunity/costant.py +19 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/animeunity/film_serie.py +3 -3
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/animeunity/site.py +27 -19
- StreamingCommunity-2.3.0/StreamingCommunity/Api/Site/cb01new/costant.py +19 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/cb01new/film.py +2 -2
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/cb01new/site.py +20 -13
- StreamingCommunity-2.3.0/StreamingCommunity/Api/Site/ddlstreamitaly/costant.py +20 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/ddlstreamitaly/series.py +2 -2
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/ddlstreamitaly/site.py +9 -5
- StreamingCommunity-2.3.0/StreamingCommunity/Api/Site/guardaserie/costant.py +19 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/guardaserie/series.py +2 -3
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/guardaserie/site.py +10 -6
- StreamingCommunity-2.3.0/StreamingCommunity/Api/Site/ilcorsaronero/costant.py +19 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/ilcorsaronero/site.py +22 -13
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/ilcorsaronero/title.py +3 -3
- StreamingCommunity-2.3.0/StreamingCommunity/Api/Site/mostraguarda/costant.py +19 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/mostraguarda/film.py +2 -2
- StreamingCommunity-2.3.0/StreamingCommunity/Api/Site/streamingcommunity/costant.py +19 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/streamingcommunity/film.py +3 -3
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/streamingcommunity/series.py +2 -2
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/streamingcommunity/site.py +29 -28
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/streamingcommunity/util/ScrapeSerie.py +24 -24
- StreamingCommunity-2.3.0/StreamingCommunity/Api/Template/Util/get_domain.py +137 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/Downloader/HLS/downloader.py +3 -2
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/Downloader/HLS/segments.py +21 -17
- StreamingCommunity-2.3.0/StreamingCommunity/Lib/M3U8/estimator.py +229 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Upload/version.py +1 -1
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/ffmpeg_installer.py +8 -5
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity.egg-info/PKG-INFO +37 -20
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/Test/call_updateDomain.py +47 -4
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/setup.py +1 -1
- StreamingCommunity-2.0.5/StreamingCommunity/Api/Site/altadefinizione/costant.py +0 -15
- StreamingCommunity-2.0.5/StreamingCommunity/Api/Site/animeunity/costant.py +0 -15
- StreamingCommunity-2.0.5/StreamingCommunity/Api/Site/cb01new/costant.py +0 -15
- StreamingCommunity-2.0.5/StreamingCommunity/Api/Site/ddlstreamitaly/costant.py +0 -16
- StreamingCommunity-2.0.5/StreamingCommunity/Api/Site/guardaserie/costant.py +0 -15
- StreamingCommunity-2.0.5/StreamingCommunity/Api/Site/ilcorsaronero/costant.py +0 -15
- StreamingCommunity-2.0.5/StreamingCommunity/Api/Site/mostraguarda/costant.py +0 -15
- StreamingCommunity-2.0.5/StreamingCommunity/Api/Site/streamingcommunity/costant.py +0 -15
- StreamingCommunity-2.0.5/StreamingCommunity/Api/Template/Util/get_domain.py +0 -174
- StreamingCommunity-2.0.5/StreamingCommunity/Lib/M3U8/estimator.py +0 -204
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/MANIFEST.in +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Player/Helper/Vixcloud/js_parser.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Player/ddl.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Player/maxstream.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Player/supervideo.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Player/vixcloud.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/1337xx/__init__.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/1337xx/costant.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/altadefinizione/__init__.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/animeunity/__init__.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/animeunity/util/ScrapeSerie.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/cb01new/__init__.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/ddlstreamitaly/__init__.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/ddlstreamitaly/util/ScrapeSerie.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/guardaserie/__init__.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/guardaserie/util/ScrapeSerie.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/ilcorsaronero/__init__.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/ilcorsaronero/util/ilCorsarScraper.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/mostraguarda/__init__.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/streamingcommunity/__init__.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Template/Class/SearchType.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Template/Util/__init__.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Template/Util/manage_ep.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Template/Util/recall_search.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Template/__init__.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Template/site.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/Downloader/HLS/proxyes.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/Downloader/MP4/downloader.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/Downloader/TOR/downloader.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/Downloader/__init__.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/FFmpeg/__init__.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/FFmpeg/capture.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/FFmpeg/command.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/FFmpeg/util.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/M3U8/__init__.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/M3U8/decryptor.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/M3U8/parser.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/M3U8/url_fixer.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/TMBD/__init__.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/TMBD/obj_tmbd.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/TMBD/tmdb.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Upload/update.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/_jsonConfig.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/call_stack.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/color.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/console.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/headers.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/logger.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/message.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/os.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/table.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/__init__.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/run.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity.egg-info/SOURCES.txt +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity.egg-info/dependency_links.txt +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity.egg-info/entry_points.txt +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity.egg-info/requires.txt +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity.egg-info/top_level.txt +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/Test/Download/HLS.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/Test/Download/MP4.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/Test/Download/TOR.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/Test/Player/helper/vixcloud.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/Test/Player/maxtream.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/Test/Player/supervideo.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/Test/Player/vixcloud.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/Test/big_search.py +0 -0
- {StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: StreamingCommunity
|
|
3
|
-
Version: 2.0
|
|
3
|
+
Version: 2.3.0
|
|
4
4
|
Summary: UNKNOWN
|
|
5
5
|
Home-page: https://github.com/Lovi-0/StreamingCommunity
|
|
6
6
|
Author: Lovi-0
|
|
@@ -15,9 +15,6 @@ Description: <p align="center">
|
|
|
15
15
|
<a href="https://pypi.org/project/streamingcommunity">
|
|
16
16
|
<img src="https://img.shields.io/pypi/v/streamingcommunity?logo=pypi&labelColor=555555&style=for-the-badge" alt="PyPI"/>
|
|
17
17
|
</a>
|
|
18
|
-
<a href="https://www.python.org">
|
|
19
|
-
<img src="https://img.shields.io/badge/Python->=3.8-3776AB?style=for-the-badge&logo=python&logoColor=white" alt="Python"/>
|
|
20
|
-
</a>
|
|
21
18
|
<a href="https://www.paypal.com/donate/?hosted_button_id=UXTWMT8P6HE2C">
|
|
22
19
|
<img src="https://img.shields.io/badge/_-Donate-red.svg?logo=githubsponsors&labelColor=555555&style=for-the-badge" alt="Donate"/>
|
|
23
20
|
</a>
|
|
@@ -71,6 +68,22 @@ Description: <p align="center">
|
|
|
71
68
|
|
|
72
69
|
# Installation
|
|
73
70
|
|
|
71
|
+
<p align="center">
|
|
72
|
+
<a href="https://github.com/Lovi-0/StreamingCommunity/releases/latest/download/StreamingCommunity.exe">
|
|
73
|
+
<img src="https://img.shields.io/badge/-Windows_x64-blue.svg?style=for-the-badge&logo=windows" alt="Windows">
|
|
74
|
+
</a>
|
|
75
|
+
<a href="https://pypi.org/project/StreamingCommunity">
|
|
76
|
+
<img src="https://img.shields.io/badge/-PyPI-blue.svg?logo=pypi&labelColor=555555&style=for-the-badge" alt="PyPI">
|
|
77
|
+
</a>
|
|
78
|
+
<a href="https://github.com/Lovi-0/StreamingCommunity/releases/latest/download/StreamingCommunity.zip">
|
|
79
|
+
<img src="https://img.shields.io/badge/-Source_tar-green.svg?style=for-the-badge" alt="Source Tarball">
|
|
80
|
+
</a>
|
|
81
|
+
<a href="https://github.com/Lovi-0/StreamingCommunity/releases">
|
|
82
|
+
<img src="https://img.shields.io/badge/-All_Versions-lightgrey.svg?style=for-the-badge" alt="All Versions">
|
|
83
|
+
</a>
|
|
84
|
+
</p>
|
|
85
|
+
|
|
86
|
+
|
|
74
87
|
## 1. PyPI Installation
|
|
75
88
|
|
|
76
89
|
Install directly from PyPI:
|
|
@@ -210,12 +223,14 @@ Description: <p align="center">
|
|
|
210
223
|
"movie_folder_name": "Movie",
|
|
211
224
|
"serie_folder_name": "TV",
|
|
212
225
|
"map_episode_name": "%(tv_name)_S%(season)E%(episode)_%(episode_name)",
|
|
226
|
+
"add_siteName": false,
|
|
227
|
+
"disable_searchDomain": false,
|
|
213
228
|
"not_close": false
|
|
214
229
|
}
|
|
215
230
|
```
|
|
216
231
|
|
|
217
232
|
- `root_path`: Directory where all videos will be saved
|
|
218
|
-
|
|
233
|
+
|
|
219
234
|
### Path examples:
|
|
220
235
|
* Windows: `C:\\MyLibrary\\Folder` or `\\\\MyServer\\MyLibrary` (if you want to use a network folder)
|
|
221
236
|
* Linux/MacOS: `Desktop/MyLibrary/Folder`
|
|
@@ -237,7 +252,10 @@ Description: <p align="center">
|
|
|
237
252
|
* `%(episode_name)` : Is the name of the episode
|
|
238
253
|
`<br/><br/>`
|
|
239
254
|
|
|
240
|
-
- `
|
|
255
|
+
- `add_siteName`: If set to true, appends the site_name to the root path before the movie and serie folders.
|
|
256
|
+
- `disable_searchDomain`: If set to true, disables the search for a new domain for all sites.
|
|
257
|
+
- `not_close`: If set to true, keeps the program running after the download is complete.
|
|
258
|
+
|
|
241
259
|
|
|
242
260
|
### qBittorrent Configuration
|
|
243
261
|
|
|
@@ -254,7 +272,6 @@ Description: <p align="center">
|
|
|
254
272
|
|
|
255
273
|
To enable qBittorrent integration, follow the setup guide [here](https://github.com/lgallard/qBittorrent-Controller/wiki/How-to-enable-the-qBittorrent-Web-UI).
|
|
256
274
|
|
|
257
|
-
<br>
|
|
258
275
|
|
|
259
276
|
## REQUESTS Settings
|
|
260
277
|
|
|
@@ -268,7 +285,6 @@ Description: <p align="center">
|
|
|
268
285
|
- `timeout`: Maximum timeout (in seconds) for each request
|
|
269
286
|
- `max_retry`: Number of retry attempts per segment during M3U8 index download
|
|
270
287
|
|
|
271
|
-
<br>
|
|
272
288
|
|
|
273
289
|
## M3U8_DOWNLOAD Settings
|
|
274
290
|
|
|
@@ -288,8 +304,10 @@ Description: <p align="center">
|
|
|
288
304
|
- `default_audio_workser`: Number of threads for audio download
|
|
289
305
|
- `cleanup_tmp_folder`: Remove temporary .ts files after download
|
|
290
306
|
|
|
307
|
+
> [!IMPORTANT]
|
|
308
|
+
> Set `tqdm_use_large_bar` to `false` when using Termux or terminals with limited width to prevent network monitoring issues
|
|
309
|
+
|
|
291
310
|
|
|
292
|
-
<br>
|
|
293
311
|
|
|
294
312
|
### Language Settings
|
|
295
313
|
|
|
@@ -338,7 +356,6 @@ Description: <p align="center">
|
|
|
338
356
|
- `force_resolution`: Force specific resolution (-1 for best available, or specify 1080, 720, 360)
|
|
339
357
|
- `get_only_link`: Return M3U8 playlist/index URL instead of downloading
|
|
340
358
|
|
|
341
|
-
<br>
|
|
342
359
|
|
|
343
360
|
# COMMAND
|
|
344
361
|
|
|
@@ -354,7 +371,6 @@ Description: <p align="center">
|
|
|
354
371
|
- Enter a season number followed by `-*` to download from that season to the end.
|
|
355
372
|
* **Example:** `3-*` will download from *Season 3* to the final season.
|
|
356
373
|
|
|
357
|
-
<br>
|
|
358
374
|
|
|
359
375
|
# Docker
|
|
360
376
|
|
|
@@ -393,15 +409,16 @@ Description: <p align="center">
|
|
|
393
409
|
|
|
394
410
|
| Website | Status |
|
|
395
411
|
|:-------------------|:------:|
|
|
396
|
-
| 1337xx
|
|
397
|
-
| Altadefinizione
|
|
398
|
-
| AnimeUnity
|
|
399
|
-
| Ilcorsaronero
|
|
400
|
-
| CB01New
|
|
401
|
-
| DDLStreamItaly
|
|
402
|
-
| GuardaSerie
|
|
403
|
-
| MostraGuarda
|
|
404
|
-
| StreamingCommunity | ✅ |
|
|
412
|
+
| [1337xx](https://1337xx.to/) | ✅ |
|
|
413
|
+
| [Altadefinizione](https://altadefinizione.prof/) | ✅ |
|
|
414
|
+
| [AnimeUnity](https://animeunity.so/) | ✅ |
|
|
415
|
+
| [Ilcorsaronero](https://ilcorsaronero.link/) | ✅ |
|
|
416
|
+
| [CB01New](https://cb01new.pics/) | ✅ |
|
|
417
|
+
| [DDLStreamItaly](https://ddlstreamitaly.co/) | ✅ |
|
|
418
|
+
| [GuardaSerie](https://guardaserie.academy/) | ✅ |
|
|
419
|
+
| [MostraGuarda](https://mostraguarda.stream/) | ✅ |
|
|
420
|
+
| [StreamingCommunity](https://streamingcommunity.prof/) | ✅ |
|
|
421
|
+
|
|
405
422
|
|
|
406
423
|
# Tutorials
|
|
407
424
|
|
|
@@ -6,9 +6,6 @@
|
|
|
6
6
|
<a href="https://pypi.org/project/streamingcommunity">
|
|
7
7
|
<img src="https://img.shields.io/pypi/v/streamingcommunity?logo=pypi&labelColor=555555&style=for-the-badge" alt="PyPI"/>
|
|
8
8
|
</a>
|
|
9
|
-
<a href="https://www.python.org">
|
|
10
|
-
<img src="https://img.shields.io/badge/Python->=3.8-3776AB?style=for-the-badge&logo=python&logoColor=white" alt="Python"/>
|
|
11
|
-
</a>
|
|
12
9
|
<a href="https://www.paypal.com/donate/?hosted_button_id=UXTWMT8P6HE2C">
|
|
13
10
|
<img src="https://img.shields.io/badge/_-Donate-red.svg?logo=githubsponsors&labelColor=555555&style=for-the-badge" alt="Donate"/>
|
|
14
11
|
</a>
|
|
@@ -62,6 +59,22 @@
|
|
|
62
59
|
|
|
63
60
|
# Installation
|
|
64
61
|
|
|
62
|
+
<p align="center">
|
|
63
|
+
<a href="https://github.com/Lovi-0/StreamingCommunity/releases/latest/download/StreamingCommunity.exe">
|
|
64
|
+
<img src="https://img.shields.io/badge/-Windows_x64-blue.svg?style=for-the-badge&logo=windows" alt="Windows">
|
|
65
|
+
</a>
|
|
66
|
+
<a href="https://pypi.org/project/StreamingCommunity">
|
|
67
|
+
<img src="https://img.shields.io/badge/-PyPI-blue.svg?logo=pypi&labelColor=555555&style=for-the-badge" alt="PyPI">
|
|
68
|
+
</a>
|
|
69
|
+
<a href="https://github.com/Lovi-0/StreamingCommunity/releases/latest/download/StreamingCommunity.zip">
|
|
70
|
+
<img src="https://img.shields.io/badge/-Source_tar-green.svg?style=for-the-badge" alt="Source Tarball">
|
|
71
|
+
</a>
|
|
72
|
+
<a href="https://github.com/Lovi-0/StreamingCommunity/releases">
|
|
73
|
+
<img src="https://img.shields.io/badge/-All_Versions-lightgrey.svg?style=for-the-badge" alt="All Versions">
|
|
74
|
+
</a>
|
|
75
|
+
</p>
|
|
76
|
+
|
|
77
|
+
|
|
65
78
|
## 1. PyPI Installation
|
|
66
79
|
|
|
67
80
|
Install directly from PyPI:
|
|
@@ -201,12 +214,14 @@ The configuration file is divided into several main sections:
|
|
|
201
214
|
"movie_folder_name": "Movie",
|
|
202
215
|
"serie_folder_name": "TV",
|
|
203
216
|
"map_episode_name": "%(tv_name)_S%(season)E%(episode)_%(episode_name)",
|
|
217
|
+
"add_siteName": false,
|
|
218
|
+
"disable_searchDomain": false,
|
|
204
219
|
"not_close": false
|
|
205
220
|
}
|
|
206
221
|
```
|
|
207
222
|
|
|
208
223
|
- `root_path`: Directory where all videos will be saved
|
|
209
|
-
|
|
224
|
+
|
|
210
225
|
### Path examples:
|
|
211
226
|
* Windows: `C:\\MyLibrary\\Folder` or `\\\\MyServer\\MyLibrary` (if you want to use a network folder)
|
|
212
227
|
* Linux/MacOS: `Desktop/MyLibrary/Folder`
|
|
@@ -228,7 +243,10 @@ The configuration file is divided into several main sections:
|
|
|
228
243
|
* `%(episode_name)` : Is the name of the episode
|
|
229
244
|
`<br/><br/>`
|
|
230
245
|
|
|
231
|
-
- `
|
|
246
|
+
- `add_siteName`: If set to true, appends the site_name to the root path before the movie and serie folders.
|
|
247
|
+
- `disable_searchDomain`: If set to true, disables the search for a new domain for all sites.
|
|
248
|
+
- `not_close`: If set to true, keeps the program running after the download is complete.
|
|
249
|
+
|
|
232
250
|
|
|
233
251
|
### qBittorrent Configuration
|
|
234
252
|
|
|
@@ -245,7 +263,6 @@ The configuration file is divided into several main sections:
|
|
|
245
263
|
|
|
246
264
|
To enable qBittorrent integration, follow the setup guide [here](https://github.com/lgallard/qBittorrent-Controller/wiki/How-to-enable-the-qBittorrent-Web-UI).
|
|
247
265
|
|
|
248
|
-
<br>
|
|
249
266
|
|
|
250
267
|
## REQUESTS Settings
|
|
251
268
|
|
|
@@ -259,7 +276,6 @@ The configuration file is divided into several main sections:
|
|
|
259
276
|
- `timeout`: Maximum timeout (in seconds) for each request
|
|
260
277
|
- `max_retry`: Number of retry attempts per segment during M3U8 index download
|
|
261
278
|
|
|
262
|
-
<br>
|
|
263
279
|
|
|
264
280
|
## M3U8_DOWNLOAD Settings
|
|
265
281
|
|
|
@@ -279,8 +295,10 @@ The configuration file is divided into several main sections:
|
|
|
279
295
|
- `default_audio_workser`: Number of threads for audio download
|
|
280
296
|
- `cleanup_tmp_folder`: Remove temporary .ts files after download
|
|
281
297
|
|
|
298
|
+
> [!IMPORTANT]
|
|
299
|
+
> Set `tqdm_use_large_bar` to `false` when using Termux or terminals with limited width to prevent network monitoring issues
|
|
300
|
+
|
|
282
301
|
|
|
283
|
-
<br>
|
|
284
302
|
|
|
285
303
|
### Language Settings
|
|
286
304
|
|
|
@@ -329,7 +347,6 @@ forced-ita hin - Hindi pol - Polish tur - Turkish
|
|
|
329
347
|
- `force_resolution`: Force specific resolution (-1 for best available, or specify 1080, 720, 360)
|
|
330
348
|
- `get_only_link`: Return M3U8 playlist/index URL instead of downloading
|
|
331
349
|
|
|
332
|
-
<br>
|
|
333
350
|
|
|
334
351
|
# COMMAND
|
|
335
352
|
|
|
@@ -345,7 +362,6 @@ forced-ita hin - Hindi pol - Polish tur - Turkish
|
|
|
345
362
|
- Enter a season number followed by `-*` to download from that season to the end.
|
|
346
363
|
* **Example:** `3-*` will download from *Season 3* to the final season.
|
|
347
364
|
|
|
348
|
-
<br>
|
|
349
365
|
|
|
350
366
|
# Docker
|
|
351
367
|
|
|
@@ -384,15 +400,16 @@ The `run-container` command mounts also the `config.json` file, so any change to
|
|
|
384
400
|
|
|
385
401
|
| Website | Status |
|
|
386
402
|
|:-------------------|:------:|
|
|
387
|
-
| 1337xx
|
|
388
|
-
| Altadefinizione
|
|
389
|
-
| AnimeUnity
|
|
390
|
-
| Ilcorsaronero
|
|
391
|
-
| CB01New
|
|
392
|
-
| DDLStreamItaly
|
|
393
|
-
| GuardaSerie
|
|
394
|
-
| MostraGuarda
|
|
395
|
-
| StreamingCommunity | ✅ |
|
|
403
|
+
| [1337xx](https://1337xx.to/) | ✅ |
|
|
404
|
+
| [Altadefinizione](https://altadefinizione.prof/) | ✅ |
|
|
405
|
+
| [AnimeUnity](https://animeunity.so/) | ✅ |
|
|
406
|
+
| [Ilcorsaronero](https://ilcorsaronero.link/) | ✅ |
|
|
407
|
+
| [CB01New](https://cb01new.pics/) | ✅ |
|
|
408
|
+
| [DDLStreamItaly](https://ddlstreamitaly.co/) | ✅ |
|
|
409
|
+
| [GuardaSerie](https://guardaserie.academy/) | ✅ |
|
|
410
|
+
| [MostraGuarda](https://mostraguarda.stream/) | ✅ |
|
|
411
|
+
| [StreamingCommunity](https://streamingcommunity.prof/) | ✅ |
|
|
412
|
+
|
|
396
413
|
|
|
397
414
|
# Tutorials
|
|
398
415
|
|
|
@@ -5,18 +5,14 @@ from typing import Dict, Any, List, Union
|
|
|
5
5
|
|
|
6
6
|
class Episode:
|
|
7
7
|
def __init__(self, data: Dict[str, Any]):
|
|
8
|
-
self.images = None
|
|
9
8
|
self.data = data
|
|
10
9
|
|
|
11
|
-
self.id: int = data.get('id')
|
|
12
|
-
self.scws_id: int = data.get('scws_id')
|
|
13
|
-
self.number: int = data.get('number')
|
|
14
|
-
self.name: str = data.get('name')
|
|
15
|
-
self.plot: str = data.get('plot')
|
|
16
|
-
self.duration: int = data.get('duration')
|
|
17
|
-
|
|
18
|
-
def collect_image(self, SITE_NAME, domain):
|
|
19
|
-
self.image = f"https://cdn.{SITE_NAME}.{domain}/images/{self.data.get('images')[0]['filename']}"
|
|
10
|
+
self.id: int = data.get('id', 0)
|
|
11
|
+
self.scws_id: int = data.get('scws_id', 0)
|
|
12
|
+
self.number: int = data.get('number', 1)
|
|
13
|
+
self.name: str = data.get('name', '')
|
|
14
|
+
self.plot: str = data.get('plot', '')
|
|
15
|
+
self.duration: int = data.get('duration', 0)
|
|
20
16
|
|
|
21
17
|
def __str__(self):
|
|
22
18
|
return f"Episode(id={self.id}, number={self.number}, name='{self.name}', plot='{self.plot}', duration={self.duration} sec)"
|
|
@@ -71,24 +67,19 @@ class EpisodeManager:
|
|
|
71
67
|
|
|
72
68
|
class Season:
|
|
73
69
|
def __init__(self, season_data: Dict[str, Union[int, str, None]]):
|
|
74
|
-
self.images = {}
|
|
75
70
|
self.season_data = season_data
|
|
76
71
|
|
|
77
|
-
self.id: int = season_data.get('id')
|
|
78
|
-
self.scws_id: int = season_data.get('scws_id')
|
|
79
|
-
self.imdb_id: int = season_data.get('imdb_id')
|
|
80
|
-
self.number: int = season_data.get('number')
|
|
81
|
-
self.name: str = season_data.get('name')
|
|
82
|
-
self.slug: str = season_data.get('slug')
|
|
83
|
-
self.plot: str = season_data.get('plot')
|
|
84
|
-
self.type: str = season_data.get('type')
|
|
85
|
-
self.seasons_count: int = season_data.get('seasons_count')
|
|
72
|
+
self.id: int = season_data.get('id', 0)
|
|
73
|
+
self.scws_id: int = season_data.get('scws_id', 0)
|
|
74
|
+
self.imdb_id: int = season_data.get('imdb_id', 0)
|
|
75
|
+
self.number: int = season_data.get('number', 0)
|
|
76
|
+
self.name: str = season_data.get('name', '')
|
|
77
|
+
self.slug: str = season_data.get('slug', '')
|
|
78
|
+
self.plot: str = season_data.get('plot', '')
|
|
79
|
+
self.type: str = season_data.get('type', '')
|
|
80
|
+
self.seasons_count: int = season_data.get('seasons_count', 0)
|
|
86
81
|
self.episodes: EpisodeManager = EpisodeManager()
|
|
87
82
|
|
|
88
|
-
def collect_images(self, SITE_NAME, domain):
|
|
89
|
-
for dict_image in self.season_data.get('images'):
|
|
90
|
-
self.images[dict_image.get('type')] = f"https://cdn.{SITE_NAME}.{domain}/images/{dict_image.get('filename')}"
|
|
91
|
-
|
|
92
83
|
|
|
93
84
|
class Stream:
|
|
94
85
|
def __init__(self, name: str, url: str, active: bool):
|
{StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/1337xx/site.py
RENAMED
|
@@ -19,9 +19,11 @@ from StreamingCommunity.Api.Template.Class.SearchType import MediaManager
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
# Variable
|
|
22
|
-
from .costant import SITE_NAME
|
|
22
|
+
from .costant import SITE_NAME, DOMAIN_NOW
|
|
23
23
|
media_search_manager = MediaManager()
|
|
24
24
|
table_show_manager = TVShowManager()
|
|
25
|
+
max_timeout = config_manager.get_int("REQUESTS", "timeout")
|
|
26
|
+
disable_searchDomain = config_manager.get_bool("DEFAULT", "disable_searchDomain")
|
|
25
27
|
|
|
26
28
|
|
|
27
29
|
def title_search(word_to_search: str) -> int:
|
|
@@ -38,8 +40,10 @@ def title_search(word_to_search: str) -> int:
|
|
|
38
40
|
table_show_manager.clear()
|
|
39
41
|
|
|
40
42
|
# Find new domain if prev dont work
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
domain_to_use = DOMAIN_NOW
|
|
44
|
+
|
|
45
|
+
if not disable_searchDomain:
|
|
46
|
+
domain_to_use, base_url = search_domain(SITE_NAME, f"https://{SITE_NAME}")
|
|
43
47
|
|
|
44
48
|
# Construct the full site URL and load the search page
|
|
45
49
|
try:
|
|
@@ -57,7 +61,6 @@ def title_search(word_to_search: str) -> int:
|
|
|
57
61
|
# Create soup and find table
|
|
58
62
|
soup = BeautifulSoup(response.text, "html.parser")
|
|
59
63
|
|
|
60
|
-
# Scrape div film in table on single page
|
|
61
64
|
for tr in soup.find_all('tr'):
|
|
62
65
|
try:
|
|
63
66
|
|
|
@@ -72,8 +75,8 @@ def title_search(word_to_search: str) -> int:
|
|
|
72
75
|
|
|
73
76
|
media_search_manager.add_media(title_info)
|
|
74
77
|
|
|
75
|
-
except:
|
|
76
|
-
|
|
78
|
+
except Exception as e:
|
|
79
|
+
print(f"Error parsing a film entry: {e}")
|
|
77
80
|
|
|
78
81
|
# Return the number of titles found
|
|
79
82
|
return media_search_manager.get_length()
|
{StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/1337xx/title.py
RENAMED
|
@@ -21,7 +21,7 @@ from StreamingCommunity.Api.Template.Class.SearchType import MediaItem
|
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
# Config
|
|
24
|
-
from .costant import
|
|
24
|
+
from .costant import DOMAIN_NOW, SITE_NAME, MOVIE_FOLDER
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
def download_title(select_title: MediaItem):
|
|
@@ -39,7 +39,7 @@ def download_title(select_title: MediaItem):
|
|
|
39
39
|
# Define output path
|
|
40
40
|
title_name = os_manager.get_sanitize_file(select_title.name)
|
|
41
41
|
mp4_path = os_manager.get_sanitize_path(
|
|
42
|
-
os.path.join(
|
|
42
|
+
os.path.join(MOVIE_FOLDER, title_name.replace(".mp4", ""))
|
|
43
43
|
)
|
|
44
44
|
|
|
45
45
|
# Create output folder
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# 26.05.24
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
# Internal utilities
|
|
7
|
+
from StreamingCommunity.Util._jsonConfig import config_manager
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
SITE_NAME = os.path.basename(os.path.dirname(os.path.abspath(__file__)))
|
|
11
|
+
ROOT_PATH = config_manager.get('DEFAULT', 'root_path')
|
|
12
|
+
DOMAIN_NOW = config_manager.get_dict('SITE', SITE_NAME)['domain']
|
|
13
|
+
|
|
14
|
+
SERIES_FOLDER = os.path.join(ROOT_PATH, config_manager.get('DEFAULT', 'serie_folder_name'))
|
|
15
|
+
MOVIE_FOLDER = os.path.join(ROOT_PATH, config_manager.get('DEFAULT', 'movie_folder_name'))
|
|
16
|
+
|
|
17
|
+
if config_manager.get_bool("DEFAULT", "add_siteName"):
|
|
18
|
+
SERIES_FOLDER = os.path.join(ROOT_PATH, SITE_NAME, config_manager.get('DEFAULT', 'serie_folder_name'))
|
|
19
|
+
MOVIE_FOLDER = os.path.join(ROOT_PATH, SITE_NAME, config_manager.get('DEFAULT', 'movie_folder_name'))
|
|
@@ -22,7 +22,7 @@ from StreamingCommunity.Api.Player.supervideo import VideoSource
|
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
# Config
|
|
25
|
-
from .costant import
|
|
25
|
+
from .costant import MOVIE_FOLDER
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
def download_film(select_title: MediaItem) -> str:
|
|
@@ -47,7 +47,7 @@ def download_film(select_title: MediaItem) -> str:
|
|
|
47
47
|
# Define output path
|
|
48
48
|
title_name = os_manager.get_sanitize_file(select_title.name) + ".mp4"
|
|
49
49
|
mp4_path = os_manager.get_sanitize_path(
|
|
50
|
-
os.path.join(
|
|
50
|
+
os.path.join(MOVIE_FOLDER, title_name.replace(".mp4", ""))
|
|
51
51
|
)
|
|
52
52
|
|
|
53
53
|
# Get m3u8 master playlist
|
|
@@ -19,9 +19,11 @@ from StreamingCommunity.Api.Template.Class.SearchType import MediaManager
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
# Variable
|
|
22
|
-
from .costant import SITE_NAME
|
|
22
|
+
from .costant import SITE_NAME, DOMAIN_NOW
|
|
23
23
|
media_search_manager = MediaManager()
|
|
24
24
|
table_show_manager = TVShowManager()
|
|
25
|
+
max_timeout = config_manager.get_int("REQUESTS", "timeout")
|
|
26
|
+
disable_searchDomain = config_manager.get_bool("DEFAULT", "disable_searchDomain")
|
|
25
27
|
|
|
26
28
|
|
|
27
29
|
def title_search(title_search: str) -> int:
|
|
@@ -38,20 +40,18 @@ def title_search(title_search: str) -> int:
|
|
|
38
40
|
table_show_manager.clear()
|
|
39
41
|
|
|
40
42
|
# Find new domain if prev dont work
|
|
41
|
-
|
|
42
|
-
domain_to_use, _ = search_domain(SITE_NAME, f"https://{SITE_NAME}")
|
|
43
|
+
domain_to_use = DOMAIN_NOW
|
|
43
44
|
|
|
45
|
+
if not disable_searchDomain:
|
|
46
|
+
domain_to_use, base_url = search_domain(SITE_NAME, f"https://{SITE_NAME}")
|
|
47
|
+
|
|
44
48
|
# Send request to search for title
|
|
45
49
|
client = httpx.Client()
|
|
46
50
|
|
|
47
51
|
try:
|
|
48
52
|
response = client.get(
|
|
49
53
|
url=f"https://{SITE_NAME}.{domain_to_use}/?story={title_search.replace(' ', '+')}&do=search&subaction=search&titleonly=3",
|
|
50
|
-
headers={
|
|
51
|
-
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
|
|
52
|
-
'accept-language': 'it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7',
|
|
53
|
-
'User-Agent': get_headers()
|
|
54
|
-
},
|
|
54
|
+
headers={'User-Agent': get_headers()},
|
|
55
55
|
timeout=max_timeout
|
|
56
56
|
)
|
|
57
57
|
response.raise_for_status()
|
|
@@ -62,21 +62,27 @@ def title_search(title_search: str) -> int:
|
|
|
62
62
|
|
|
63
63
|
# Create soup and find table
|
|
64
64
|
soup = BeautifulSoup(response.text, "html.parser")
|
|
65
|
-
table_content = soup.find('div', id="dle-content")
|
|
66
65
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
'
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
66
|
+
for row in soup.find_all('div', class_='col-lg-3 col-md-3 col-xs-4'):
|
|
67
|
+
try:
|
|
68
|
+
|
|
69
|
+
title_element = row.find('h2', class_='titleFilm').find('a')
|
|
70
|
+
title = title_element.get_text(strip=True)
|
|
71
|
+
link = title_element['href']
|
|
72
|
+
|
|
73
|
+
imdb_element = row.find('div', class_='imdb-rate')
|
|
74
|
+
imdb_rating = imdb_element.get_text(strip=True).split(":")[-1]
|
|
75
|
+
|
|
76
|
+
film_info = {
|
|
77
|
+
'name': title,
|
|
78
|
+
'url': link,
|
|
79
|
+
'score': imdb_rating
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
media_search_manager.add_media(film_info)
|
|
83
|
+
|
|
84
|
+
except AttributeError as e:
|
|
85
|
+
print(f"Error parsing a film entry: {e}")
|
|
80
86
|
|
|
81
87
|
# Return the number of titles found
|
|
82
88
|
return media_search_manager.get_length()
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# 26.05.24
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
# Internal utilities
|
|
7
|
+
from StreamingCommunity.Util._jsonConfig import config_manager
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
SITE_NAME = os.path.basename(os.path.dirname(os.path.abspath(__file__)))
|
|
11
|
+
ROOT_PATH = config_manager.get('DEFAULT', 'root_path')
|
|
12
|
+
DOMAIN_NOW = config_manager.get_dict('SITE', SITE_NAME)['domain']
|
|
13
|
+
|
|
14
|
+
SERIES_FOLDER = os.path.join(ROOT_PATH, config_manager.get('DEFAULT', 'serie_folder_name'))
|
|
15
|
+
MOVIE_FOLDER = os.path.join(ROOT_PATH, config_manager.get('DEFAULT', 'movie_folder_name'))
|
|
16
|
+
|
|
17
|
+
if config_manager.get_bool("DEFAULT", "add_siteName"):
|
|
18
|
+
SERIES_FOLDER = os.path.join(ROOT_PATH, SITE_NAME, config_manager.get('DEFAULT', 'serie_folder_name'))
|
|
19
|
+
MOVIE_FOLDER = os.path.join(ROOT_PATH, SITE_NAME, config_manager.get('DEFAULT', 'movie_folder_name'))
|
|
@@ -23,7 +23,7 @@ from StreamingCommunity.Api.Player.vixcloud import VideoSourceAnime
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
# Variable
|
|
26
|
-
from .costant import
|
|
26
|
+
from .costant import SITE_NAME, SERIES_FOLDER, MOVIE_FOLDER
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
|
|
@@ -54,11 +54,11 @@ def download_episode(index_select: int, scrape_serie: ScrapeSerieAnime, video_so
|
|
|
54
54
|
|
|
55
55
|
if scrape_serie.is_series:
|
|
56
56
|
mp4_path = os_manager.get_sanitize_path(
|
|
57
|
-
os.path.join(
|
|
57
|
+
os.path.join(SERIES_FOLDER, scrape_serie.series_name)
|
|
58
58
|
)
|
|
59
59
|
else:
|
|
60
60
|
mp4_path = os_manager.get_sanitize_path(
|
|
61
|
-
os.path.join(
|
|
61
|
+
os.path.join(MOVIE_FOLDER, scrape_serie.series_name)
|
|
62
62
|
)
|
|
63
63
|
|
|
64
64
|
# Create output folder
|
{StreamingCommunity-2.0.5 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/animeunity/site.py
RENAMED
|
@@ -21,10 +21,11 @@ from StreamingCommunity.Api.Template.Class.SearchType import MediaManager
|
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
# Variable
|
|
24
|
-
from .costant import SITE_NAME
|
|
24
|
+
from .costant import SITE_NAME, DOMAIN_NOW
|
|
25
25
|
media_search_manager = MediaManager()
|
|
26
26
|
table_show_manager = TVShowManager()
|
|
27
|
-
|
|
27
|
+
max_timeout = config_manager.get_int("REQUESTS", "timeout")
|
|
28
|
+
disable_searchDomain = config_manager.get_bool("DEFAULT", "disable_searchDomain")
|
|
28
29
|
|
|
29
30
|
|
|
30
31
|
def get_token(site_name: str, domain: str) -> dict:
|
|
@@ -40,7 +41,10 @@ def get_token(site_name: str, domain: str) -> dict:
|
|
|
40
41
|
"""
|
|
41
42
|
|
|
42
43
|
# Send a GET request to the specified URL composed of the site name and domain
|
|
43
|
-
response = httpx.get(
|
|
44
|
+
response = httpx.get(
|
|
45
|
+
url=f"https://www.{site_name}.{domain}",
|
|
46
|
+
timeout=max_timeout
|
|
47
|
+
)
|
|
44
48
|
response.raise_for_status()
|
|
45
49
|
|
|
46
50
|
# Initialize variables to store CSRF token
|
|
@@ -103,8 +107,10 @@ def title_search(title: str) -> int:
|
|
|
103
107
|
table_show_manager.clear()
|
|
104
108
|
|
|
105
109
|
# Get token and session value from configuration
|
|
106
|
-
|
|
107
|
-
|
|
110
|
+
domain_to_use = DOMAIN_NOW
|
|
111
|
+
|
|
112
|
+
if not disable_searchDomain:
|
|
113
|
+
domain_to_use, base_url = search_domain(SITE_NAME, f"https://www.{SITE_NAME}")
|
|
108
114
|
|
|
109
115
|
data = get_token(SITE_NAME, domain_to_use)
|
|
110
116
|
|
|
@@ -140,21 +146,23 @@ def title_search(title: str) -> int:
|
|
|
140
146
|
except Exception as e:
|
|
141
147
|
console.print(f"Site: {SITE_NAME}, request search error: {e}")
|
|
142
148
|
|
|
143
|
-
# Process each record returned in the response
|
|
144
149
|
for dict_title in response.json()['records']:
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
150
|
+
try:
|
|
151
|
+
|
|
152
|
+
# Rename keys for consistency
|
|
153
|
+
dict_title['name'] = get_real_title(dict_title)
|
|
154
|
+
|
|
155
|
+
media_search_manager.add_media({
|
|
156
|
+
'id': dict_title.get('id'),
|
|
157
|
+
'slug': dict_title.get('slug'),
|
|
158
|
+
'name': dict_title.get('name'),
|
|
159
|
+
'type': dict_title.get('type'),
|
|
160
|
+
'score': dict_title.get('score'),
|
|
161
|
+
'episodes_count': dict_title.get('episodes_count')
|
|
162
|
+
})
|
|
163
|
+
|
|
164
|
+
except Exception as e:
|
|
165
|
+
print(f"Error parsing a film entry: {e}")
|
|
158
166
|
|
|
159
167
|
# Return the length of media search manager
|
|
160
168
|
return media_search_manager.get_length()
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# 03.07.24
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
# Internal utilities
|
|
7
|
+
from StreamingCommunity.Util._jsonConfig import config_manager
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
SITE_NAME = os.path.basename(os.path.dirname(os.path.abspath(__file__)))
|
|
11
|
+
ROOT_PATH = config_manager.get('DEFAULT', 'root_path')
|
|
12
|
+
DOMAIN_NOW = config_manager.get_dict('SITE', SITE_NAME)['domain']
|
|
13
|
+
|
|
14
|
+
SERIES_FOLDER = os.path.join(ROOT_PATH, config_manager.get('DEFAULT', 'serie_folder_name'))
|
|
15
|
+
MOVIE_FOLDER = os.path.join(ROOT_PATH, config_manager.get('DEFAULT', 'movie_folder_name'))
|
|
16
|
+
|
|
17
|
+
if config_manager.get_bool("DEFAULT", "add_siteName"):
|
|
18
|
+
SERIES_FOLDER = os.path.join(ROOT_PATH, SITE_NAME, config_manager.get('DEFAULT', 'serie_folder_name'))
|
|
19
|
+
MOVIE_FOLDER = os.path.join(ROOT_PATH, SITE_NAME, config_manager.get('DEFAULT', 'movie_folder_name'))
|