StreamingCommunity 1.8.0__py3-none-any.whl → 1.9.2__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.

Files changed (98) hide show
  1. StreamingCommunity/run.py +18 -13
  2. {StreamingCommunity-1.8.0.dist-info → StreamingCommunity-1.9.2.dist-info}/METADATA +157 -63
  3. StreamingCommunity-1.9.2.dist-info/RECORD +7 -0
  4. {StreamingCommunity-1.8.0.dist-info → StreamingCommunity-1.9.2.dist-info}/WHEEL +1 -1
  5. {StreamingCommunity-1.8.0.dist-info → StreamingCommunity-1.9.2.dist-info}/entry_points.txt +1 -0
  6. StreamingCommunity/Src/Api/Player/Helper/Vixcloud/js_parser.py +0 -143
  7. StreamingCommunity/Src/Api/Player/Helper/Vixcloud/util.py +0 -166
  8. StreamingCommunity/Src/Api/Player/ddl.py +0 -89
  9. StreamingCommunity/Src/Api/Player/maxstream.py +0 -151
  10. StreamingCommunity/Src/Api/Player/supervideo.py +0 -194
  11. StreamingCommunity/Src/Api/Player/vixcloud.py +0 -224
  12. StreamingCommunity/Src/Api/Site/1337xx/__init__.py +0 -50
  13. StreamingCommunity/Src/Api/Site/1337xx/costant.py +0 -15
  14. StreamingCommunity/Src/Api/Site/1337xx/site.py +0 -84
  15. StreamingCommunity/Src/Api/Site/1337xx/title.py +0 -66
  16. StreamingCommunity/Src/Api/Site/altadefinizione/__init__.py +0 -50
  17. StreamingCommunity/Src/Api/Site/altadefinizione/costant.py +0 -15
  18. StreamingCommunity/Src/Api/Site/altadefinizione/film.py +0 -69
  19. StreamingCommunity/Src/Api/Site/altadefinizione/site.py +0 -86
  20. StreamingCommunity/Src/Api/Site/animeunity/__init__.py +0 -50
  21. StreamingCommunity/Src/Api/Site/animeunity/anime.py +0 -126
  22. StreamingCommunity/Src/Api/Site/animeunity/costant.py +0 -15
  23. StreamingCommunity/Src/Api/Site/animeunity/film_serie.py +0 -131
  24. StreamingCommunity/Src/Api/Site/animeunity/site.py +0 -165
  25. StreamingCommunity/Src/Api/Site/animeunity/util/ScrapeSerie.py +0 -97
  26. StreamingCommunity/Src/Api/Site/bitsearch/__init__.py +0 -51
  27. StreamingCommunity/Src/Api/Site/bitsearch/costant.py +0 -15
  28. StreamingCommunity/Src/Api/Site/bitsearch/site.py +0 -84
  29. StreamingCommunity/Src/Api/Site/bitsearch/title.py +0 -47
  30. StreamingCommunity/Src/Api/Site/cb01new/__init__.py +0 -51
  31. StreamingCommunity/Src/Api/Site/cb01new/costant.py +0 -15
  32. StreamingCommunity/Src/Api/Site/cb01new/film.py +0 -69
  33. StreamingCommunity/Src/Api/Site/cb01new/site.py +0 -74
  34. StreamingCommunity/Src/Api/Site/ddlstreamitaly/Player/ScrapeSerie.py +0 -83
  35. StreamingCommunity/Src/Api/Site/ddlstreamitaly/__init__.py +0 -57
  36. StreamingCommunity/Src/Api/Site/ddlstreamitaly/costant.py +0 -16
  37. StreamingCommunity/Src/Api/Site/ddlstreamitaly/series.py +0 -142
  38. StreamingCommunity/Src/Api/Site/ddlstreamitaly/site.py +0 -93
  39. StreamingCommunity/Src/Api/Site/ddlstreamitaly/util/ScrapeSerie.py +0 -83
  40. StreamingCommunity/Src/Api/Site/guardaserie/Player/ScrapeSerie.py +0 -110
  41. StreamingCommunity/Src/Api/Site/guardaserie/__init__.py +0 -52
  42. StreamingCommunity/Src/Api/Site/guardaserie/costant.py +0 -15
  43. StreamingCommunity/Src/Api/Site/guardaserie/series.py +0 -195
  44. StreamingCommunity/Src/Api/Site/guardaserie/site.py +0 -84
  45. StreamingCommunity/Src/Api/Site/guardaserie/util/ScrapeSerie.py +0 -110
  46. StreamingCommunity/Src/Api/Site/mostraguarda/__init__.py +0 -48
  47. StreamingCommunity/Src/Api/Site/mostraguarda/costant.py +0 -15
  48. StreamingCommunity/Src/Api/Site/mostraguarda/film.py +0 -94
  49. StreamingCommunity/Src/Api/Site/piratebays/__init__.py +0 -50
  50. StreamingCommunity/Src/Api/Site/piratebays/costant.py +0 -15
  51. StreamingCommunity/Src/Api/Site/piratebays/site.py +0 -89
  52. StreamingCommunity/Src/Api/Site/piratebays/title.py +0 -45
  53. StreamingCommunity/Src/Api/Site/streamingcommunity/__init__.py +0 -55
  54. StreamingCommunity/Src/Api/Site/streamingcommunity/costant.py +0 -15
  55. StreamingCommunity/Src/Api/Site/streamingcommunity/film.py +0 -70
  56. StreamingCommunity/Src/Api/Site/streamingcommunity/series.py +0 -203
  57. StreamingCommunity/Src/Api/Site/streamingcommunity/site.py +0 -126
  58. StreamingCommunity/Src/Api/Site/streamingcommunity/util/ScrapeSerie.py +0 -113
  59. StreamingCommunity/Src/Api/Template/Class/SearchType.py +0 -101
  60. StreamingCommunity/Src/Api/Template/Util/__init__.py +0 -5
  61. StreamingCommunity/Src/Api/Template/Util/get_domain.py +0 -137
  62. StreamingCommunity/Src/Api/Template/Util/manage_ep.py +0 -153
  63. StreamingCommunity/Src/Api/Template/Util/recall_search.py +0 -37
  64. StreamingCommunity/Src/Api/Template/__init__.py +0 -3
  65. StreamingCommunity/Src/Api/Template/site.py +0 -87
  66. StreamingCommunity/Src/Lib/Downloader/HLS/downloader.py +0 -968
  67. StreamingCommunity/Src/Lib/Downloader/HLS/proxyes.py +0 -110
  68. StreamingCommunity/Src/Lib/Downloader/HLS/segments.py +0 -540
  69. StreamingCommunity/Src/Lib/Downloader/MP4/downloader.py +0 -156
  70. StreamingCommunity/Src/Lib/Downloader/TOR/downloader.py +0 -222
  71. StreamingCommunity/Src/Lib/Downloader/__init__.py +0 -5
  72. StreamingCommunity/Src/Lib/Driver/driver_1.py +0 -76
  73. StreamingCommunity/Src/Lib/FFmpeg/__init__.py +0 -4
  74. StreamingCommunity/Src/Lib/FFmpeg/capture.py +0 -170
  75. StreamingCommunity/Src/Lib/FFmpeg/command.py +0 -292
  76. StreamingCommunity/Src/Lib/FFmpeg/util.py +0 -242
  77. StreamingCommunity/Src/Lib/M3U8/__init__.py +0 -6
  78. StreamingCommunity/Src/Lib/M3U8/decryptor.py +0 -129
  79. StreamingCommunity/Src/Lib/M3U8/estimator.py +0 -173
  80. StreamingCommunity/Src/Lib/M3U8/parser.py +0 -666
  81. StreamingCommunity/Src/Lib/M3U8/url_fixer.py +0 -52
  82. StreamingCommunity/Src/Lib/TMBD/__init__.py +0 -2
  83. StreamingCommunity/Src/Lib/TMBD/obj_tmbd.py +0 -39
  84. StreamingCommunity/Src/Lib/TMBD/tmdb.py +0 -346
  85. StreamingCommunity/Src/Upload/update.py +0 -64
  86. StreamingCommunity/Src/Upload/version.py +0 -5
  87. StreamingCommunity/Src/Util/_jsonConfig.py +0 -204
  88. StreamingCommunity/Src/Util/call_stack.py +0 -42
  89. StreamingCommunity/Src/Util/color.py +0 -20
  90. StreamingCommunity/Src/Util/console.py +0 -12
  91. StreamingCommunity/Src/Util/headers.py +0 -147
  92. StreamingCommunity/Src/Util/logger.py +0 -53
  93. StreamingCommunity/Src/Util/message.py +0 -46
  94. StreamingCommunity/Src/Util/os.py +0 -417
  95. StreamingCommunity/Src/Util/table.py +0 -163
  96. StreamingCommunity-1.8.0.dist-info/RECORD +0 -97
  97. {StreamingCommunity-1.8.0.dist-info → StreamingCommunity-1.9.2.dist-info}/LICENSE +0 -0
  98. {StreamingCommunity-1.8.0.dist-info → StreamingCommunity-1.9.2.dist-info}/top_level.txt +0 -0
