StreamingCommunity 2.5.2__py3-none-any.whl → 2.5.5__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 (268) hide show
  1. StreamingCommunity/Api/Player/Helper/Vixcloud/js_parser.py +143 -143
  2. StreamingCommunity/Api/Player/Helper/Vixcloud/util.py +136 -136
  3. StreamingCommunity/Api/Player/ddl.py +89 -89
  4. StreamingCommunity/Api/Player/maxstream.py +151 -151
  5. StreamingCommunity/Api/Player/supervideo.py +193 -193
  6. StreamingCommunity/Api/Player/vixcloud.py +272 -272
  7. StreamingCommunity/Api/Site/1337xx/__init__.py +51 -50
  8. StreamingCommunity/Api/Site/1337xx/costant.py +14 -14
  9. StreamingCommunity/Api/Site/1337xx/site.py +87 -89
  10. StreamingCommunity/Api/Site/1337xx/title.py +63 -64
  11. StreamingCommunity/Api/Site/altadefinizionegratis/__init__.py +74 -50
  12. StreamingCommunity/Api/Site/altadefinizionegratis/costant.py +21 -19
  13. StreamingCommunity/Api/Site/altadefinizionegratis/film.py +81 -72
  14. StreamingCommunity/Api/Site/altadefinizionegratis/site.py +116 -94
  15. StreamingCommunity/Api/Site/animeunity/__init__.py +75 -50
  16. StreamingCommunity/Api/Site/animeunity/costant.py +21 -19
  17. StreamingCommunity/Api/Site/animeunity/film_serie.py +171 -134
  18. StreamingCommunity/Api/Site/animeunity/site.py +191 -174
  19. StreamingCommunity/Api/Site/animeunity/util/ScrapeSerie.py +97 -97
  20. StreamingCommunity/Api/Site/cb01new/__init__.py +51 -51
  21. StreamingCommunity/Api/Site/cb01new/costant.py +19 -19
  22. StreamingCommunity/Api/Site/cb01new/film.py +61 -71
  23. StreamingCommunity/Api/Site/cb01new/site.py +82 -82
  24. StreamingCommunity/Api/Site/ddlstreamitaly/__init__.py +55 -55
  25. StreamingCommunity/Api/Site/ddlstreamitaly/costant.py +20 -20
  26. StreamingCommunity/Api/Site/ddlstreamitaly/series.py +149 -145
  27. StreamingCommunity/Api/Site/ddlstreamitaly/site.py +98 -98
  28. StreamingCommunity/Api/Site/ddlstreamitaly/util/ScrapeSerie.py +84 -84
  29. StreamingCommunity/Api/Site/guardaserie/__init__.py +50 -50
  30. StreamingCommunity/Api/Site/guardaserie/costant.py +19 -19
  31. StreamingCommunity/Api/Site/guardaserie/series.py +199 -198
  32. StreamingCommunity/Api/Site/guardaserie/site.py +89 -89
  33. StreamingCommunity/Api/Site/guardaserie/util/ScrapeSerie.py +110 -110
  34. StreamingCommunity/Api/Site/ilcorsaronero/__init__.py +51 -51
  35. StreamingCommunity/Api/Site/ilcorsaronero/costant.py +18 -18
  36. StreamingCommunity/Api/Site/ilcorsaronero/site.py +71 -71
  37. StreamingCommunity/Api/Site/ilcorsaronero/title.py +44 -44
  38. StreamingCommunity/Api/Site/ilcorsaronero/util/ilCorsarScraper.py +149 -149
  39. StreamingCommunity/Api/Site/mostraguarda/__init__.py +48 -48
  40. StreamingCommunity/Api/Site/mostraguarda/costant.py +18 -18
  41. StreamingCommunity/Api/Site/mostraguarda/film.py +90 -101
  42. StreamingCommunity/Api/Site/streamingcommunity/__init__.py +79 -55
  43. StreamingCommunity/Api/Site/streamingcommunity/costant.py +21 -19
  44. StreamingCommunity/Api/Site/streamingcommunity/film.py +86 -75
  45. StreamingCommunity/Api/Site/streamingcommunity/series.py +259 -207
  46. StreamingCommunity/Api/Site/streamingcommunity/site.py +156 -142
  47. StreamingCommunity/Api/Site/streamingcommunity/util/ScrapeSerie.py +124 -124
  48. StreamingCommunity/Api/Template/Class/SearchType.py +101 -101
  49. StreamingCommunity/Api/Template/Util/__init__.py +4 -4
  50. StreamingCommunity/Api/Template/Util/get_domain.py +201 -201
  51. StreamingCommunity/Api/Template/Util/manage_ep.py +178 -178
  52. StreamingCommunity/Api/Template/Util/recall_search.py +37 -37
  53. StreamingCommunity/Api/Template/__init__.py +2 -2
  54. StreamingCommunity/Api/Template/site.py +87 -87
  55. StreamingCommunity/Lib/Downloader/HLS/downloader.py +529 -1008
  56. StreamingCommunity/Lib/Downloader/HLS/proxyes.py +110 -110
  57. StreamingCommunity/Lib/Downloader/HLS/segments.py +446 -573
  58. StreamingCommunity/Lib/Downloader/MP4/downloader.py +181 -155
  59. StreamingCommunity/Lib/Downloader/TOR/downloader.py +297 -295
  60. StreamingCommunity/Lib/Downloader/__init__.py +4 -4
  61. StreamingCommunity/Lib/FFmpeg/__init__.py +4 -4
  62. StreamingCommunity/Lib/FFmpeg/capture.py +170 -170
  63. StreamingCommunity/Lib/FFmpeg/command.py +264 -296
  64. StreamingCommunity/Lib/FFmpeg/util.py +248 -248
  65. StreamingCommunity/Lib/M3U8/__init__.py +5 -5
  66. StreamingCommunity/Lib/M3U8/decryptor.py +164 -164
  67. StreamingCommunity/Lib/M3U8/estimator.py +146 -228
  68. StreamingCommunity/Lib/M3U8/parser.py +666 -666
  69. StreamingCommunity/Lib/M3U8/url_fixer.py +57 -57
  70. StreamingCommunity/Lib/TMBD/__init__.py +1 -1
  71. StreamingCommunity/Lib/TMBD/obj_tmbd.py +39 -39
  72. StreamingCommunity/Lib/TMBD/tmdb.py +345 -345
  73. StreamingCommunity/TelegramHelp/__init__.py +0 -0
  74. StreamingCommunity/TelegramHelp/request_manager.py +82 -0
  75. StreamingCommunity/TelegramHelp/session.py +56 -0
  76. StreamingCommunity/TelegramHelp/telegram_bot.py +561 -0
  77. StreamingCommunity/Upload/update.py +75 -67
  78. StreamingCommunity/Upload/version.py +5 -5
  79. StreamingCommunity/Util/_jsonConfig.py +227 -228
  80. StreamingCommunity/Util/call_stack.py +42 -42
  81. StreamingCommunity/Util/color.py +20 -20
  82. StreamingCommunity/Util/console.py +12 -12
  83. StreamingCommunity/Util/ffmpeg_installer.py +342 -370
  84. StreamingCommunity/Util/headers.py +159 -159
  85. StreamingCommunity/Util/logger.py +61 -61
  86. StreamingCommunity/Util/message.py +36 -64
  87. StreamingCommunity/Util/os.py +500 -507
  88. StreamingCommunity/Util/table.py +271 -228
  89. StreamingCommunity/run.py +352 -245
  90. {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/LICENSE +674 -674
  91. {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/METADATA +601 -543
  92. StreamingCommunity-2.5.5.dist-info/RECORD +96 -0
  93. {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/entry_points.txt +0 -1
  94. StreamingCommunity/Api/Player/Helper/Vixcloud/__pycache__/js_parser.cpython-313.pyc +0 -0
  95. StreamingCommunity/Api/Player/Helper/Vixcloud/__pycache__/js_parser.cpython-39.pyc +0 -0
  96. StreamingCommunity/Api/Player/Helper/Vixcloud/__pycache__/util.cpython-313.pyc +0 -0
  97. StreamingCommunity/Api/Player/Helper/Vixcloud/__pycache__/util.cpython-39.pyc +0 -0
  98. StreamingCommunity/Api/Player/__pycache__/ddl.cpython-313.pyc +0 -0
  99. StreamingCommunity/Api/Player/__pycache__/ddl.cpython-39.pyc +0 -0
  100. StreamingCommunity/Api/Player/__pycache__/maxstream.cpython-313.pyc +0 -0
  101. StreamingCommunity/Api/Player/__pycache__/maxstream.cpython-39.pyc +0 -0
  102. StreamingCommunity/Api/Player/__pycache__/supervideo.cpython-313.pyc +0 -0
  103. StreamingCommunity/Api/Player/__pycache__/supervideo.cpython-39.pyc +0 -0
  104. StreamingCommunity/Api/Player/__pycache__/vixcloud.cpython-313.pyc +0 -0
  105. StreamingCommunity/Api/Player/__pycache__/vixcloud.cpython-39.pyc +0 -0
  106. StreamingCommunity/Api/Site/1337xx/__pycache__/__init__.cpython-313.pyc +0 -0
  107. StreamingCommunity/Api/Site/1337xx/__pycache__/__init__.cpython-39.pyc +0 -0
  108. StreamingCommunity/Api/Site/1337xx/__pycache__/costant.cpython-313.pyc +0 -0
  109. StreamingCommunity/Api/Site/1337xx/__pycache__/costant.cpython-39.pyc +0 -0
  110. StreamingCommunity/Api/Site/1337xx/__pycache__/site.cpython-313.pyc +0 -0
  111. StreamingCommunity/Api/Site/1337xx/__pycache__/site.cpython-39.pyc +0 -0
  112. StreamingCommunity/Api/Site/1337xx/__pycache__/title.cpython-313.pyc +0 -0
  113. StreamingCommunity/Api/Site/1337xx/__pycache__/title.cpython-39.pyc +0 -0
  114. StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/__init__.cpython-313.pyc +0 -0
  115. StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/__init__.cpython-39.pyc +0 -0
  116. StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/costant.cpython-313.pyc +0 -0
  117. StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/costant.cpython-39.pyc +0 -0
  118. StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/film.cpython-313.pyc +0 -0
  119. StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/film.cpython-39.pyc +0 -0
  120. StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/site.cpython-313.pyc +0 -0
  121. StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/site.cpython-39.pyc +0 -0
  122. StreamingCommunity/Api/Site/animeunity/__pycache__/__init__.cpython-313.pyc +0 -0
  123. StreamingCommunity/Api/Site/animeunity/__pycache__/__init__.cpython-39.pyc +0 -0
  124. StreamingCommunity/Api/Site/animeunity/__pycache__/costant.cpython-313.pyc +0 -0
  125. StreamingCommunity/Api/Site/animeunity/__pycache__/costant.cpython-39.pyc +0 -0
  126. StreamingCommunity/Api/Site/animeunity/__pycache__/film_serie.cpython-313.pyc +0 -0
  127. StreamingCommunity/Api/Site/animeunity/__pycache__/film_serie.cpython-39.pyc +0 -0
  128. StreamingCommunity/Api/Site/animeunity/__pycache__/site.cpython-313.pyc +0 -0
  129. StreamingCommunity/Api/Site/animeunity/__pycache__/site.cpython-39.pyc +0 -0
  130. StreamingCommunity/Api/Site/animeunity/util/__pycache__/ScrapeSerie.cpython-313.pyc +0 -0
  131. StreamingCommunity/Api/Site/animeunity/util/__pycache__/ScrapeSerie.cpython-39.pyc +0 -0
  132. StreamingCommunity/Api/Site/cb01new/__pycache__/__init__.cpython-313.pyc +0 -0
  133. StreamingCommunity/Api/Site/cb01new/__pycache__/__init__.cpython-39.pyc +0 -0
  134. StreamingCommunity/Api/Site/cb01new/__pycache__/costant.cpython-313.pyc +0 -0
  135. StreamingCommunity/Api/Site/cb01new/__pycache__/costant.cpython-39.pyc +0 -0
  136. StreamingCommunity/Api/Site/cb01new/__pycache__/film.cpython-313.pyc +0 -0
  137. StreamingCommunity/Api/Site/cb01new/__pycache__/film.cpython-39.pyc +0 -0
  138. StreamingCommunity/Api/Site/cb01new/__pycache__/site.cpython-313.pyc +0 -0
  139. StreamingCommunity/Api/Site/cb01new/__pycache__/site.cpython-39.pyc +0 -0
  140. StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/__init__.cpython-313.pyc +0 -0
  141. StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/__init__.cpython-39.pyc +0 -0
  142. StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/costant.cpython-313.pyc +0 -0
  143. StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/costant.cpython-39.pyc +0 -0
  144. StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/series.cpython-313.pyc +0 -0
  145. StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/series.cpython-39.pyc +0 -0
  146. StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/site.cpython-313.pyc +0 -0
  147. StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/site.cpython-39.pyc +0 -0
  148. StreamingCommunity/Api/Site/ddlstreamitaly/util/__pycache__/ScrapeSerie.cpython-313.pyc +0 -0
  149. StreamingCommunity/Api/Site/ddlstreamitaly/util/__pycache__/ScrapeSerie.cpython-39.pyc +0 -0
  150. StreamingCommunity/Api/Site/guardaserie/__pycache__/__init__.cpython-313.pyc +0 -0
  151. StreamingCommunity/Api/Site/guardaserie/__pycache__/__init__.cpython-39.pyc +0 -0
  152. StreamingCommunity/Api/Site/guardaserie/__pycache__/costant.cpython-313.pyc +0 -0
  153. StreamingCommunity/Api/Site/guardaserie/__pycache__/costant.cpython-39.pyc +0 -0
  154. StreamingCommunity/Api/Site/guardaserie/__pycache__/series.cpython-313.pyc +0 -0
  155. StreamingCommunity/Api/Site/guardaserie/__pycache__/series.cpython-39.pyc +0 -0
  156. StreamingCommunity/Api/Site/guardaserie/__pycache__/site.cpython-313.pyc +0 -0
  157. StreamingCommunity/Api/Site/guardaserie/__pycache__/site.cpython-39.pyc +0 -0
  158. StreamingCommunity/Api/Site/guardaserie/util/__pycache__/ScrapeSerie.cpython-313.pyc +0 -0
  159. StreamingCommunity/Api/Site/guardaserie/util/__pycache__/ScrapeSerie.cpython-39.pyc +0 -0
  160. StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/__init__.cpython-313.pyc +0 -0
  161. StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/__init__.cpython-39.pyc +0 -0
  162. StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/costant.cpython-313.pyc +0 -0
  163. StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/costant.cpython-39.pyc +0 -0
  164. StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/site.cpython-313.pyc +0 -0
  165. StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/site.cpython-39.pyc +0 -0
  166. StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/title.cpython-313.pyc +0 -0
  167. StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/title.cpython-39.pyc +0 -0
  168. StreamingCommunity/Api/Site/ilcorsaronero/util/__pycache__/ilCorsarScraper.cpython-313.pyc +0 -0
  169. StreamingCommunity/Api/Site/ilcorsaronero/util/__pycache__/ilCorsarScraper.cpython-39.pyc +0 -0
  170. StreamingCommunity/Api/Site/mostraguarda/__pycache__/__init__.cpython-313.pyc +0 -0
  171. StreamingCommunity/Api/Site/mostraguarda/__pycache__/__init__.cpython-39.pyc +0 -0
  172. StreamingCommunity/Api/Site/mostraguarda/__pycache__/costant.cpython-313.pyc +0 -0
  173. StreamingCommunity/Api/Site/mostraguarda/__pycache__/costant.cpython-39.pyc +0 -0
  174. StreamingCommunity/Api/Site/mostraguarda/__pycache__/film.cpython-313.pyc +0 -0
  175. StreamingCommunity/Api/Site/mostraguarda/__pycache__/film.cpython-39.pyc +0 -0
  176. StreamingCommunity/Api/Site/streamingcommunity/__pycache__/__init__.cpython-313.pyc +0 -0
  177. StreamingCommunity/Api/Site/streamingcommunity/__pycache__/__init__.cpython-39.pyc +0 -0
  178. StreamingCommunity/Api/Site/streamingcommunity/__pycache__/costant.cpython-313.pyc +0 -0
  179. StreamingCommunity/Api/Site/streamingcommunity/__pycache__/costant.cpython-39.pyc +0 -0
  180. StreamingCommunity/Api/Site/streamingcommunity/__pycache__/film.cpython-313.pyc +0 -0
  181. StreamingCommunity/Api/Site/streamingcommunity/__pycache__/film.cpython-39.pyc +0 -0
  182. StreamingCommunity/Api/Site/streamingcommunity/__pycache__/series.cpython-313.pyc +0 -0
  183. StreamingCommunity/Api/Site/streamingcommunity/__pycache__/series.cpython-39.pyc +0 -0
  184. StreamingCommunity/Api/Site/streamingcommunity/__pycache__/site.cpython-313.pyc +0 -0
  185. StreamingCommunity/Api/Site/streamingcommunity/__pycache__/site.cpython-39.pyc +0 -0
  186. StreamingCommunity/Api/Site/streamingcommunity/util/__pycache__/ScrapeSerie.cpython-313.pyc +0 -0
  187. StreamingCommunity/Api/Site/streamingcommunity/util/__pycache__/ScrapeSerie.cpython-39.pyc +0 -0
  188. StreamingCommunity/Api/Template/Class/__pycache__/SearchType.cpython-313.pyc +0 -0
  189. StreamingCommunity/Api/Template/Class/__pycache__/SearchType.cpython-39.pyc +0 -0
  190. StreamingCommunity/Api/Template/Util/__pycache__/__init__.cpython-313.pyc +0 -0
  191. StreamingCommunity/Api/Template/Util/__pycache__/__init__.cpython-39.pyc +0 -0
  192. StreamingCommunity/Api/Template/Util/__pycache__/get_domain.cpython-313.pyc +0 -0
  193. StreamingCommunity/Api/Template/Util/__pycache__/get_domain.cpython-39.pyc +0 -0
  194. StreamingCommunity/Api/Template/Util/__pycache__/manage_ep.cpython-313.pyc +0 -0
  195. StreamingCommunity/Api/Template/Util/__pycache__/manage_ep.cpython-39.pyc +0 -0
  196. StreamingCommunity/Api/Template/Util/__pycache__/recall_search.cpython-313.pyc +0 -0
  197. StreamingCommunity/Api/Template/Util/__pycache__/recall_search.cpython-39.pyc +0 -0
  198. StreamingCommunity/Api/Template/__pycache__/__init__.cpython-313.pyc +0 -0
  199. StreamingCommunity/Api/Template/__pycache__/__init__.cpython-39.pyc +0 -0
  200. StreamingCommunity/Api/Template/__pycache__/site.cpython-313.pyc +0 -0
  201. StreamingCommunity/Api/Template/__pycache__/site.cpython-39.pyc +0 -0
  202. StreamingCommunity/Lib/Downloader/HLS/__pycache__/downloader.cpython-313.pyc +0 -0
  203. StreamingCommunity/Lib/Downloader/HLS/__pycache__/downloader.cpython-39.pyc +0 -0
  204. StreamingCommunity/Lib/Downloader/HLS/__pycache__/proxyes.cpython-313.pyc +0 -0
  205. StreamingCommunity/Lib/Downloader/HLS/__pycache__/proxyes.cpython-39.pyc +0 -0
  206. StreamingCommunity/Lib/Downloader/HLS/__pycache__/segments.cpython-313.pyc +0 -0
  207. StreamingCommunity/Lib/Downloader/HLS/__pycache__/segments.cpython-39.pyc +0 -0
  208. StreamingCommunity/Lib/Downloader/MP4/__pycache__/downloader.cpython-313.pyc +0 -0
  209. StreamingCommunity/Lib/Downloader/MP4/__pycache__/downloader.cpython-39.pyc +0 -0
  210. StreamingCommunity/Lib/Downloader/TOR/__pycache__/downloader.cpython-313.pyc +0 -0
  211. StreamingCommunity/Lib/Downloader/TOR/__pycache__/downloader.cpython-39.pyc +0 -0
  212. StreamingCommunity/Lib/Downloader/__pycache__/__init__.cpython-313.pyc +0 -0
  213. StreamingCommunity/Lib/Downloader/__pycache__/__init__.cpython-39.pyc +0 -0
  214. StreamingCommunity/Lib/FFmpeg/__pycache__/__init__.cpython-313.pyc +0 -0
  215. StreamingCommunity/Lib/FFmpeg/__pycache__/__init__.cpython-39.pyc +0 -0
  216. StreamingCommunity/Lib/FFmpeg/__pycache__/capture.cpython-313.pyc +0 -0
  217. StreamingCommunity/Lib/FFmpeg/__pycache__/capture.cpython-39.pyc +0 -0
  218. StreamingCommunity/Lib/FFmpeg/__pycache__/command.cpython-313.pyc +0 -0
  219. StreamingCommunity/Lib/FFmpeg/__pycache__/command.cpython-39.pyc +0 -0
  220. StreamingCommunity/Lib/FFmpeg/__pycache__/util.cpython-313.pyc +0 -0
  221. StreamingCommunity/Lib/FFmpeg/__pycache__/util.cpython-39.pyc +0 -0
  222. StreamingCommunity/Lib/M3U8/__pycache__/__init__.cpython-313.pyc +0 -0
  223. StreamingCommunity/Lib/M3U8/__pycache__/__init__.cpython-39.pyc +0 -0
  224. StreamingCommunity/Lib/M3U8/__pycache__/decryptor.cpython-313.pyc +0 -0
  225. StreamingCommunity/Lib/M3U8/__pycache__/decryptor.cpython-39.pyc +0 -0
  226. StreamingCommunity/Lib/M3U8/__pycache__/estimator.cpython-313.pyc +0 -0
  227. StreamingCommunity/Lib/M3U8/__pycache__/estimator.cpython-39.pyc +0 -0
  228. StreamingCommunity/Lib/M3U8/__pycache__/parser.cpython-313.pyc +0 -0
  229. StreamingCommunity/Lib/M3U8/__pycache__/parser.cpython-39.pyc +0 -0
  230. StreamingCommunity/Lib/M3U8/__pycache__/url_fixer.cpython-313.pyc +0 -0
  231. StreamingCommunity/Lib/M3U8/__pycache__/url_fixer.cpython-39.pyc +0 -0
  232. StreamingCommunity/Lib/TMBD/__pycache__/__init__.cpython-313.pyc +0 -0
  233. StreamingCommunity/Lib/TMBD/__pycache__/__init__.cpython-39.pyc +0 -0
  234. StreamingCommunity/Lib/TMBD/__pycache__/obj_tmbd.cpython-313.pyc +0 -0
  235. StreamingCommunity/Lib/TMBD/__pycache__/obj_tmbd.cpython-39.pyc +0 -0
  236. StreamingCommunity/Lib/TMBD/__pycache__/tmdb.cpython-313.pyc +0 -0
  237. StreamingCommunity/Lib/TMBD/__pycache__/tmdb.cpython-39.pyc +0 -0
  238. StreamingCommunity/Upload/__pycache__/update.cpython-313.pyc +0 -0
  239. StreamingCommunity/Upload/__pycache__/update.cpython-39.pyc +0 -0
  240. StreamingCommunity/Upload/__pycache__/version.cpython-313.pyc +0 -0
  241. StreamingCommunity/Upload/__pycache__/version.cpython-39.pyc +0 -0
  242. StreamingCommunity/Util/__pycache__/_jsonConfig.cpython-313.pyc +0 -0
  243. StreamingCommunity/Util/__pycache__/_jsonConfig.cpython-39.pyc +0 -0
  244. StreamingCommunity/Util/__pycache__/call_stack.cpython-313.pyc +0 -0
  245. StreamingCommunity/Util/__pycache__/call_stack.cpython-39.pyc +0 -0
  246. StreamingCommunity/Util/__pycache__/color.cpython-313.pyc +0 -0
  247. StreamingCommunity/Util/__pycache__/color.cpython-39.pyc +0 -0
  248. StreamingCommunity/Util/__pycache__/console.cpython-313.pyc +0 -0
  249. StreamingCommunity/Util/__pycache__/console.cpython-39.pyc +0 -0
  250. StreamingCommunity/Util/__pycache__/ffmpeg_installer.cpython-313.pyc +0 -0
  251. StreamingCommunity/Util/__pycache__/ffmpeg_installer.cpython-39.pyc +0 -0
  252. StreamingCommunity/Util/__pycache__/headers.cpython-313.pyc +0 -0
  253. StreamingCommunity/Util/__pycache__/headers.cpython-39.pyc +0 -0
  254. StreamingCommunity/Util/__pycache__/logger.cpython-313.pyc +0 -0
  255. StreamingCommunity/Util/__pycache__/logger.cpython-39.pyc +0 -0
  256. StreamingCommunity/Util/__pycache__/message.cpython-313.pyc +0 -0
  257. StreamingCommunity/Util/__pycache__/message.cpython-39.pyc +0 -0
  258. StreamingCommunity/Util/__pycache__/os.cpython-313.pyc +0 -0
  259. StreamingCommunity/Util/__pycache__/os.cpython-39.pyc +0 -0
  260. StreamingCommunity/Util/__pycache__/table.cpython-313.pyc +0 -0
  261. StreamingCommunity/Util/__pycache__/table.cpython-39.pyc +0 -0
  262. StreamingCommunity/__pycache__/__init__.cpython-313.pyc +0 -0
  263. StreamingCommunity/__pycache__/__init__.cpython-39.pyc +0 -0
  264. StreamingCommunity/__pycache__/run.cpython-313.pyc +0 -0
  265. StreamingCommunity/__pycache__/run.cpython-39.pyc +0 -0
  266. StreamingCommunity-2.5.2.dist-info/RECORD +0 -264
  267. {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/WHEEL +0 -0
  268. {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/top_level.txt +0 -0
@@ -1,145 +1,149 @@
1
- # 13.06.24
2
-
3
- import os
4
- import sys
5
- from urllib.parse import urlparse
6
-
7
-
8
- # Internal utilities
9
- from StreamingCommunity.Util.console import console
10
- from StreamingCommunity.Util.message import start_message
11
- from StreamingCommunity.Util.os import os_manager
12
- from StreamingCommunity.Util.table import TVShowManager
13
- from StreamingCommunity.Lib.Downloader import MP4_downloader
14
-
15
-
16
- # Logic class
17
- from StreamingCommunity.Api.Template.Class.SearchType import MediaItem
18
- from StreamingCommunity.Api.Template.Util import manage_selection, map_episode_title, validate_episode_selection
19
-
20
-
21
- # Player
22
- from .util.ScrapeSerie import GetSerieInfo
23
- from StreamingCommunity.Api.Player.ddl import VideoSource
24
-
25
-
26
- # Variable
27
- from .costant import SERIES_FOLDER
28
-
29
-
30
-
31
- def download_video(index_episode_selected: int, scape_info_serie: GetSerieInfo, video_source: VideoSource) -> str:
32
- """
33
- Download a single episode video.
34
-
35
- Parameters:
36
- - tv_name (str): Name of the TV series.
37
- - index_episode_selected (int): Index of the selected episode.
38
-
39
- Return:
40
- - str: output path
41
- """
42
- start_message()
43
-
44
- # Get info about episode
45
- obj_episode = scape_info_serie.list_episodes[index_episode_selected - 1]
46
- console.print(f"[yellow]Download: [red]{obj_episode.get('name')}")
47
- print()
48
-
49
- # Define filename and path for the downloaded video
50
- title_name = os_manager.get_sanitize_file(
51
- f"{map_episode_title(scape_info_serie.tv_name, None, index_episode_selected, obj_episode.get('name'))}.mp4"
52
- )
53
- mp4_path = os.path.join(SERIES_FOLDER, scape_info_serie.tv_name)
54
-
55
- # Create output folder
56
- os_manager.create_path(mp4_path)
57
-
58
- # Setup video source
59
- video_source.setup(obj_episode.get('url'))
60
-
61
- # Get m3u8 master playlist
62
- master_playlist = video_source.get_playlist()
63
-
64
- # Parse start page url
65
- parsed_url = urlparse(obj_episode.get('url'))
66
-
67
- # Start download
68
- r_proc = MP4_downloader(
69
- url=master_playlist,
70
- path=os.path.join(mp4_path, title_name),
71
- referer=f"{parsed_url.scheme}://{parsed_url.netloc}/",
72
- )
73
-
74
- if r_proc != None:
75
- console.print("[green]Result: ")
76
- console.print(r_proc)
77
-
78
- return os.path.join(mp4_path, title_name)
79
-
80
-
81
- def download_thread(dict_serie: MediaItem):
82
- """
83
- Download all episode of a thread
84
- """
85
-
86
- # Start message and set up video source
87
- start_message()
88
-
89
- # Init class
90
- scape_info_serie = GetSerieInfo(dict_serie)
91
- video_source = VideoSource()
92
-
93
- # Collect information about thread
94
- list_dict_episode = scape_info_serie.get_episode_number()
95
- episodes_count = len(list_dict_episode)
96
-
97
- # Display episodes list and manage user selection
98
- last_command = display_episodes_list(scape_info_serie.list_episodes)
99
- list_episode_select = manage_selection(last_command, episodes_count)
100
-
101
- try:
102
- list_episode_select = validate_episode_selection(list_episode_select, episodes_count)
103
- except ValueError as e:
104
- console.print(f"[red]{str(e)}")
105
- return
106
-
107
- # Download selected episodes
108
- for i_episode in list_episode_select:
109
- download_video(i_episode, scape_info_serie, video_source)
110
-
111
-
112
- def display_episodes_list(obj_episode_manager) -> str:
113
- """
114
- Display episodes list and handle user input.
115
-
116
- Returns:
117
- last_command (str): Last command entered by the user.
118
- """
119
-
120
- # Set up table for displaying episodes
121
- table_show_manager = TVShowManager()
122
- table_show_manager.set_slice_end(10)
123
-
124
- # Add columns to the table
125
- column_info = {
126
- "Index": {'color': 'red'},
127
- "Name": {'color': 'magenta'},
128
- }
129
- table_show_manager.add_column(column_info)
130
-
131
- # Populate the table with episodes information
132
- for i, media in enumerate(obj_episode_manager):
133
- table_show_manager.add_tv_show({
134
- 'Index': str(i+1),
135
- 'Name': media.get('name'),
136
- })
137
-
138
- # Run the table and handle user input
139
- last_command = table_show_manager.run()
140
-
141
- if last_command == "q":
142
- console.print("\n[red]Quit [white]...")
143
- sys.exit(0)
144
-
145
- return last_command
1
+ # 13.06.24
2
+
3
+ import os
4
+ import sys
5
+ from urllib.parse import urlparse
6
+
7
+
8
+ # Internal utilities
9
+ from StreamingCommunity.Util.console import console
10
+ from StreamingCommunity.Util.message import start_message
11
+ from StreamingCommunity.Util.os import os_manager
12
+ from StreamingCommunity.Util.table import TVShowManager
13
+ from StreamingCommunity.Lib.Downloader import MP4_downloader
14
+
15
+
16
+ # Logic class
17
+ from StreamingCommunity.Api.Template.Class.SearchType import MediaItem
18
+ from StreamingCommunity.Api.Template.Util import manage_selection, map_episode_title, validate_episode_selection
19
+
20
+
21
+ # Player
22
+ from .util.ScrapeSerie import GetSerieInfo
23
+ from StreamingCommunity.Api.Player.ddl import VideoSource
24
+
25
+
26
+ # Variable
27
+ from .costant import SERIES_FOLDER
28
+
29
+
30
+
31
+ def download_video(index_episode_selected: int, scape_info_serie: GetSerieInfo, video_source: VideoSource) -> tuple[str,bool]:
32
+ """
33
+ Download a single episode video.
34
+
35
+ Parameters:
36
+ - tv_name (str): Name of the TV series.
37
+ - index_episode_selected (int): Index of the selected episode.
38
+
39
+ Return:
40
+ - str: output path
41
+ - bool: kill handler status
42
+ """
43
+ start_message()
44
+
45
+ # Get info about episode
46
+ obj_episode = scape_info_serie.list_episodes[index_episode_selected - 1]
47
+ console.print(f"[yellow]Download: [red]{obj_episode.get('name')}\n")
48
+ console.print(f"[cyan]You can safely stop the download with [bold]Ctrl+c[bold] [cyan] \n")
49
+
50
+ # Define filename and path for the downloaded video
51
+ title_name = os_manager.get_sanitize_file(
52
+ f"{map_episode_title(scape_info_serie.tv_name, None, index_episode_selected, obj_episode.get('name'))}.mp4"
53
+ )
54
+ mp4_path = os.path.join(SERIES_FOLDER, scape_info_serie.tv_name)
55
+
56
+ # Create output folder
57
+ os_manager.create_path(mp4_path)
58
+
59
+ # Setup video source
60
+ video_source.setup(obj_episode.get('url'))
61
+
62
+ # Get m3u8 master playlist
63
+ master_playlist = video_source.get_playlist()
64
+
65
+ # Parse start page url
66
+ parsed_url = urlparse(obj_episode.get('url'))
67
+
68
+ # Start download
69
+ r_proc = MP4_downloader(
70
+ url=master_playlist,
71
+ path=os.path.join(mp4_path, title_name),
72
+ referer=f"{parsed_url.scheme}://{parsed_url.netloc}/",
73
+ )
74
+
75
+ if r_proc != None:
76
+ console.print("[green]Result: ")
77
+ console.print(r_proc)
78
+
79
+ return os.path.join(mp4_path, title_name)
80
+
81
+
82
+ def download_thread(dict_serie: MediaItem):
83
+ """
84
+ Download all episode of a thread
85
+ """
86
+
87
+ # Start message and set up video source
88
+ start_message()
89
+
90
+ # Init class
91
+ scape_info_serie = GetSerieInfo(dict_serie)
92
+ video_source = VideoSource()
93
+
94
+ # Collect information about thread
95
+ list_dict_episode = scape_info_serie.get_episode_number()
96
+ episodes_count = len(list_dict_episode)
97
+
98
+ # Display episodes list and manage user selection
99
+ last_command = display_episodes_list(scape_info_serie.list_episodes)
100
+ list_episode_select = manage_selection(last_command, episodes_count)
101
+
102
+ try:
103
+ list_episode_select = validate_episode_selection(list_episode_select, episodes_count)
104
+ except ValueError as e:
105
+ console.print(f"[red]{str(e)}")
106
+ return
107
+
108
+ # Download selected episodes
109
+ kill_handler = bool(False)
110
+ for i_episode in list_episode_select:
111
+ if kill_handler:
112
+ break
113
+ kill_handler = download_video(i_episode, scape_info_serie, video_source)[1]
114
+
115
+
116
+ def display_episodes_list(obj_episode_manager) -> str:
117
+ """
118
+ Display episodes list and handle user input.
119
+
120
+ Returns:
121
+ last_command (str): Last command entered by the user.
122
+ """
123
+
124
+ # Set up table for displaying episodes
125
+ table_show_manager = TVShowManager()
126
+ table_show_manager.set_slice_end(10)
127
+
128
+ # Add columns to the table
129
+ column_info = {
130
+ "Index": {'color': 'red'},
131
+ "Name": {'color': 'magenta'},
132
+ }
133
+ table_show_manager.add_column(column_info)
134
+
135
+ # Populate the table with episodes information
136
+ for i, media in enumerate(obj_episode_manager):
137
+ table_show_manager.add_tv_show({
138
+ 'Index': str(i+1),
139
+ 'Name': media.get('name'),
140
+ })
141
+
142
+ # Run the table and handle user input
143
+ last_command = table_show_manager.run()
144
+
145
+ if last_command == "q":
146
+ console.print("\n[red]Quit [white]...")
147
+ sys.exit(0)
148
+
149
+ return last_command
@@ -1,99 +1,99 @@
1
- # 09.06.24
2
-
3
- import logging
4
-
5
-
6
- # External libraries
7
- import httpx
8
- from bs4 import BeautifulSoup
9
-
10
-
11
- # Internal utilities
12
- from StreamingCommunity.Util.console import console
13
- from StreamingCommunity.Util._jsonConfig import config_manager
14
- from StreamingCommunity.Util.headers import get_headers
15
- from StreamingCommunity.Util.table import TVShowManager
16
-
17
-
18
- # Logic class
19
- from StreamingCommunity.Api.Template import get_select_title
20
- from StreamingCommunity.Api.Template.Util import search_domain
21
- from StreamingCommunity.Api.Template.Class.SearchType import MediaManager
22
-
23
-
24
- # Variable
25
- from .costant import SITE_NAME, DOMAIN_NOW
26
- media_search_manager = MediaManager()
27
- table_show_manager = TVShowManager()
28
- max_timeout = config_manager.get_int("REQUESTS", "timeout")
29
- disable_searchDomain = config_manager.get_bool("DEFAULT", "disable_searchDomain")
30
-
31
-
32
- def title_search(word_to_search: str) -> int:
33
- """
34
- Search for titles based on a search query.
35
-
36
- Parameters:
37
- - title_search (str): The title to search for.
38
-
39
- Returns:
40
- - int: The number of titles found.
41
- """
42
- media_search_manager.clear()
43
- table_show_manager.clear()
44
-
45
- # Find new domain if prev dont work
46
- domain_to_use = DOMAIN_NOW
47
-
48
- if not disable_searchDomain:
49
- domain_to_use, base_url = search_domain(SITE_NAME, f"https://{SITE_NAME}.{DOMAIN_NOW}")
50
-
51
- # Send request to search for titles
52
- try:
53
- response = httpx.get(
54
- url=f"https://{SITE_NAME}.{domain_to_use}/search/?&q={word_to_search}&quick=1&type=videobox_video&nodes=11",
55
- headers={'user-agent': get_headers()},
56
- timeout=max_timeout
57
- )
58
- response.raise_for_status()
59
-
60
- except Exception as e:
61
- console.print(f"Site: {SITE_NAME}, request search error: {e}")
62
-
63
- # Create soup and find table
64
- soup = BeautifulSoup(response.text, "html.parser")
65
- table_content = soup.find('ol', class_="ipsStream")
66
-
67
- if table_content:
68
- for title_div in table_content.find_all('li', class_='ipsStreamItem'):
69
- try:
70
-
71
- title_type = title_div.find("p", class_="ipsType_reset").find_all("a")[-1].get_text(strip=True)
72
- name = title_div.find("span", class_="ipsContained").find("a").get_text(strip=True)
73
- link = title_div.find("span", class_="ipsContained").find("a").get("href")
74
-
75
- title_info = {
76
- 'name': name,
77
- 'url': link,
78
- 'type': title_type
79
- }
80
-
81
- media_search_manager.add_media(title_info)
82
-
83
- except Exception as e:
84
- print(f"Error parsing a film entry: {e}")
85
-
86
- return media_search_manager.get_length()
87
-
88
- else:
89
- logging.error("No table content found.")
90
- return -999
91
-
92
- return -9999
93
-
94
-
95
- def run_get_select_title():
96
- """
97
- Display a selection of titles and prompt the user to choose one.
98
- """
1
+ # 09.06.24
2
+
3
+ import logging
4
+
5
+
6
+ # External libraries
7
+ import httpx
8
+ from bs4 import BeautifulSoup
9
+
10
+
11
+ # Internal utilities
12
+ from StreamingCommunity.Util.console import console
13
+ from StreamingCommunity.Util._jsonConfig import config_manager
14
+ from StreamingCommunity.Util.headers import get_headers
15
+ from StreamingCommunity.Util.table import TVShowManager
16
+
17
+
18
+ # Logic class
19
+ from StreamingCommunity.Api.Template import get_select_title
20
+ from StreamingCommunity.Api.Template.Util import search_domain
21
+ from StreamingCommunity.Api.Template.Class.SearchType import MediaManager
22
+
23
+
24
+ # Variable
25
+ from .costant import SITE_NAME, DOMAIN_NOW
26
+ media_search_manager = MediaManager()
27
+ table_show_manager = TVShowManager()
28
+ max_timeout = config_manager.get_int("REQUESTS", "timeout")
29
+ disable_searchDomain = config_manager.get_bool("DEFAULT", "disable_searchDomain")
30
+
31
+
32
+ def title_search(word_to_search: str) -> int:
33
+ """
34
+ Search for titles based on a search query.
35
+
36
+ Parameters:
37
+ - title_search (str): The title to search for.
38
+
39
+ Returns:
40
+ - int: The number of titles found.
41
+ """
42
+ media_search_manager.clear()
43
+ table_show_manager.clear()
44
+
45
+ # Find new domain if prev dont work
46
+ domain_to_use = DOMAIN_NOW
47
+
48
+ if not disable_searchDomain:
49
+ domain_to_use, base_url = search_domain(SITE_NAME, f"https://{SITE_NAME}.{DOMAIN_NOW}")
50
+
51
+ # Send request to search for titles
52
+ try:
53
+ response = httpx.get(
54
+ url=f"https://{SITE_NAME}.{domain_to_use}/search/?&q={word_to_search}&quick=1&type=videobox_video&nodes=11",
55
+ headers={'user-agent': get_headers()},
56
+ timeout=max_timeout
57
+ )
58
+ response.raise_for_status()
59
+
60
+ except Exception as e:
61
+ console.print(f"Site: {SITE_NAME}, request search error: {e}")
62
+
63
+ # Create soup and find table
64
+ soup = BeautifulSoup(response.text, "html.parser")
65
+ table_content = soup.find('ol', class_="ipsStream")
66
+
67
+ if table_content:
68
+ for title_div in table_content.find_all('li', class_='ipsStreamItem'):
69
+ try:
70
+
71
+ title_type = title_div.find("p", class_="ipsType_reset").find_all("a")[-1].get_text(strip=True)
72
+ name = title_div.find("span", class_="ipsContained").find("a").get_text(strip=True)
73
+ link = title_div.find("span", class_="ipsContained").find("a").get("href")
74
+
75
+ title_info = {
76
+ 'name': name,
77
+ 'url': link,
78
+ 'type': title_type
79
+ }
80
+
81
+ media_search_manager.add_media(title_info)
82
+
83
+ except Exception as e:
84
+ print(f"Error parsing a film entry: {e}")
85
+
86
+ return media_search_manager.get_length()
87
+
88
+ else:
89
+ logging.error("No table content found.")
90
+ return -999
91
+
92
+ return -9999
93
+
94
+
95
+ def run_get_select_title():
96
+ """
97
+ Display a selection of titles and prompt the user to choose one.
98
+ """
99
99
  return get_select_title(table_show_manager, media_search_manager)
@@ -1,85 +1,85 @@
1
- # 13.06.24
2
-
3
- import sys
4
- import logging
5
- from typing import List, Dict
6
-
7
-
8
- # External libraries
9
- import httpx
10
- from bs4 import BeautifulSoup
11
-
12
-
13
- # Internal utilities
14
- from StreamingCommunity.Util._jsonConfig import config_manager
15
- from StreamingCommunity.Util.headers import get_headers
16
-
17
-
18
- # Logic class
19
- from StreamingCommunity.Api.Template.Class.SearchType import MediaItem
20
-
21
-
22
- # Variable
23
- from ..costant import COOKIE
24
- max_timeout = config_manager.get_int("REQUESTS", "timeout")
25
-
26
-
27
- class GetSerieInfo:
28
- def __init__(self, dict_serie: MediaItem) -> None:
29
- """
30
- Initializes the GetSerieInfo object with default values.
31
-
32
- Parameters:
33
- - dict_serie (MediaItem): Dictionary containing series information (optional).
34
- """
35
- self.headers = {'user-agent': get_headers()}
36
- self.cookies = COOKIE
37
- self.url = dict_serie.url
38
- self.tv_name = None
39
- self.list_episodes = None
40
-
41
- def get_episode_number(self) -> List[Dict[str, str]]:
42
- """
43
- Retrieves the number of episodes for a specific season.
44
-
45
- Parameters:
46
- n_season (int): The season number.
47
-
48
- Returns:
49
- List[Dict[str, str]]: List of dictionaries containing episode information.
50
- """
51
-
52
- try:
53
- response = httpx.get(f"{self.url}?area=online", cookies=self.cookies, headers=self.headers, timeout=max_timeout)
54
- response.raise_for_status()
55
-
56
- except Exception as e:
57
- logging.error(f"Insert value for [ips4_device_key, ips4_member_id, ips4_login_key] in config.json file SITE \\ ddlstreamitaly \\ cookie. Use browser debug and cookie request with a valid account, filter by DOC. Error: {e}")
58
- sys.exit(0)
59
-
60
- # Parse HTML content of the page
61
- soup = BeautifulSoup(response.text, "html.parser")
62
-
63
- # Get tv name
64
- self.tv_name = soup.find("span", class_= "ipsType_break").get_text(strip=True)
65
-
66
- # Find the container of episodes for the specified season
67
- table_content = soup.find('div', class_='ipsMargin_bottom:half')
68
- list_dict_episode = []
69
-
70
- for episode_div in table_content.find_all('a', href=True):
71
-
72
- # Get text of episode
73
- part_name = episode_div.get_text(strip=True)
74
-
75
- if part_name:
76
- obj_episode = {
77
- 'name': part_name,
78
- 'url': episode_div['href']
79
- }
80
-
81
- list_dict_episode.append(obj_episode)
82
-
83
- self.list_episodes = list_dict_episode
84
- return list_dict_episode
1
+ # 13.06.24
2
+
3
+ import sys
4
+ import logging
5
+ from typing import List, Dict
6
+
7
+
8
+ # External libraries
9
+ import httpx
10
+ from bs4 import BeautifulSoup
11
+
12
+
13
+ # Internal utilities
14
+ from StreamingCommunity.Util._jsonConfig import config_manager
15
+ from StreamingCommunity.Util.headers import get_headers
16
+
17
+
18
+ # Logic class
19
+ from StreamingCommunity.Api.Template.Class.SearchType import MediaItem
20
+
21
+
22
+ # Variable
23
+ from ..costant import COOKIE
24
+ max_timeout = config_manager.get_int("REQUESTS", "timeout")
25
+
26
+
27
+ class GetSerieInfo:
28
+ def __init__(self, dict_serie: MediaItem) -> None:
29
+ """
30
+ Initializes the GetSerieInfo object with default values.
31
+
32
+ Parameters:
33
+ - dict_serie (MediaItem): Dictionary containing series information (optional).
34
+ """
35
+ self.headers = {'user-agent': get_headers()}
36
+ self.cookies = COOKIE
37
+ self.url = dict_serie.url
38
+ self.tv_name = None
39
+ self.list_episodes = None
40
+
41
+ def get_episode_number(self) -> List[Dict[str, str]]:
42
+ """
43
+ Retrieves the number of episodes for a specific season.
44
+
45
+ Parameters:
46
+ n_season (int): The season number.
47
+
48
+ Returns:
49
+ List[Dict[str, str]]: List of dictionaries containing episode information.
50
+ """
51
+
52
+ try:
53
+ response = httpx.get(f"{self.url}?area=online", cookies=self.cookies, headers=self.headers, timeout=max_timeout)
54
+ response.raise_for_status()
55
+
56
+ except Exception as e:
57
+ logging.error(f"Insert value for [ips4_device_key, ips4_member_id, ips4_login_key] in config.json file SITE \\ ddlstreamitaly \\ cookie. Use browser debug and cookie request with a valid account, filter by DOC. Error: {e}")
58
+ sys.exit(0)
59
+
60
+ # Parse HTML content of the page
61
+ soup = BeautifulSoup(response.text, "html.parser")
62
+
63
+ # Get tv name
64
+ self.tv_name = soup.find("span", class_= "ipsType_break").get_text(strip=True)
65
+
66
+ # Find the container of episodes for the specified season
67
+ table_content = soup.find('div', class_='ipsMargin_bottom:half')
68
+ list_dict_episode = []
69
+
70
+ for episode_div in table_content.find_all('a', href=True):
71
+
72
+ # Get text of episode
73
+ part_name = episode_div.get_text(strip=True)
74
+
75
+ if part_name:
76
+ obj_episode = {
77
+ 'name': part_name,
78
+ 'url': episode_div['href']
79
+ }
80
+
81
+ list_dict_episode.append(obj_episode)
82
+
83
+ self.list_episodes = list_dict_episode
84
+ return list_dict_episode
85
85