StreamingCommunity 2.2.0__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.

Files changed (115) hide show
  1. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/PKG-INFO +35 -21
  2. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/README.md +34 -20
  3. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Player/Helper/Vixcloud/util.py +15 -24
  4. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/1337xx/site.py +9 -6
  5. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/1337xx/title.py +2 -2
  6. StreamingCommunity-2.3.0/StreamingCommunity/Api/Site/altadefinizione/costant.py +19 -0
  7. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/altadefinizione/film.py +2 -2
  8. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/altadefinizione/site.py +28 -22
  9. StreamingCommunity-2.3.0/StreamingCommunity/Api/Site/animeunity/costant.py +19 -0
  10. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/animeunity/film_serie.py +3 -3
  11. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/animeunity/site.py +27 -19
  12. StreamingCommunity-2.3.0/StreamingCommunity/Api/Site/cb01new/costant.py +19 -0
  13. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/cb01new/film.py +2 -2
  14. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/cb01new/site.py +20 -13
  15. StreamingCommunity-2.3.0/StreamingCommunity/Api/Site/ddlstreamitaly/costant.py +20 -0
  16. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/ddlstreamitaly/series.py +2 -2
  17. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/ddlstreamitaly/site.py +9 -5
  18. StreamingCommunity-2.3.0/StreamingCommunity/Api/Site/guardaserie/costant.py +19 -0
  19. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/guardaserie/series.py +2 -3
  20. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/guardaserie/site.py +10 -6
  21. StreamingCommunity-2.3.0/StreamingCommunity/Api/Site/ilcorsaronero/costant.py +19 -0
  22. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/ilcorsaronero/site.py +22 -13
  23. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/ilcorsaronero/title.py +3 -3
  24. StreamingCommunity-2.3.0/StreamingCommunity/Api/Site/mostraguarda/costant.py +19 -0
  25. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/mostraguarda/film.py +2 -2
  26. StreamingCommunity-2.3.0/StreamingCommunity/Api/Site/streamingcommunity/costant.py +19 -0
  27. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/streamingcommunity/film.py +3 -3
  28. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/streamingcommunity/series.py +2 -2
  29. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/streamingcommunity/site.py +29 -28
  30. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/streamingcommunity/util/ScrapeSerie.py +24 -24
  31. StreamingCommunity-2.3.0/StreamingCommunity/Api/Template/Util/get_domain.py +137 -0
  32. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/Downloader/HLS/downloader.py +3 -2
  33. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/Downloader/HLS/segments.py +20 -15
  34. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Upload/version.py +1 -1
  35. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity.egg-info/PKG-INFO +35 -21
  36. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/Test/call_updateDomain.py +47 -4
  37. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/setup.py +1 -1
  38. StreamingCommunity-2.2.0/StreamingCommunity/Api/Site/altadefinizione/costant.py +0 -15
  39. StreamingCommunity-2.2.0/StreamingCommunity/Api/Site/animeunity/costant.py +0 -15
  40. StreamingCommunity-2.2.0/StreamingCommunity/Api/Site/cb01new/costant.py +0 -15
  41. StreamingCommunity-2.2.0/StreamingCommunity/Api/Site/ddlstreamitaly/costant.py +0 -16
  42. StreamingCommunity-2.2.0/StreamingCommunity/Api/Site/guardaserie/costant.py +0 -15
  43. StreamingCommunity-2.2.0/StreamingCommunity/Api/Site/ilcorsaronero/costant.py +0 -15
  44. StreamingCommunity-2.2.0/StreamingCommunity/Api/Site/mostraguarda/costant.py +0 -15
  45. StreamingCommunity-2.2.0/StreamingCommunity/Api/Site/streamingcommunity/costant.py +0 -15
  46. StreamingCommunity-2.2.0/StreamingCommunity/Api/Template/Util/get_domain.py +0 -174
  47. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/MANIFEST.in +0 -0
  48. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Player/Helper/Vixcloud/js_parser.py +0 -0
  49. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Player/ddl.py +0 -0
  50. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Player/maxstream.py +0 -0
  51. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Player/supervideo.py +0 -0
  52. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Player/vixcloud.py +0 -0
  53. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/1337xx/__init__.py +0 -0
  54. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/1337xx/costant.py +0 -0
  55. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/altadefinizione/__init__.py +0 -0
  56. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/animeunity/__init__.py +0 -0
  57. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/animeunity/util/ScrapeSerie.py +0 -0
  58. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/cb01new/__init__.py +0 -0
  59. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/ddlstreamitaly/__init__.py +0 -0
  60. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/ddlstreamitaly/util/ScrapeSerie.py +0 -0
  61. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/guardaserie/__init__.py +0 -0
  62. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/guardaserie/util/ScrapeSerie.py +0 -0
  63. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/ilcorsaronero/__init__.py +0 -0
  64. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/ilcorsaronero/util/ilCorsarScraper.py +0 -0
  65. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/mostraguarda/__init__.py +0 -0
  66. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Site/streamingcommunity/__init__.py +0 -0
  67. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Template/Class/SearchType.py +0 -0
  68. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Template/Util/__init__.py +0 -0
  69. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Template/Util/manage_ep.py +0 -0
  70. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Template/Util/recall_search.py +0 -0
  71. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Template/__init__.py +0 -0
  72. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Api/Template/site.py +0 -0
  73. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/Downloader/HLS/proxyes.py +0 -0
  74. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/Downloader/MP4/downloader.py +0 -0
  75. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/Downloader/TOR/downloader.py +0 -0
  76. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/Downloader/__init__.py +0 -0
  77. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/FFmpeg/__init__.py +0 -0
  78. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/FFmpeg/capture.py +0 -0
  79. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/FFmpeg/command.py +0 -0
  80. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/FFmpeg/util.py +0 -0
  81. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/M3U8/__init__.py +0 -0
  82. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/M3U8/decryptor.py +0 -0
  83. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/M3U8/estimator.py +0 -0
  84. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/M3U8/parser.py +0 -0
  85. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/M3U8/url_fixer.py +0 -0
  86. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/TMBD/__init__.py +0 -0
  87. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/TMBD/obj_tmbd.py +0 -0
  88. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Lib/TMBD/tmdb.py +0 -0
  89. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Upload/update.py +0 -0
  90. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/_jsonConfig.py +0 -0
  91. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/call_stack.py +0 -0
  92. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/color.py +0 -0
  93. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/console.py +0 -0
  94. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/ffmpeg_installer.py +0 -0
  95. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/headers.py +0 -0
  96. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/logger.py +0 -0
  97. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/message.py +0 -0
  98. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/os.py +0 -0
  99. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/Util/table.py +0 -0
  100. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/__init__.py +0 -0
  101. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity/run.py +0 -0
  102. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity.egg-info/SOURCES.txt +0 -0
  103. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity.egg-info/dependency_links.txt +0 -0
  104. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity.egg-info/entry_points.txt +0 -0
  105. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity.egg-info/requires.txt +0 -0
  106. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/StreamingCommunity.egg-info/top_level.txt +0 -0
  107. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/Test/Download/HLS.py +0 -0
  108. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/Test/Download/MP4.py +0 -0
  109. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/Test/Download/TOR.py +0 -0
  110. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/Test/Player/helper/vixcloud.py +0 -0
  111. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/Test/Player/maxtream.py +0 -0
  112. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/Test/Player/supervideo.py +0 -0
  113. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/Test/Player/vixcloud.py +0 -0
  114. {StreamingCommunity-2.2.0 → StreamingCommunity-2.3.0}/Test/big_search.py +0 -0
  115. {StreamingCommunity-2.2.0 → 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.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
- - `not_close`: If true, continues running after downloading
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
 
@@ -289,10 +305,9 @@ Description: <p align="center">
289
305
  - `cleanup_tmp_folder`: Remove temporary .ts files after download
290
306
 
291
307
  > [!IMPORTANT]
292
- > Set `tqdm_use_large_bar` to `false` when using Termux or terminals with limited width to prevent display issues
308
+ > Set `tqdm_use_large_bar` to `false` when using Termux or terminals with limited width to prevent network monitoring issues
293
309
 
294
310
 
295
- <br>
296
311
 
297
312
  ### Language Settings
298
313
 
@@ -341,7 +356,6 @@ Description: <p align="center">
341
356
  - `force_resolution`: Force specific resolution (-1 for best available, or specify 1080, 720, 360)
342
357
  - `get_only_link`: Return M3U8 playlist/index URL instead of downloading
343
358
 
344
- <br>
345
359
 
346
360
  # COMMAND
347
361
 
@@ -357,7 +371,6 @@ Description: <p align="center">
357
371
  - Enter a season number followed by `-*` to download from that season to the end.
358
372
  * **Example:** `3-*` will download from *Season 3* to the final season.
359
373
 
360
- <br>
361
374
 
362
375
  # Docker
363
376
 
@@ -396,15 +409,16 @@ Description: <p align="center">
396
409
 
397
410
  | Website | Status |
398
411
  |:-------------------|:------:|
399
- | 1337xx | ✅ |
400
- | Altadefinizione | ✅ |
401
- | AnimeUnity | ✅ |
402
- | Ilcorsaronero | ✅ |
403
- | CB01New | ✅ |
404
- | DDLStreamItaly | ✅ |
405
- | GuardaSerie | ✅ |
406
- | MostraGuarda | ✅ |
407
- | 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
+
408
422
 
409
423
  # Tutorials
410
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
- - `not_close`: If true, continues running after downloading
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
 
@@ -280,10 +296,9 @@ The configuration file is divided into several main sections:
280
296
  - `cleanup_tmp_folder`: Remove temporary .ts files after download
281
297
 
282
298
  > [!IMPORTANT]
283
- > Set `tqdm_use_large_bar` to `false` when using Termux or terminals with limited width to prevent display issues
299
+ > Set `tqdm_use_large_bar` to `false` when using Termux or terminals with limited width to prevent network monitoring issues
284
300
 
285
301
 
286
- <br>
287
302
 
288
303
  ### Language Settings
289
304
 
@@ -332,7 +347,6 @@ forced-ita hin - Hindi pol - Polish tur - Turkish
332
347
  - `force_resolution`: Force specific resolution (-1 for best available, or specify 1080, 720, 360)
333
348
  - `get_only_link`: Return M3U8 playlist/index URL instead of downloading
334
349
 
335
- <br>
336
350
 
337
351
  # COMMAND
338
352
 
@@ -348,7 +362,6 @@ forced-ita hin - Hindi pol - Polish tur - Turkish
348
362
  - Enter a season number followed by `-*` to download from that season to the end.
349
363
  * **Example:** `3-*` will download from *Season 3* to the final season.
350
364
 
351
- <br>
352
365
 
353
366
  # Docker
354
367
 
@@ -387,15 +400,16 @@ The `run-container` command mounts also the `config.json` file, so any change to
387
400
 
388
401
  | Website | Status |
389
402
  |:-------------------|:------:|
390
- | 1337xx | ✅ |
391
- | Altadefinizione | ✅ |
392
- | AnimeUnity | ✅ |
393
- | Ilcorsaronero | ✅ |
394
- | CB01New | ✅ |
395
- | DDLStreamItaly | ✅ |
396
- | GuardaSerie | ✅ |
397
- | MostraGuarda | ✅ |
398
- | 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
+
399
413
 
400
414
  # Tutorials
401
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):
@@ -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
- max_timeout = config_manager.get_int("REQUESTS", "timeout")
42
- domain_to_use, _ = search_domain(SITE_NAME, f"https://{SITE_NAME}")
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
- continue
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()
@@ -21,7 +21,7 @@ from StreamingCommunity.Api.Template.Class.SearchType import MediaItem
21
21
 