StreamingCommunity/run.py CHANGED
@@ -12,13 +12,13 @@ from typing import Callable
12
12
 
13
13
 
14
14
  # Internal utilities
15
- from StreamingCommunity.Src.Util.message import start_message
16
- from StreamingCommunity.Src.Util.console import console, msg
17
- from StreamingCommunity.Src.Util._jsonConfig import config_manager
18
- from StreamingCommunity.Src.Upload.update import update as git_update
19
- from StreamingCommunity.Src.Util.os import os_summary
20
- from StreamingCommunity.Src.Lib.TMBD import tmdb
21
- from StreamingCommunity.Src.Util.logger import Logger
15
+ from StreamingCommunity.Util.message import start_message
16
+ from StreamingCommunity.Util.console import console, msg
17
+ from StreamingCommunity.Util._jsonConfig import config_manager
18
+ from StreamingCommunity.Upload.update import update as git_update
19
+ from StreamingCommunity.Util.os import os_summary
20
+ from StreamingCommunity.Lib.TMBD import tmdb
21
+ from StreamingCommunity.Util.logger import Logger
22
22
 
23
23
 
24
24
  # Config
@@ -45,8 +45,13 @@ def load_search_functions():
45
45
  modules = []
46
46
  loaded_functions = {}
47
47
 
