StreamingCommunity 1.9.8__tar.gz → 1.9.90__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 (103) hide show
  1. streamingcommunity-1.9.90/MANIFEST.in +1 -0
  2. streamingcommunity-1.9.90/PKG-INFO +427 -0
  3. {StreamingCommunity-1.9.8 → streamingcommunity-1.9.90}/README.md +2 -2
  4. streamingcommunity-1.9.90/StreamingCommunity/Api/Player/Helper/Vixcloud/js_parser.py +143 -0
  5. streamingcommunity-1.9.90/StreamingCommunity/Api/Player/Helper/Vixcloud/util.py +145 -0
  6. streamingcommunity-1.9.90/StreamingCommunity/Api/Player/ddl.py +89 -0
  7. streamingcommunity-1.9.90/StreamingCommunity/Api/Player/maxstream.py +151 -0
  8. streamingcommunity-1.9.90/StreamingCommunity/Api/Player/supervideo.py +194 -0
  9. streamingcommunity-1.9.90/StreamingCommunity/Api/Player/vixcloud.py +273 -0
  10. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/1337xx/__init__.py +51 -0
  11. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/1337xx/costant.py +15 -0
  12. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/1337xx/site.py +86 -0
  13. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/1337xx/title.py +66 -0
  14. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/altadefinizione/__init__.py +51 -0
  15. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/altadefinizione/costant.py +15 -0
  16. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/altadefinizione/film.py +74 -0
  17. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/altadefinizione/site.py +89 -0
  18. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/animeunity/__init__.py +51 -0
  19. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/animeunity/costant.py +15 -0
  20. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/animeunity/film_serie.py +135 -0
  21. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/animeunity/site.py +167 -0
  22. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/animeunity/util/ScrapeSerie.py +97 -0
  23. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/cb01new/__init__.py +52 -0
  24. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/cb01new/costant.py +15 -0
  25. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/cb01new/film.py +73 -0
  26. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/cb01new/site.py +76 -0
  27. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/ddlstreamitaly/__init__.py +58 -0
  28. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/ddlstreamitaly/costant.py +16 -0
  29. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/ddlstreamitaly/series.py +146 -0
  30. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/ddlstreamitaly/site.py +95 -0
  31. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/ddlstreamitaly/util/ScrapeSerie.py +85 -0
  32. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/guardaserie/__init__.py +53 -0
  33. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/guardaserie/costant.py +15 -0
  34. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/guardaserie/series.py +199 -0
  35. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/guardaserie/site.py +86 -0
  36. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/guardaserie/util/ScrapeSerie.py +110 -0
  37. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/ilcorsaronero/__init__.py +52 -0
  38. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/ilcorsaronero/costant.py +15 -0
  39. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/ilcorsaronero/site.py +63 -0
  40. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/ilcorsaronero/title.py +46 -0
  41. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/ilcorsaronero/util/ilCorsarScraper.py +141 -0
  42. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/mostraguarda/__init__.py +49 -0
  43. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/mostraguarda/costant.py +15 -0
  44. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/mostraguarda/film.py +99 -0
  45. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/streamingcommunity/__init__.py +56 -0
  46. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/streamingcommunity/costant.py +15 -0
  47. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/streamingcommunity/film.py +75 -0
  48. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/streamingcommunity/series.py +206 -0
  49. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/streamingcommunity/site.py +137 -0
  50. streamingcommunity-1.9.90/StreamingCommunity/Api/Site/streamingcommunity/util/ScrapeSerie.py +123 -0
  51. streamingcommunity-1.9.90/StreamingCommunity/Api/Template/Class/SearchType.py +101 -0
  52. streamingcommunity-1.9.90/StreamingCommunity/Api/Template/Util/__init__.py +5 -0
  53. streamingcommunity-1.9.90/StreamingCommunity/Api/Template/Util/get_domain.py +173 -0
  54. streamingcommunity-1.9.90/StreamingCommunity/Api/Template/Util/manage_ep.py +179 -0
  55. streamingcommunity-1.9.90/StreamingCommunity/Api/Template/Util/recall_search.py +37 -0
  56. streamingcommunity-1.9.90/StreamingCommunity/Api/Template/__init__.py +3 -0
  57. streamingcommunity-1.9.90/StreamingCommunity/Api/Template/site.py +87 -0
  58. streamingcommunity-1.9.90/StreamingCommunity/Lib/Downloader/HLS/downloader.py +946 -0
  59. streamingcommunity-1.9.90/StreamingCommunity/Lib/Downloader/HLS/proxyes.py +110 -0
  60. streamingcommunity-1.9.90/StreamingCommunity/Lib/Downloader/HLS/segments.py +561 -0
  61. streamingcommunity-1.9.90/StreamingCommunity/Lib/Downloader/MP4/downloader.py +155 -0
  62. streamingcommunity-1.9.90/StreamingCommunity/Lib/Downloader/TOR/downloader.py +296 -0
  63. streamingcommunity-1.9.90/StreamingCommunity/Lib/Downloader/__init__.py +5 -0
  64. streamingcommunity-1.9.90/StreamingCommunity/Lib/FFmpeg/__init__.py +4 -0
  65. streamingcommunity-1.9.90/StreamingCommunity/Lib/FFmpeg/capture.py +170 -0
  66. streamingcommunity-1.9.90/StreamingCommunity/Lib/FFmpeg/command.py +296 -0
  67. streamingcommunity-1.9.90/StreamingCommunity/Lib/FFmpeg/util.py +249 -0
  68. streamingcommunity-1.9.90/StreamingCommunity/Lib/M3U8/__init__.py +6 -0
  69. streamingcommunity-1.9.90/StreamingCommunity/Lib/M3U8/decryptor.py +164 -0
  70. streamingcommunity-1.9.90/StreamingCommunity/Lib/M3U8/estimator.py +176 -0
  71. streamingcommunity-1.9.90/StreamingCommunity/Lib/M3U8/parser.py +666 -0
  72. streamingcommunity-1.9.90/StreamingCommunity/Lib/M3U8/url_fixer.py +52 -0
  73. streamingcommunity-1.9.90/StreamingCommunity/Lib/TMBD/__init__.py +2 -0
  74. streamingcommunity-1.9.90/StreamingCommunity/Lib/TMBD/obj_tmbd.py +39 -0
  75. streamingcommunity-1.9.90/StreamingCommunity/Lib/TMBD/tmdb.py +346 -0
  76. streamingcommunity-1.9.90/StreamingCommunity/Upload/update.py +68 -0
  77. streamingcommunity-1.9.90/StreamingCommunity/Upload/version.py +5 -0
  78. streamingcommunity-1.9.90/StreamingCommunity/Util/_jsonConfig.py +204 -0
  79. streamingcommunity-1.9.90/StreamingCommunity/Util/call_stack.py +42 -0
  80. streamingcommunity-1.9.90/StreamingCommunity/Util/color.py +20 -0
  81. streamingcommunity-1.9.90/StreamingCommunity/Util/console.py +12 -0
  82. streamingcommunity-1.9.90/StreamingCommunity/Util/ffmpeg_installer.py +311 -0
  83. streamingcommunity-1.9.90/StreamingCommunity/Util/headers.py +147 -0
  84. streamingcommunity-1.9.90/StreamingCommunity/Util/logger.py +53 -0
  85. streamingcommunity-1.9.90/StreamingCommunity/Util/message.py +64 -0
  86. streamingcommunity-1.9.90/StreamingCommunity/Util/os.py +554 -0
  87. streamingcommunity-1.9.90/StreamingCommunity/Util/table.py +229 -0
  88. streamingcommunity-1.9.90/StreamingCommunity/__init__.py +0 -0
  89. {StreamingCommunity-1.9.8 → streamingcommunity-1.9.90}/StreamingCommunity/run.py +2 -2
  90. streamingcommunity-1.9.90/StreamingCommunity.egg-info/PKG-INFO +427 -0
  91. streamingcommunity-1.9.90/StreamingCommunity.egg-info/SOURCES.txt +96 -0
  92. {StreamingCommunity-1.9.8 → streamingcommunity-1.9.90}/StreamingCommunity.egg-info/entry_points.txt +0 -1
  93. {StreamingCommunity-1.9.8 → streamingcommunity-1.9.90}/setup.py +8 -9
  94. StreamingCommunity-1.9.8/MANIFEST.in +0 -6
  95. StreamingCommunity-1.9.8/PKG-INFO +0 -413
  96. StreamingCommunity-1.9.8/StreamingCommunity.egg-info/PKG-INFO +0 -413
  97. StreamingCommunity-1.9.8/StreamingCommunity.egg-info/SOURCES.txt +0 -12
  98. StreamingCommunity-1.9.8/requirements.txt +0 -15
  99. {StreamingCommunity-1.9.8 → streamingcommunity-1.9.90}/LICENSE +0 -0
  100. {StreamingCommunity-1.9.8 → streamingcommunity-1.9.90}/StreamingCommunity.egg-info/dependency_links.txt +0 -0
  101. {StreamingCommunity-1.9.8 → streamingcommunity-1.9.90}/StreamingCommunity.egg-info/requires.txt +0 -0
  102. {StreamingCommunity-1.9.8 → streamingcommunity-1.9.90}/StreamingCommunity.egg-info/top_level.txt +0 -0
  103. {StreamingCommunity-1.9.8 → streamingcommunity-1.9.90}/setup.cfg +0 -0