22
22
 
23
23
  # Config
24
- from .costant import ROOT_PATH, DOMAIN_NOW, SITE_NAME, MOVIE_FOLDER
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(ROOT_PATH, MOVIE_FOLDER, title_name.replace(".mp4", ""))
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 ROOT_PATH, MOVIE_FOLDER
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(ROOT_PATH, MOVIE_FOLDER, title_name.replace(".mp4", ""))
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
- max_timeout = config_manager.get_int("REQUESTS", "timeout")
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
- # Scrape div film in table on single page
68
- for film_div in table_content.find_all('div', class_='col-lg-3'):
69
- title = film_div.find('h2', class_='titleFilm').get_text(strip=True)
70
- link = film_div.find('h2', class_='titleFilm').find('a')['href']
71
- imdb_rating = film_div.find('div', class_='imdb-rate').get_text(strip=True).split(":")[-1]
72
-
73
- film_info = {
74
- 'name': title,
75
- 'url': link,
76
- 'score': imdb_rating
77
- }
78
-
79
- media_search_manager.add_media(film_info)
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 ROOT_PATH, SITE_NAME, SERIES_FOLDER, MOVIE_FOLDER
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(ROOT_PATH, SERIES_FOLDER, scrape_serie.series_name)
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(ROOT_PATH, MOVIE_FOLDER, scrape_serie.series_name)
61
+ os.path.join(MOVIE_FOLDER, scrape_serie.series_name)
62
62
  )
63
63
 
64
64
  # Create output folder
@@ -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(f"https://www.{site_name}.{domain}")
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
- max_timeout = config_manager.get_int("REQUESTS", "timeout")
107
- domain_to_use, _ = search_domain(SITE_NAME, f"https://www.{SITE_NAME}")
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
- # Rename keys for consistency
147
- dict_title['name'] = get_real_title(dict_title)
148
-
149
- # Add the record to media search manager if the name is not None
150
- media_search_manager.add_media({
151
- 'id': dict_title.get('id'),
152
- 'slug': dict_title.get('slug'),
153
- 'name': dict_title.get('name'),
154
- 'type': dict_title.get('type'),
155
- 'score': dict_title.get('score'),
156
- 'episodes_count': dict_title.get('episodes_count')
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'))