48
- # Traverse the Api directory
49
- api_dir = os.path.join(os.path.dirname(__file__), 'Src', 'Api', 'Site')
48
+ # Find api home directory
49
+ if getattr(sys, 'frozen', False): # Modalità PyInstaller
50
+ base_path = os.path.join(sys._MEIPASS, "StreamingCommunity")
51
+ else:
52
+ base_path = os.path.dirname(__file__)
53
+
54
+ api_dir = os.path.join(base_path, 'Api', 'Site')
50
55
  init_files = glob.glob(os.path.join(api_dir, '*', '__init__.py'))
51
56
 
52
57
  # Retrieve modules and their indices
@@ -58,7 +63,7 @@ def load_search_functions():
58
63
 
59
64
  try:
60
65
  # Dynamically import the module
61
- mod = importlib.import_module(f'StreamingCommunity.Src.Api.Site.{module_name}')
66
+ mod = importlib.import_module(f'StreamingCommunity.Api.Site.{module_name}')
62
67
 
63
68
  # Get 'indice' from the module
64
69
  indice = getattr(mod, 'indice', 0)
@@ -83,7 +88,7 @@ def load_search_functions():
83
88
  try:
84
89
 
85
90
  # Dynamically import the module
86
- mod = importlib.import_module(f'StreamingCommunity.Src.Api.Site.{module_name}')
91
+ mod = importlib.import_module(f'StreamingCommunity.Api.Site.{module_name}')
87
92
 
88
93
  # Get the search function from the module (assuming the function is named 'search' and defined in __init__.py)
89
94
  search_function = getattr(mod, 'search')
@@ -127,7 +132,7 @@ def initialize():
127
132
  print()
128
133
  tmdb.display_trending_tv_shows()
129
134
  print()
130
-
135
+
131
136
 
132
137
  def main():
133
138
 
@@ -178,7 +183,7 @@ def main():
178
183
 
179
184
  # Display the category legend in a single line
180
185
  legend_text = " | ".join([f"[{color}]{category.capitalize()}[/{color}]" for category, color in color_map.items()])
181
- console.print(f"[bold green]Category Legend:[/bold green] {legend_text}")
186
+ console.print(f"\n[bold green]Category Legend:[/bold green] {legend_text}")
182
187
 
183
188
  # Construct the prompt message with color-coded site names