@@ -0,0 +1 @@
1
+ recursive-include StreamingCommunity/ *.py
@@ -0,0 +1,427 @@
1
+ Metadata-Version: 2.1
2
+ Name: StreamingCommunity
3
+ Version: 1.9.90
4
+ Summary: A streaming community package
5
+ Home-page: https://github.com/Lovi-0/StreamingCommunity
6
+ Author: Lovi-0
7
+ Project-URL: Bug Reports, https://github.com/Lovi-0/StreamingCommunity/issues
8
+ Project-URL: Source, https://github.com/Lovi-0/StreamingCommunity
9
+ Keywords: Streaming Community
10
+ Requires-Python: >=3.8
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE
13
+ Requires-Dist: httpx
14
+ Requires-Dist: cffi
15
+ Requires-Dist: bs4
16
+ Requires-Dist: rich
17
+ Requires-Dist: tqdm
18
+ Requires-Dist: m3u8
19
+ Requires-Dist: psutil
20
+ Requires-Dist: unidecode
21
+ Requires-Dist: jsbeautifier
22
+ Requires-Dist: pathvalidate
23
+ Requires-Dist: pycryptodomex
24
+ Requires-Dist: fake-useragent==1.1.3
25
+ Requires-Dist: qbittorrent-api
26
+ Requires-Dist: python-qbittorrent
27
+ Requires-Dist: googlesearch-python
28
+
29
+ # StreamingCommunity Downloader
30
+
31
+ ![Project Logo](https://i.ibb.co/f4h5Y2m/min-logo.png)
32
+
33
+ A versatile script designed to download films and series from various supported streaming platforms.
34
+
35
+ # 🤝 Join our Community
36
+
37
+ Chat, contribute, and have fun in our **Git_StreamingCommunity** Discord [Server](https://discord.com/invite/8vV68UGRc7)
38
+
39
+ # 📋 Table of Contents
40
+
41
+ - [Website available](#website-status)
42
+ - [Installation](#installation)
43
+ - [PyPI Installation](#1-pypi-installation)
44
+ - [Automatic Installation](#2-automatic-installation)
45
+ - [Manual Installation](#3-manual-installation)
46
+ - [Win 7](https://github.com/Ghost6446/StreamingCommunity_api/wiki/Installation#win-7)
47
+ - [Termux](https://github.com/Ghost6446/StreamingCommunity_api/wiki/Termux)
48
+ - [Configuration](#configuration)
49
+ - [Default](#default-settings)
50
+ - [Request](#requests-settings)
51
+ - [Download](#m3u8_download-settings)
52
+ - [Parser](#m3u8_parser-settings)
53
+ - [Docker](#docker)
54
+ - [Tutorial](#tutorials)
55
+ - [To Do](#to-do)
56
+ - [Support](#support)
57
+ - [Contribute](#contributing)
58
+ - [Disclamer](#disclaimer)
59
+
60
+
61
+
62
+ # Installation
63
+
64
+ ## 1. PyPI Installation
65
+
66
+ Install directly from PyPI:
67
+
68
+ ```bash
69
+ pip install StreamingCommunity
70
+ ```
71
+
72
+ ### Creating a Run Script
73
+
74
+ Create `run_streaming.py`:
75
+
76
+ ```python
77
+ from StreamingCommunity.run import main
78
+
79
+ if __name__ == "__main__":
80
+ main()
81
+ ```
82
+
83
+ Run the script:
84
+ ```bash
85
+ python run_streaming.py
86
+ ```
87
+
88
+ ## Updating via PyPI
89
+
90
+ ```bash
91
+ pip install --upgrade StreamingCommunity
92
+ ```
93
+
94
+ ## 2. Automatic Installation
95
+
96
+ ### Supported Operating Systems 💿
97
+
98
+ | OS | Automatic Installation Support |
99
+ |:----------------|:------------------------------:|
100
+ | Windows 10/11 | ✔️ |
101
+ | Windows 7 | ❌ |
102
+ | Debian Linux | ✔️ |
103
+ | Arch Linux | ✔️ |
104
+ | CentOS Stream 9 | ✔️ |
105
+ | FreeBSD | ⏳ |
106
+ | MacOS | ✔️ |
107
+ | Termux | ❌ |
108
+
109
+ ### Installation Steps
110
+
111
+ #### On Windows:
112
+
113
+ ```powershell
114
+ .\Installer\win_install.bat
115
+ ```
116
+
117
+ #### On Linux/MacOS/BSD:
118
+
119
+ ```bash
120
+ sudo chmod +x Installer/unix_install.sh && ./Installer/unix_install.sh
121
+ ```
122
+
123
+ ### Usage
124
+
125
+ #### On Windows:
126
+
127
+ ```powershell
128
+ python .\test_run.py
129
+ ```
130
+
131
+ or
132
+
133
+ ```powershell
134
+ source .venv/bin/activate && python test_run.py && deactivate
135
+ ```
136
+
137
+ #### On Linux/MacOS/BSD:
138
+
139
+ ```bash
140
+ ./test_run.py
141
+ ```
142
+
143
+ ## 3. Manual Installation
144
+
145
+ ### Requirements 📋
146
+
147
+ Prerequisites:
148
+ * [Python](https://www.python.org/downloads/) > 3.8
149
+ * [FFmpeg](https://www.gyan.dev/ffmpeg/builds/)
150
+
151
+ ### Install Python Dependencies
152
+
153
+ ```bash
154
+ pip install -r requirements.txt
155
+ ```
156
+
157
+ ### Usage
158
+
159
+ #### On Windows:
160
+
161
+ ```powershell
162
+ python test_run.py
163
+ ```
164
+
165
+ #### On Linux/MacOS:
166
+
167
+ ```bash
168
+ python3 test_run.py
169
+ ```
170
+
171
+ ## Update
172
+
173
+ Keep your script up to date with the latest features by running:
174
+
175
+ ### On Windows:
176
+
177
+ ```powershell
178
+ python update.py
179
+ ```
180
+
181
+ ### On Linux/MacOS:
182
+
183
+ ```bash
184
+ python3 update.py
185
+ ```
186
+
187
+ <br>
188
+
189
+ # Configuration
190
+
191
+ You can change some behaviors by tweaking the configuration file.
192
+
193
+ The configuration file is divided into several main sections:
194
+
195
+ ## DEFAULT Settings
196
+
197
+ ```json
198
+ {
199
+ "root_path": "Video",
200
+ "movie_folder_name": "Movie",
201
+ "serie_folder_name": "TV",
202
+ "map_episode_name": "%(tv_name)_S%(season)E%(episode)_%(episode_name)",
203
+ "not_close": false
204
+ }
205
+ ```
206
+
207
+ - `root_path`: Directory where all videos will be saved
208
+
209
+ ### Path examples:
210
+ * Windows: `C:\\MyLibrary\\Folder` or `\\\\MyServer\\MyLibrary` (if you want to use a network folder)
211
+ * Linux/MacOS: `Desktop/MyLibrary/Folder`
212
+ `<br/><br/>`
213
+
214
+ - `movie_folder_name`: The name of the subdirectory where movies will be stored.
215
+ - `serie_folder_name`: The name of the subdirectory where TV series will be stored.
216
+
217
+ - `map_episode_name`: Template for TV series episode filenames
218
+
219
+ ### Episode name usage:
220
+
221
+ You can choose different vars:
222
+
223
+
224
+ * `%(tv_name)` : Is the name of TV Show
225
+ * `%(season)` : Is the number of the season
226
+ * `%(episode)` : Is the number of the episode
227
+ * `%(episode_name)` : Is the name of the episode
228
+ `<br/><br/>`
229
+
230
+ - `not_close`: If true, continues running after downloading
231
+
232
+ ### qBittorrent Configuration
233
+
234
+ ```json
235
+ {
236
+ "config_qbit_tor": {
237
+ "host": "192.168.1.59",
238
+ "port": "8080",
239
+ "user": "admin",
240
+ "pass": "adminadmin"
241
+ }
242
+ }
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).
246
+
247
+ <br>
248
+
249
+ ## REQUESTS Settings
250
+
251
+ ```json
252
+ {
253
+ "timeout": 20,
254
+ "max_retry": 3
255
+ }
256
+ ```
257
+
258
+ - `timeout`: Maximum timeout (in seconds) for each request
259
+ - `max_retry`: Number of retry attempts per segment during M3U8 index download
260
+
261
+ <br>
262
+
263
+ ## M3U8_DOWNLOAD Settings
264
+
265
+ ```json
266
+ {
267
+ "tqdm_delay": 0.01,
268
+ "tqdm_use_large_bar": true,
269
+ "default_video_workser": 12,
270
+ "default_audio_workser": 12,
271
+ "cleanup_tmp_folder": true
272
+ }
273
+ ```
274
+
275
+ - `tqdm_delay`: Delay between progress bar updates
276
+ - `tqdm_use_large_bar`: Use detailed progress bar (recommended for desktop) set to false for mobile
277
+ - `default_video_workser`: Number of threads for video download
278
+ - `default_audio_workser`: Number of threads for audio download
279
+ - `cleanup_tmp_folder`: Remove temporary .ts files after download
280
+
281
+
282
+ <br>
283
+
284
+ ### Language Settings
285
+
286
+ The following codes can be used for `specific_list_audio` and `specific_list_subtitles`:
287
+
288
+ ```
289
+ ara - Arabic eng - English ita - Italian por - Portuguese
290
+ baq - Basque fil - Filipino jpn - Japanese rum - Romanian
291
+ cat - Catalan fin - Finnish kan - Kannada rus - Russian
292
+ chi - Chinese fre - French kor - Korean spa - Spanish
293
+ cze - Czech ger - German mal - Malayalam swe - Swedish
294
+ dan - Danish glg - Galician may - Malay tam - Tamil
295
+ dut - Dutch gre - Greek nob - Norw. Bokm tel - Telugu
296
+ heb - Hebrew nor - Norwegian tha - Thai
297
+ forced-ita hin - Hindi pol - Polish tur - Turkish
298
+ hun - Hungarian ukr - Ukrainian
299
+ ind - Indonesian vie - Vietnamese
300
+ ```
301
+
302
+ > [!IMPORTANT]
303
+ > Language code availability may vary by site. Some platforms might:
304
+ >
305
+ > - Use different language codes
306
+ > - Support only a subset of these languages
307
+ > - Offer additional languages not listed here
308
+ >
309
+ > Check the specific site's available options if downloads fail.
310
+
311
+ > [!TIP]
312
+ > You can configure multiple languages by adding them to the lists:
313
+ >
314
+ > ```json
315
+ > "specific_list_audio": ["ita", "eng", "spa"],
316
+ > "specific_list_subtitles": ["ita", "eng", "spa"]
317
+ > ```
318
+
319
+ ## M3U8_PARSER Settings
320
+
321
+ ```json
322
+ {
323
+ "force_resolution": -1,
324
+ "get_only_link": false
325
+ }
326
+ ```
327
+
328
+ - `force_resolution`: Force specific resolution (-1 for best available, or specify 1080, 720, 360)
329
+ - `get_only_link`: Return M3U8 playlist/index URL instead of downloading
330
+
331
+ <br>
332
+
333
+
334
+ # COMMAND
335
+
336
+
337
+ - Download a specific season by entering its number.
338
+ * **Example:** `1` will download *Season 1* only.
339
+
340
+ - Use the wildcard `*` to download every available season.
341
+ * **Example:** `*` will download all seasons in the series.
342
+
343
+ - Specify a range of seasons using a hyphen `-`.
344
+ * **Example:** `1-2` will download *Seasons 1 and 2*.
345
+
346
+ - Enter a season number followed by `-*` to download from that season to the end.
347
+ * **Example:** `3-*` will download from *Season 3* to the final season.
348
+
349
+ <br>
350
+
351
+ # Docker
352
+
353
+ You can run the script in a docker container, to build the image just run
354
+
355
+ ```
356
+ docker build -t streaming-community-api .
357
+ ```
358
+
359
+ and to run it use
360
+
361
+ ```
362
+ docker run -it -p 8000:8000 streaming-community-api
363
+ ```
364
+
365
+ 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
366
+
367
+ ```
368
+ docker run -it -p 8000:8000 -v /path/to/download:/app/Video streaming-community-api
369
+ ```
370
+
371
+ ### Docker quick setup with Make
372
+
373
+ Inside the Makefile (install `make`) are already configured two commands to build and run the container:
374
+
375
+ ```
376
+ make build-container
377
+
378
+ # set your download directory as ENV variable
379
+ make LOCAL_DIR=/path/to/download run-container
380
+ ```
381
+
382
+ 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.
383
+
384
+ # Website Status
385
+
386
+ | Website | Status |
387
+ |:-------------------|:------:|
388
+ | 1337xx | ✅ |
389
+ | Altadefinizione | ✅ |
390
+ | AnimeUnity | ✅ |
391
+ | Ilcorsaronero | ✅ |
392
+ | CB01New | ✅ |
393
+ | DDLStreamItaly | ✅ |
394
+ | GuardaSerie | ✅ |
395
+ | MostraGuarda | ✅ |
396
+ | StreamingCommunity | ✅ |
397
+
398
+ # Tutorials
399
+
400
+ - [Windows Tutorial](https://www.youtube.com/watch?v=mZGqK4wdN-k)
401
+ - [Linux Tutorial](https://www.youtube.com/watch?v=0qUNXPE_mTg)
402
+ - [Pypy Tutorial](https://www.youtube.com/watch?v=C6m9ZKOK0p4)
403
+ - [Compiled .exe Tutorial](https://www.youtube.com/watch?v=pm4lqsxkTVo)
404
+
405
+ # To Do
406
+
407
+ - Create website API -> https://github.com/Lovi-0/StreamingCommunity/tree/test_gui_1
408
+
409
+ # Support
410
+
411
+ If you'd like to support this project, consider making a donation!
412
+
413
+ [![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/donate/?hosted_button_id=UXTWMT8P6HE2C)
414
+
415
+ # Contributing
416
+
417
+ Contributions are welcome! Steps:
418
+ 1. Fork the repository
419
+ 2. Create feature branch (`git checkout -b feature/AmazingFeature`)
420
+ 3. Commit changes (`git commit -m 'Add some AmazingFeature'`)
421
+ 4. Push to branch (`git push origin feature/AmazingFeature`)
422
+ 5. Open Pull Request
423
+
424
+
425
+ # Disclaimer
426
+
427
+ 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.
@@ -83,13 +83,13 @@ pip install --upgrade StreamingCommunity
83
83
  #### On Windows:
84
84
 
85
85
  ```powershell
86
- .\win_install.bat
86
+ .\Installer\win_install.bat
87
87
  ```
88
88
 
89
89
  #### On Linux/MacOS/BSD:
90
90
 
91
91
  ```bash
92
- sudo chmod +x unix_install.sh && ./unix_install.sh
92
+ sudo chmod +x Installer/unix_install.sh && ./Installer/unix_install.sh
93
93
  ```
94
94
 
95
95
  ### Usage
@@ -0,0 +1,143 @@
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