184
189
  prompt_message = "[green]Insert category [white](" + ", ".join(
@@ -1,14 +1,16 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: StreamingCommunity
3
- Version: 1.8.0
3
+ Version: 1.9.2
4
+ Summary: UNKNOWN
4
5
  Home-page: https://github.com/Lovi-0/StreamingCommunity
5
6
  Author: Lovi-0
7
+ License: UNKNOWN
6
8
  Project-URL: Bug Reports, https://github.com/Lovi-0/StreamingCommunity/issues
7
9
  Project-URL: Source, https://github.com/Lovi-0/StreamingCommunity
8
10
  Keywords: streaming community
11
+ Platform: UNKNOWN
9
12
  Requires-Python: >=3.8
10
13
  Description-Content-Type: text/markdown
11
- License-File: LICENSE
12
14
  Requires-Dist: httpx
13
15
  Requires-Dist: bs4
14
16
  Requires-Dist: rich
@@ -18,7 +20,8 @@ Requires-Dist: psutil
18
20
  Requires-Dist: unidecode
19
21
  Requires-Dist: jsbeautifier
20
22
  Requires-Dist: pathvalidate
21
- Requires-Dist: fake-useragent
23
+ Requires-Dist: pycryptodome
24
+ Requires-Dist: fake-useragent==1.1.3
22
25
  Requires-Dist: qbittorrent-api
23
26
  Requires-Dist: python-qbittorrent
24
27
  Requires-Dist: googlesearch-python
@@ -29,25 +32,34 @@ Requires-Dist: googlesearch-python
29
32
 
30
33
  A versatile script designed to download films and series from various supported streaming platforms.
31
34
 
32
- ## 🤝 Join our Community
35
+ # 🤝 Join our Community
33
36
 
34
37
  Chat, contribute, and have fun in our **Git_StreamingCommunity** Discord [Server](https://discord.com/invite/8vV68UGRc7)
35
38
 
36
- ## 📋 Table of Contents
39
+ # 📋 Table of Contents
37
40
 
41
+ - [Website available](#website-status)
38
42
  - [Installation](#installation)
39
- - [PyPI Installation](#pypi-installation)
40
- - [Automatic Installation](#automatic-installation)
41
- - [Manual Installation](#manual-installation)
43
+ - [PyPI Installation](#1-pypi-installation)
44
+ - [Automatic Installation](#2-automatic-installation)
45
+ - [Manual Installation](#3-manual-installation)
42
46
  - [Win 7](https://github.com/Ghost6446/StreamingCommunity_api/wiki/Installation#win-7)
43
47
  - [Termux](https://github.com/Ghost6446/StreamingCommunity_api/wiki/Termux)
44
48
  - [Configuration](#configuration)
45
- - [Tutorial](#tutorial)
49
+ - [Default](#default-settings)
50
+ - [Request](#requests-settings)
51
+ - [Browser](#browser-settings)
52
+ - [Download](#m3u8_download-settings)
53
+ - [Parser](#m3u8_parser-settings)
54
+ - [Docker](#docker)
55
+ - [Tutorial](#tutorials)
46
56
  - [To Do](#to-do)
47
57
 
48
- ## 💻 Installation
49
58
 
50
- ### 1. PyPI Installation
59
+
60
+ # Installation
61
+
62
+ ## 1. PyPI Installation
51
63
 
52
64
  Install directly from PyPI:
53
65
 
@@ -55,7 +67,7 @@ Install directly from PyPI:
55
67
  pip install StreamingCommunity
56
68
  ```
57
69
 
58
- #### Creating a Run Script
70
+ ### Creating a Run Script
59
71
 
60
72
  Create `run_streaming.py`:
61
73
 
@@ -71,15 +83,15 @@ Run the script:
71
83
  python run_streaming.py
72
84
  ```
73
85
 
74
- #### Updating via PyPI
86
+ ## Updating via PyPI
75
87
 
76
88
  ```bash
77
89
  pip install --upgrade StreamingCommunity
78
90
  ```
79
91
 
80
- ### 2. Automatic Installation
92
+ ## 2. Automatic Installation
81
93
 
82
- #### Supported Operating Systems 💿
94
+ ### Supported Operating Systems 💿
83
95
 
84
96
  | OS | Automatic Installation Support |
85
97
  |:----------------|:------------------------------:|
@@ -92,95 +104,99 @@ pip install --upgrade StreamingCommunity
92
104
  | MacOS | ✔️ |
93
105
  | Termux | ❌ |
94
106
 
95
- #### Installation Steps
107
+ ### Installation Steps
96
108
 
97
- ##### On Windows:
109
+ #### On Windows:
98
110
 
99
111
  ```powershell
100
112
  .\win_install.bat
101
113
  ```
102
114
 
103
- ##### On Linux/MacOS/BSD:
115
+ #### On Linux/MacOS/BSD:
104
116
 
105
117
  ```bash
106
118
  sudo chmod +x unix_install.sh && ./unix_install.sh
107
119
  ```
108
120
 
109
- #### Usage
121
+ ### Usage
110
122
 
111
- ##### On Windows:
123
+ #### On Windows:
112
124
 
113
125
  ```powershell
114
- python .\run.py
126
+ python .\test_run.py
115
127
  ```
116
128
 
117
129
  or
118
130
 
119
131
  ```powershell
120
- source .venv/bin/activate && python run.py && deactivate
132
+ source .venv/bin/activate && python test_run.py && deactivate
121
133
  ```
122
134
 
123
- ##### On Linux/MacOS/BSD:
135
+ #### On Linux/MacOS/BSD:
124
136
 
125
137
  ```bash
126
- ./run.py
138
+ ./test_run.py
127
139
  ```
128
140
 
129
- ### 3. Manual Installation
141
+ ## 3. Manual Installation
130
142
 
131
- #### Requirements 📋
143
+ ### Requirements 📋
132
144
 
133
145
  Prerequisites:
134
146
  * [Python](https://www.python.org/downloads/) > 3.8
135
147
  * [FFmpeg](https://www.gyan.dev/ffmpeg/builds/)
136
148
 
137
- #### Install Python Dependencies
149
+ ### Install Python Dependencies
138
150
 
139
151
  ```bash
140
152
  pip install -r requirements.txt
141
153
  ```
142
154
 
143
- #### Usage
155
+ ### Usage
144
156
 
145
- ##### On Windows:
157
+ #### On Windows:
146
158
 
147
159
  ```powershell
148
- python run.py
160
+ python test_run.py
149
161
  ```
150
162
 
151
- ##### On Linux/MacOS:
163
+ #### On Linux/MacOS:
152
164
 
153
165
  ```bash
154
- python3 run.py
166
+ python3 test_run.py
155
167
  ```
156
168
 
157
- ### Update
169
+ ## Update
158
170
 
159
171
  Keep your script up to date with the latest features by running:
160
172
 
161
- #### On Windows:
173
+ ### On Windows:
162
174
 
163
175
  ```powershell
164
176
  python update.py
165
177
  ```
166
178
 
167
- #### On Linux/MacOS:
179
+ ### On Linux/MacOS:
168
180
 
169
181
  ```bash
170
182
  python3 update.py
171
183
  ```
172
184
 
173
- ## Configuration ⚙️
185
+ <br>
186
+
187
+ # Configuration
174
188
 
175
189
  You can change some behaviors by tweaking the configuration file.
176
190
 
177
191
  The configuration file is divided into several main sections:
178
192
 
179
- ### DEFAULT Settings
193
+ ## DEFAULT Settings
180
194
 
181
195
  ```json
182
196
  {
183
197
  "root_path": "Video",
198
+ "movie_folder_name": "Movie",
199
+ "serie_folder_name": "TV",
184
200
  "map_episode_name": "%(tv_name)_S%(season)E%(episode)_%(episode_name)",
185
201
  "not_close": false,
186
202
  "show_trending": false
@@ -189,15 +205,17 @@ The configuration file is divided into several main sections:
189
205
 
190
206
  - `root_path`: Directory where all videos will be saved
191
207
 
192
- #### Path examples:
193
-
194
-
208
+ ### Path examples:
195
209
  * Windows: `C:\\MyLibrary\\Folder` or `\\\\MyServer\\MyLibrary` (if you want to use a network folder)
196
210
  * Linux/MacOS: `Desktop/MyLibrary/Folder`
197
211
  `<br/><br/>`
212
+
213
+ - `movie_folder_name`: The name of the subdirectory where movies will be stored.
214
+ - `serie_folder_name`: The name of the subdirectory where TV series will be stored.
215
+
198
216
  - `map_episode_name`: Template for TV series episode filenames
199
217
 
200
- #### Episode name usage:
218
+ ### Episode name usage:
201
219
 
202
220
  You can choose different vars:
203
221
 
@@ -207,26 +225,28 @@ The configuration file is divided into several main sections:
207
225
  * `%(episode)` : Is the number of the episode
208
226
  * `%(episode_name)` : Is the name of the episode
209
227
  `<br/><br/>`
210
-
228
+
211
229
  - `not_close`: If true, continues running after downloading
212
230
  - `show_trending`: Display trending content on startup
213
231
 
214
- #### qBittorrent Configuration
232
+ ### qBittorrent Configuration
215
233
 
216
- ```json
217
- {
218
- "config_qbit_tor": {
219
- "host": "192.168.1.59",
220
- "port": "8080",
221
- "user": "admin",
222
- "pass": "adminadmin"
234
+ ```json
235
+ {
236
+ "config_qbit_tor": {
237
+ "host": "192.168.1.59",
238
+ "port": "8080",
239
+ "user": "admin",
240
+ "pass": "adminadmin"
241
+ }
223
242
  }
224
- }
225
- ```
243
+ ```
244
+
245
+ To enable qBittorrent integration, follow the setup guide [here](https://github.com/lgallard/qBittorrent-Controller/wiki/How-to-enable-the-qBittorrent-Web-UI).
226
246
 
227
- To enable qBittorrent integration, follow the setup guide [here](https://github.com/lgallard/qBittorrent-Controller/wiki/How-to-enable-the-qBittorrent-Web-UI).
247
+ <br>
228
248
 
229
- ### REQUESTS Settings
249
+ ## REQUESTS Settings
230
250
 
231
251
  ```json
232
252
  {
@@ -238,7 +258,9 @@ To enable qBittorrent integration, follow the setup guide [here](https://github.
238
258
  - `timeout`: Maximum timeout (in seconds) for each request
239
259
  - `max_retry`: Number of retry attempts per segment during M3U8 index download
240
260
 
241
- ### BROWSER Settings
261
+ <br>
262
+
263
+ ## BROWSER Settings
242
264
 
243
265
  ```json
244
266
  {
@@ -248,7 +270,9 @@ To enable qBittorrent integration, follow the setup guide [here](https://github.
248
270
 
249
271
  - `headless`: Controls whether to run browser in headless mode
250
272
 
251
- ### M3U8_DOWNLOAD Settings
273
+ <br>
274
+
275
+ ## M3U8_DOWNLOAD Settings
252
276
 
253
277
  ```json
254
278
  {
@@ -266,7 +290,10 @@ To enable qBittorrent integration, follow the setup guide [here](https://github.
266
290
  - `default_audio_workser`: Number of threads for audio download
267
291
  - `cleanup_tmp_folder`: Remove temporary .ts files after download
268
292
 
269
- #### Language Settings
293
+
294
+ <br>
295
+
296
+ ### Language Settings
270
297
 
271
298
  The following codes can be used for `specific_list_audio` and `specific_list_subtitles`:
272
299
 
@@ -301,7 +328,7 @@ forced-ita hin - Hindi pol - Polish tur - Turkish
301
328
  > "specific_list_subtitles": ["ita", "eng", "spa"]
302
329
  > ```
303
330
 
304
- ### M3U8_PARSER Settings
331
+ ## M3U8_PARSER Settings
305
332
 
306
333
  ```json
307
334
  {
@@ -313,8 +340,60 @@ forced-ita hin - Hindi pol - Polish tur - Turkish
313
340
  - `force_resolution`: Force specific resolution (-1 for best available, or specify 1080, 720, 360)
314
341
  - `get_only_link`: Return M3U8 playlist/index URL instead of downloading
315
342
 
343
+ <br>
344
+
345
+
346
+ # COMMAND
347
+
348
+
349
+ - Download a specific season by entering its number.
350
+ * **Example:** `1` will download *Season 1* only.
351
+
352
+ - Use the wildcard `*` to download every available season.
353
+ * **Example:** `*` will download all seasons in the series.
354
+
355
+ - Specify a range of seasons using a hyphen `-`.
356
+ * **Example:** `1-2` will download *Seasons 1 and 2*.
357
+
358
+ - Enter a season number followed by `-*` to download from that season to the end.
359
+ * **Example:** `3-*` will download from *Season 3* to the final season.
316
360
 
317
- ## 🌐 Website Status
361
+ <br>
362
+
363
+ # Docker
364
+
365
+ You can run the script in a docker container, to build the image just run
366
+
367
+ ```
368
+ docker build -t streaming-community-api .
369
+ ```
370
+
371
+ and to run it use
372
+
373
+ ```
374
+ docker run -it -p 8000:8000 streaming-community-api
375
+ ```
376
+
377
+ By default the videos will be saved in `/app/Video` inside the container, if you want to to save them in your machine instead of the container just run
378
+
379
+ ```
380
+ docker run -it -p 8000:8000 -v /path/to/download:/app/Video streaming-community-api
381
+ ```
382
+
383
+ ### Docker quick setup with Make
384
+
385
+ Inside the Makefile (install `make`) are already configured two commands to build and run the container:
386
+
387
+ ```
388
+ make build-container
389
+
390
+ # set your download directory as ENV variable
391
+ make LOCAL_DIR=/path/to/download run-container
392
+ ```
393
+
394
+ The `run-container` command mounts also the `config.json` file, so any change to the configuration file is reflected immediately without having to rebuild the image.
395
+
396
+ # Website Status
318
397
 
319
398
  | Website | Status |
320
399
  |:-------------------|:------:|
@@ -329,16 +408,24 @@ forced-ita hin - Hindi pol - Polish tur - Turkish
329
408
  | PirateBays | ✅ |
330
409
  | StreamingCommunity | ✅ |
331
410
 
332
- ## 📖 Tutorials
411
+ # Tutorials
333
412
 
334
413
  - [Windows Tutorial](https://www.youtube.com/watch?v=mZGqK4wdN-k)
335
414
  - [Linux Tutorial](https://www.youtube.com/watch?v=0qUNXPE_mTg)
415
+ - [Pypy Tutorial](https://www.youtube.com/watch?v=C6m9ZKOK0p4)
416
+ - [Compiled .exe Tutorial](https://www.youtube.com/watch?v=pm4lqsxkTVo)
417
+
418
+ # To Do
336
419
 
337
- ## 📝 To Do
420
+ - Create website API -> https://github.com/Lovi-0/StreamingCommunity/tree/test_gui_1
338
421
 
339
- - Create website API
422
+ # SUPPORT
340
423
 
341
- ## 🤝 Contributing
424
+ If you'd like to support this project, consider making a donation!
425
+
426
+ [![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/donate/?hosted_button_id=UXTWMT8P6HE2C)
427
+
428
+ # Contributing
342
429
 
343
430
  Contributions are welcome! Steps:
344
431
  1. Fork the repository
@@ -346,3 +433,10 @@ Contributions are welcome! Steps:
346
433
  3. Commit changes (`git commit -m 'Add some AmazingFeature'`)
347
434
  4. Push to branch (`git push origin feature/AmazingFeature`)
348
435
  5. Open Pull Request
436
+
437
+
438
+ # Disclaimer
439
+
440
+ This software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages, or other liability, whether in an action of contract, tort, or otherwise, arising from, out of, or in connection with the software or the use or other dealings in the software.
441
+
442
+
@@ -0,0 +1,7 @@
1
+ StreamingCommunity/run.py,sha256=BAzw-SNIbpt6myDn9wfNezb3E3Lv7GZwIup0ze4vJQs,6727
2
+ StreamingCommunity-1.9.2.dist-info/LICENSE,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
3
+ StreamingCommunity-1.9.2.dist-info/METADATA,sha256=8E2sNWKuPEVe11ExXRG7rj5PaiKMf31778vnykY9rVI,11623
4
+ StreamingCommunity-1.9.2.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
5
+ StreamingCommunity-1.9.2.dist-info/entry_points.txt,sha256=-iQU6qfeHFwauAg4iZhifWhNZAkiV-x3XuEauo_EjUc,68
6
+ StreamingCommunity-1.9.2.dist-info/top_level.txt,sha256=YsOcxKP-WOhWpIWgBlh0coll9XUx7aqmRPT7kmt3fH0,19
7
+ StreamingCommunity-1.9.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: bdist_wheel (0.45.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,2 +1,3 @@
1
1
  [console_scripts]
2
2
  streamingcommunity = StreamingCommunity.run:main
3
+
@@ -1,143 +0,0 @@
1
- # 26.11.24
2
- # !!! DIO CANErino
3
-
4
- import re
5
-
6
-
7
- class JavaScriptParser:
8
- @staticmethod
9
- def fix_string(ss):
10
- if ss is None:
11
- return None
12
-
13
- ss = str(ss)
14
- ss = ss.encode('utf-8').decode('unicode-escape')
15
- ss = ss.strip("\"'")
16
- ss = ss.strip()
17
-
18
- return ss
19
-
20
- @staticmethod
21
- def fix_url(url):
22
- if url is None:
23
- return None
24
-
25
- url = url.replace('\\/', '/')
26
- return url
27
-
28
- @staticmethod
29
- def parse_value(value):
30
- value = JavaScriptParser.fix_string(value)
31
-
32
- if 'http' in str(value) or 'https' in str(value):
33
- return JavaScriptParser.fix_url(value)
34
-
35
- if value is None or str(value).lower() == 'null':
36
- return None
37
- if str(value).lower() == 'true':
38
- return True
39
- if str(value).lower() == 'false':
40
- return False
41
-
42
- try:
43
- return int(value)
44
- except ValueError:
45
- try:
46
- return float(value)
47
- except ValueError:
48
- pass
49
-
50
- return value
51
-
52
- @staticmethod
53
- def parse_object(obj_str):
54
- obj_str = obj_str.strip('{}').strip()
55
-
56
- result = {}
57
- key_value_pairs = re.findall(r'([\'"]?[\w]+[\'"]?)\s*:\s*([^,{}]+|{[^}]*}|\[[^\]]*\]|\'[^\']*\'|"[^"]*")', obj_str)
58
-
59
- for key, value in key_value_pairs:
60
- key = JavaScriptParser.fix_string(key)
61
- value = value.strip()
62
-
63
- if value.startswith('{'):
64
- result[key] = JavaScriptParser.parse_object(value)
65
- elif value.startswith('['):
66
- result[key] = JavaScriptParser.parse_array(value)
67
- else:
68
- result[key] = JavaScriptParser.parse_value(value)
69
-
70
- return result
71
-
72
- @staticmethod
73
- def parse_array(arr_str):
74
- arr_str = arr_str.strip('[]').strip()
75
- result = []
76
-
77
- elements = []
78
- current_elem = ""
79
- brace_count = 0
80
- in_string = False
81
- quote_type = None
82
-
83
- for char in arr_str:
84
- if char in ['"', "'"]:
85
- if not in_string:
86
- in_string = True
87
- quote_type = char
88
- elif quote_type == char:
89
- in_string = False
90
- quote_type = None
91
-
92
- if not in_string:
93
- if char == '{':
94
- brace_count += 1
95
- elif char == '}':
96
- brace_count -= 1
97
- elif char == ',' and brace_count == 0:
98
- elements.append(current_elem.strip())
99
- current_elem = ""
100
- continue
101
-
102
- current_elem += char
103
-
104
- if current_elem.strip():
105
- elements.append(current_elem.strip())
106
-
107
- for elem in elements:
108
- elem = elem.strip()
109
-
110
- if elem.startswith('{'):
111
- result.append(JavaScriptParser.parse_object(elem))
112
- elif 'active' in elem or 'url' in elem:
113
- key_value_match = re.search(r'([\w]+)\":([^,}]+)', elem)
114
-
115
- if key_value_match:
116
- key = key_value_match.group(1)
117
- value = key_value_match.group(2)
118
- result[-1][key] = JavaScriptParser.parse_value(value.strip('"\\'))
119
- else:
120
- result.append(JavaScriptParser.parse_value(elem))
121
-
122
- return result
123
-
124
- @classmethod
125
- def parse(cls, js_string):
126
- assignments = re.findall(r'window\.(\w+)\s*=\s*([^;]+);?', js_string, re.DOTALL)
127
- result = {}
128
-
129
- for var_name, value in assignments:
130
- value = value.strip()
131
-
132
- if value.startswith('{'):
133
- result[var_name] = cls.parse_object(value)
134
- elif value.startswith('['):
135
- result[var_name] = cls.parse_array(value)
136
- else:
137
- result[var_name] = cls.parse_value(value)
138
-
139
- can_play_fhd_match = re.search(r'window\.canPlayFHD\s*=\s*(\w+);?', js_string)
140
- if can_play_fhd_match:
141
- result['canPlayFHD'] = cls.parse_value(can_play_fhd_match.group(1))
142
-
143
- return result