StreamingCommunity 1.7.6__py3-none-any.whl → 1.8.0__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 (93) hide show
  1. StreamingCommunity/Src/Api/Player/Helper/Vixcloud/js_parser.py +4 -1
  2. StreamingCommunity/Src/Api/Player/Helper/Vixcloud/util.py +166 -166
  3. StreamingCommunity/Src/Api/Player/ddl.py +89 -89
  4. StreamingCommunity/Src/Api/Player/maxstream.py +151 -151
  5. StreamingCommunity/Src/Api/Player/supervideo.py +193 -193
  6. StreamingCommunity/Src/Api/Player/vixcloud.py +224 -212
  7. StreamingCommunity/Src/Api/Site/1337xx/__init__.py +50 -50
  8. StreamingCommunity/Src/Api/Site/1337xx/costant.py +14 -14
  9. StreamingCommunity/Src/Api/Site/1337xx/site.py +83 -83
  10. StreamingCommunity/Src/Api/Site/1337xx/title.py +66 -66
  11. StreamingCommunity/Src/Api/Site/altadefinizione/__init__.py +50 -50
  12. StreamingCommunity/Src/Api/Site/altadefinizione/costant.py +14 -14
  13. StreamingCommunity/Src/Api/Site/altadefinizione/film.py +69 -69
  14. StreamingCommunity/Src/Api/Site/altadefinizione/site.py +86 -86
  15. StreamingCommunity/Src/Api/Site/animeunity/__init__.py +50 -50
  16. StreamingCommunity/Src/Api/Site/animeunity/costant.py +15 -15
  17. StreamingCommunity/Src/Api/Site/animeunity/film_serie.py +131 -131
  18. StreamingCommunity/Src/Api/Site/animeunity/site.py +164 -164
  19. StreamingCommunity/Src/Api/Site/bitsearch/__init__.py +51 -51
  20. StreamingCommunity/Src/Api/Site/bitsearch/costant.py +15 -15
  21. StreamingCommunity/Src/Api/Site/bitsearch/site.py +84 -84
  22. StreamingCommunity/Src/Api/Site/bitsearch/title.py +47 -47
  23. StreamingCommunity/Src/Api/Site/cb01new/__init__.py +51 -51
  24. StreamingCommunity/Src/Api/Site/cb01new/costant.py +15 -15
  25. StreamingCommunity/Src/Api/Site/cb01new/film.py +69 -69
  26. StreamingCommunity/Src/Api/Site/cb01new/site.py +74 -74
  27. StreamingCommunity/Src/Api/Site/ddlstreamitaly/__init__.py +57 -57
  28. StreamingCommunity/Src/Api/Site/ddlstreamitaly/costant.py +16 -16
  29. StreamingCommunity/Src/Api/Site/ddlstreamitaly/series.py +142 -142
  30. StreamingCommunity/Src/Api/Site/ddlstreamitaly/site.py +92 -92
  31. StreamingCommunity/Src/Api/Site/ddlstreamitaly/util/ScrapeSerie.py +82 -82
  32. StreamingCommunity/Src/Api/Site/guardaserie/__init__.py +52 -52
  33. StreamingCommunity/Src/Api/Site/guardaserie/costant.py +15 -15
  34. StreamingCommunity/Src/Api/Site/guardaserie/series.py +195 -195
  35. StreamingCommunity/Src/Api/Site/guardaserie/site.py +84 -84
  36. StreamingCommunity/Src/Api/Site/guardaserie/util/ScrapeSerie.py +110 -110
  37. StreamingCommunity/Src/Api/Site/mostraguarda/__init__.py +48 -48
  38. StreamingCommunity/Src/Api/Site/mostraguarda/costant.py +14 -14
  39. StreamingCommunity/Src/Api/Site/mostraguarda/film.py +94 -94
  40. StreamingCommunity/Src/Api/Site/piratebays/__init__.py +50 -50
  41. StreamingCommunity/Src/Api/Site/piratebays/costant.py +14 -14
  42. StreamingCommunity/Src/Api/Site/piratebays/site.py +88 -88
  43. StreamingCommunity/Src/Api/Site/piratebays/title.py +45 -45
  44. StreamingCommunity/Src/Api/Site/streamingcommunity/__init__.py +55 -55
  45. StreamingCommunity/Src/Api/Site/streamingcommunity/costant.py +14 -14
  46. StreamingCommunity/Src/Api/Site/streamingcommunity/film.py +70 -70
  47. StreamingCommunity/Src/Api/Site/streamingcommunity/series.py +203 -203
  48. StreamingCommunity/Src/Api/Site/streamingcommunity/site.py +125 -125
  49. StreamingCommunity/Src/Api/Template/Class/SearchType.py +101 -101
  50. StreamingCommunity/Src/Api/Template/Util/__init__.py +4 -4
  51. StreamingCommunity/Src/Api/Template/Util/get_domain.py +137 -137
  52. StreamingCommunity/Src/Api/Template/Util/manage_ep.py +153 -153
  53. StreamingCommunity/Src/Api/Template/Util/recall_search.py +37 -37
  54. StreamingCommunity/Src/Api/Template/__init__.py +2 -2
  55. StreamingCommunity/Src/Api/Template/site.py +87 -87
  56. StreamingCommunity/Src/Lib/Downloader/HLS/downloader.py +968 -968
  57. StreamingCommunity/Src/Lib/Downloader/HLS/proxyes.py +110 -110
  58. StreamingCommunity/Src/Lib/Downloader/HLS/segments.py +540 -540
  59. StreamingCommunity/Src/Lib/Downloader/MP4/downloader.py +156 -156
  60. StreamingCommunity/Src/Lib/Downloader/TOR/downloader.py +222 -222
  61. StreamingCommunity/Src/Lib/Downloader/__init__.py +4 -4
  62. StreamingCommunity/Src/Lib/Driver/driver_1.py +76 -76
  63. StreamingCommunity/Src/Lib/FFmpeg/__init__.py +4 -4
  64. StreamingCommunity/Src/Lib/FFmpeg/capture.py +170 -170
  65. StreamingCommunity/Src/Lib/FFmpeg/command.py +292 -292
  66. StreamingCommunity/Src/Lib/FFmpeg/util.py +241 -241
  67. StreamingCommunity/Src/Lib/M3U8/__init__.py +5 -5
  68. StreamingCommunity/Src/Lib/M3U8/decryptor.py +128 -128
  69. StreamingCommunity/Src/Lib/M3U8/estimator.py +172 -172
  70. StreamingCommunity/Src/Lib/M3U8/parser.py +666 -666
  71. StreamingCommunity/Src/Lib/M3U8/url_fixer.py +51 -51
  72. StreamingCommunity/Src/Lib/TMBD/__init__.py +1 -1
  73. StreamingCommunity/Src/Lib/TMBD/obj_tmbd.py +39 -39
  74. StreamingCommunity/Src/Lib/TMBD/tmdb.py +345 -345
  75. StreamingCommunity/Src/Upload/update.py +64 -64
  76. StreamingCommunity/Src/Upload/version.py +5 -5
  77. StreamingCommunity/Src/Util/_jsonConfig.py +204 -204
  78. StreamingCommunity/Src/Util/call_stack.py +42 -42
  79. StreamingCommunity/Src/Util/color.py +20 -20
  80. StreamingCommunity/Src/Util/console.py +12 -12
  81. StreamingCommunity/Src/Util/headers.py +147 -147
  82. StreamingCommunity/Src/Util/logger.py +53 -53
  83. StreamingCommunity/Src/Util/message.py +46 -46
  84. StreamingCommunity/Src/Util/os.py +417 -417
  85. StreamingCommunity/Src/Util/table.py +163 -163
  86. StreamingCommunity/run.py +196 -196
  87. {StreamingCommunity-1.7.6.dist-info → StreamingCommunity-1.8.0.dist-info}/METADATA +1 -1
  88. StreamingCommunity-1.8.0.dist-info/RECORD +97 -0
  89. StreamingCommunity-1.7.6.dist-info/RECORD +0 -97
  90. {StreamingCommunity-1.7.6.dist-info → StreamingCommunity-1.8.0.dist-info}/LICENSE +0 -0
  91. {StreamingCommunity-1.7.6.dist-info → StreamingCommunity-1.8.0.dist-info}/WHEEL +0 -0
  92. {StreamingCommunity-1.7.6.dist-info → StreamingCommunity-1.8.0.dist-info}/entry_points.txt +0 -0
  93. {StreamingCommunity-1.7.6.dist-info → StreamingCommunity-1.8.0.dist-info}/top_level.txt +0 -0
@@ -1,165 +1,165 @@
1
- # 10.12.23
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.Src.Util.console import console
13
- from StreamingCommunity.Src.Util._jsonConfig import config_manager
14
- from StreamingCommunity.Src.Util.table import TVShowManager
15
-
16
-
17
- # Logic class
18
- from StreamingCommunity.Src.Api.Template import get_select_title
19
- from StreamingCommunity.Src.Api.Template.Util import search_domain
20
- from StreamingCommunity.Src.Api.Template.Class.SearchType import MediaManager
21
-
22
-
23
- # Variable
24
- from .costant import SITE_NAME
25
- media_search_manager = MediaManager()
26
- table_show_manager = TVShowManager()
27
-
28
-
29
-
30
- def get_token(site_name: str, domain: str) -> dict:
31
- """
32
- Function to retrieve session tokens from a specified website.
33
-
34
- Parameters:
35
- - site_name (str): The name of the site.
36
- - domain (str): The domain of the site.
37
-
38
- Returns:
39
- - dict: A dictionary containing session tokens. The keys are 'XSRF_TOKEN', 'animeunity_session', and 'csrf_token'.
40
- """
41
-
42
- # Send a GET request to the specified URL composed of the site name and domain
43
- response = httpx.get(f"https://www.{site_name}.{domain}")
44
- response.raise_for_status()
45
-
46
- # Initialize variables to store CSRF token
47
- find_csrf_token = None
48
-
49
- # Parse the HTML response using BeautifulSoup
50
- soup = BeautifulSoup(response.text, "html.parser")
51
-
52
- # Loop through all meta tags in the HTML response
53
- for html_meta in soup.find_all("meta"):
54
-
55
- # Check if the meta tag has a 'name' attribute equal to "csrf-token"
56
- if html_meta.get('name') == "csrf-token":
57
-
58
- # If found, retrieve the content of the meta tag, which is the CSRF token
59
- find_csrf_token = html_meta.get('content')
60
-
61
- logging.info(f"Extract: ('animeunity_session': {response.cookies['animeunity_session']}, 'csrf_token': {find_csrf_token})")
62
- return {
63
- 'animeunity_session': response.cookies['animeunity_session'],
64
- 'csrf_token': find_csrf_token
65
- }
66
-
67
-
68
- def get_real_title(record):
69
- """
70
- Get the real title from a record.
71
-
72
- This function takes a record, which is assumed to be a dictionary representing a row of JSON data.
73
- It looks for a title in the record, prioritizing English over Italian titles if available.
74
-
75
- Parameters:
76
- - record (dict): A dictionary representing a row of JSON data.
77
-
78
- Returns:
79
- - str: The title found in the record. If no title is found, returns None.
80
- """
81
-
82
- if record['title'] is not None:
83
- return record['title']
84
-
85
- elif record['title_eng'] is not None:
86
- return record['title_eng']
87
-
88
- else:
89
- return record['title_it']
90
-
91
-
92
- def title_search(title: str) -> int:
93
- """
94
- Function to perform an anime search using a provided title.
95
-
96
- Parameters:
97
- - title_search (str): The title to search for.
98
-
99
- Returns:
100
- - int: A number containing the length of media search manager.
101
- """
102
-
103
- # Get token and session value from configuration
104
- max_timeout = config_manager.get_int("REQUESTS", "timeout")
105
- domain_to_use, _ = search_domain(SITE_NAME, f"https://www.{SITE_NAME}")
106
-
107
- data = get_token(SITE_NAME, domain_to_use)
108
-
109
- # Prepare cookies to be used in the request
110
- cookies = {
111
- 'animeunity_session': data.get('animeunity_session')
112
- }
113
-
114
- # Prepare headers for the request
115
- headers = {
116
- 'accept': 'application/json, text/plain, */*',
117
- 'accept-language': 'it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7',
118
- 'content-type': 'application/json;charset=UTF-8',
119
- 'x-csrf-token': data.get('csrf_token')
120
- }
121
-
122
- # Prepare JSON data to be sent in the request
123
- json_data = {
124
- 'title': title # Use the provided title for the search
125
- }
126
-
127
- # Send a POST request to the API endpoint for live search
128
- try:
129
- response = httpx.post(
130
- url=f'https://www.{SITE_NAME}.{domain_to_use}/livesearch',
131
- cookies=cookies,
132
- headers=headers,
133
- json=json_data,
134
- timeout=max_timeout
135
- )
136
- response.raise_for_status()
137
-
138
- except Exception as e:
139
- console.print(f"Site: {SITE_NAME}, request search error: {e}")
140
-
141
- # Process each record returned in the response
142
- for dict_title in response.json()['records']:
143
-
144
- # Rename keys for consistency
145
- dict_title['name'] = get_real_title(dict_title)
146
-
147
- # Add the record to media search manager if the name is not None
148
- media_search_manager.add_media({
149
- 'id': dict_title.get('id'),
150
- 'slug': dict_title.get('slug'),
151
- 'name': dict_title.get('name'),
152
- 'type': dict_title.get('type'),
153
- 'score': dict_title.get('score'),
154
- 'episodes_count': dict_title.get('episodes_count')
155
- })
156
-
157
- # Return the length of media search manager
158
- return media_search_manager.get_length()
159
-
160
-
161
- def run_get_select_title():
162
- """
163
- Display a selection of titles and prompt the user to choose one.
164
- """
1
+ # 10.12.23
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.Src.Util.console import console
13
+ from StreamingCommunity.Src.Util._jsonConfig import config_manager
14
+ from StreamingCommunity.Src.Util.table import TVShowManager
15
+
16
+
17
+ # Logic class
18
+ from StreamingCommunity.Src.Api.Template import get_select_title
19
+ from StreamingCommunity.Src.Api.Template.Util import search_domain
20
+ from StreamingCommunity.Src.Api.Template.Class.SearchType import MediaManager
21
+
22
+
23
+ # Variable
24
+ from .costant import SITE_NAME
25
+ media_search_manager = MediaManager()
26
+ table_show_manager = TVShowManager()
27
+
28
+
29
+
30
+ def get_token(site_name: str, domain: str) -> dict:
31
+ """
32
+ Function to retrieve session tokens from a specified website.
33
+
34
+ Parameters:
35
+ - site_name (str): The name of the site.
36
+ - domain (str): The domain of the site.
37
+
38
+ Returns:
39
+ - dict: A dictionary containing session tokens. The keys are 'XSRF_TOKEN', 'animeunity_session', and 'csrf_token'.
40
+ """
41
+
42
+ # Send a GET request to the specified URL composed of the site name and domain
43
+ response = httpx.get(f"https://www.{site_name}.{domain}")
44
+ response.raise_for_status()
45
+
46
+ # Initialize variables to store CSRF token
47
+ find_csrf_token = None
48
+
49
+ # Parse the HTML response using BeautifulSoup
50
+ soup = BeautifulSoup(response.text, "html.parser")
51
+
52
+ # Loop through all meta tags in the HTML response
53
+ for html_meta in soup.find_all("meta"):
54
+
55
+ # Check if the meta tag has a 'name' attribute equal to "csrf-token"
56
+ if html_meta.get('name') == "csrf-token":
57
+
58
+ # If found, retrieve the content of the meta tag, which is the CSRF token
59
+ find_csrf_token = html_meta.get('content')
60
+
61
+ logging.info(f"Extract: ('animeunity_session': {response.cookies['animeunity_session']}, 'csrf_token': {find_csrf_token})")
62
+ return {
63
+ 'animeunity_session': response.cookies['animeunity_session'],
64
+ 'csrf_token': find_csrf_token
65
+ }
66
+
67
+
68
+ def get_real_title(record):
69
+ """
70
+ Get the real title from a record.
71
+
72
+ This function takes a record, which is assumed to be a dictionary representing a row of JSON data.
73
+ It looks for a title in the record, prioritizing English over Italian titles if available.
74
+
75
+ Parameters:
76
+ - record (dict): A dictionary representing a row of JSON data.
77
+
78
+ Returns:
79
+ - str: The title found in the record. If no title is found, returns None.
80
+ """
81
+
82
+ if record['title'] is not None:
83
+ return record['title']
84
+
85
+ elif record['title_eng'] is not None:
86
+ return record['title_eng']
87
+
88
+ else:
89
+ return record['title_it']
90
+
91
+
92
+ def title_search(title: str) -> int:
93
+ """
94
+ Function to perform an anime search using a provided title.
95
+
96
+ Parameters:
97
+ - title_search (str): The title to search for.
98
+
99
+ Returns:
100
+ - int: A number containing the length of media search manager.
101
+ """
102
+
103
+ # Get token and session value from configuration
104
+ max_timeout = config_manager.get_int("REQUESTS", "timeout")
105
+ domain_to_use, _ = search_domain(SITE_NAME, f"https://www.{SITE_NAME}")
106
+
107
+ data = get_token(SITE_NAME, domain_to_use)
108
+
109
+ # Prepare cookies to be used in the request
110
+ cookies = {
111
+ 'animeunity_session': data.get('animeunity_session')
112
+ }
113
+
114
+ # Prepare headers for the request
115
+ headers = {
116
+ 'accept': 'application/json, text/plain, */*',
117
+ 'accept-language': 'it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7',
118
+ 'content-type': 'application/json;charset=UTF-8',
119
+ 'x-csrf-token': data.get('csrf_token')
120
+ }
121
+
122
+ # Prepare JSON data to be sent in the request
123
+ json_data = {
124
+ 'title': title # Use the provided title for the search
125
+ }
126
+
127
+ # Send a POST request to the API endpoint for live search
128
+ try:
129
+ response = httpx.post(
130
+ url=f'https://www.{SITE_NAME}.{domain_to_use}/livesearch',
131
+ cookies=cookies,
132
+ headers=headers,
133
+ json=json_data,
134
+ timeout=max_timeout
135
+ )
136
+ response.raise_for_status()
137
+
138
+ except Exception as e:
139
+ console.print(f"Site: {SITE_NAME}, request search error: {e}")
140
+
141
+ # Process each record returned in the response
142
+ for dict_title in response.json()['records']:
143
+
144
+ # Rename keys for consistency
145
+ dict_title['name'] = get_real_title(dict_title)
146
+
147
+ # Add the record to media search manager if the name is not None
148
+ media_search_manager.add_media({
149
+ 'id': dict_title.get('id'),
150
+ 'slug': dict_title.get('slug'),
151
+ 'name': dict_title.get('name'),
152
+ 'type': dict_title.get('type'),
153
+ 'score': dict_title.get('score'),
154
+ 'episodes_count': dict_title.get('episodes_count')
155
+ })
156
+
157
+ # Return the length of media search manager
158
+ return media_search_manager.get_length()
159
+
160
+
161
+ def run_get_select_title():
162
+ """
163
+ Display a selection of titles and prompt the user to choose one.
164
+ """
165
165
  return get_select_title(table_show_manager, media_search_manager)
@@ -1,51 +1,51 @@
1
- # 01.07.24
2
-
3
- from unidecode import unidecode
4
-
5
-
6
- # Internal utilities
7
- from StreamingCommunity.Src.Util.console import console, msg
8
-
9
-
10
- # Logic class
11
- from .site import title_search, run_get_select_title, media_search_manager
12
- from .title import download_title
13
-
14
-
15
- # Variable
16
- indice = 7
17
- _useFor = "film_serie"
18
- _deprecate = False
19
- _priority = 2
20
- _engineDownload = "tor"
21
-
22
-
23
- def search(string_to_search: str = None, get_onylDatabase:bool = False):
24
- """
25
- Main function of the application for film and series.
26
- """
27
-
28
- if string_to_search is None:
29
- string_to_search = msg.ask("\n[purple]Insert word to search in all site").strip()
30
-
31
- # Search on database
32
- len_database = title_search(unidecode(string_to_search))
33
-
34
- # Return list of elements
35
- if get_onylDatabase:
36
- return media_search_manager
37
-
38
- if len_database > 0:
39
-
40
- # Select title from list
41
- select_title = run_get_select_title()
42
-
43
- # Download title
44
- download_title(select_title)
45
-
46
-
47
- else:
48
- console.print(f"\n[red]Nothing matching was found for[white]: [purple]{string_to_search}")
49
-
50
- # Retry
51
- search()
1
+ # 01.07.24
2
+
3
+ from unidecode import unidecode
4
+
5
+
6
+ # Internal utilities
7
+ from StreamingCommunity.Src.Util.console import console, msg
8
+
9
+
10
+ # Logic class
11
+ from .site import title_search, run_get_select_title, media_search_manager
12
+ from .title import download_title
13
+
14
+
15
+ # Variable
16
+ indice = 7
17
+ _useFor = "film_serie"
18
+ _deprecate = False
19
+ _priority = 2
20
+ _engineDownload = "tor"
21
+
22
+
23
+ def search(string_to_search: str = None, get_onylDatabase:bool = False):
24
+ """
25
+ Main function of the application for film and series.
26
+ """
27
+
28
+ if string_to_search is None:
29
+ string_to_search = msg.ask("\n[purple]Insert word to search in all site").strip()
30
+
31
+ # Search on database
32
+ len_database = title_search(unidecode(string_to_search))
33
+
34
+ # Return list of elements
35
+ if get_onylDatabase:
36
+ return media_search_manager
37
+
38
+ if len_database > 0:
39
+
40
+ # Select title from list
41
+ select_title = run_get_select_title()
42
+
43
+ # Download title
44
+ download_title(select_title)
45
+
46
+
47
+ else:
48
+ console.print(f"\n[red]Nothing matching was found for[white]: [purple]{string_to_search}")
49
+
50
+ # Retry
51
+ search()
@@ -1,15 +1,15 @@
1
- # 01.07.24
2
-
3
- import os
4
-
5
-
6
- # Internal utilities
7
- from StreamingCommunity.Src.Util._jsonConfig import config_manager
8
-
9
-
10
- SITE_NAME = os.path.basename(os.path.dirname(os.path.abspath(__file__)))
11
- ROOT_PATH = config_manager.get('DEFAULT', 'root_path')
12
- DOMAIN_NOW = config_manager.get_dict('SITE', SITE_NAME)['domain']
13
-
14
- SERIES_FOLDER = "Serie"
15
- MOVIE_FOLDER = "Film"
1
+ # 01.07.24
2
+
3
+ import os
4
+
5
+
6
+ # Internal utilities
7
+ from StreamingCommunity.Src.Util._jsonConfig import config_manager
8
+
9
+
10
+ SITE_NAME = os.path.basename(os.path.dirname(os.path.abspath(__file__)))
11
+ ROOT_PATH = config_manager.get('DEFAULT', 'root_path')
12
+ DOMAIN_NOW = config_manager.get_dict('SITE', SITE_NAME)['domain']
13
+
14
+ SERIES_FOLDER = "Serie"
15
+ MOVIE_FOLDER = "Film"
@@ -1,84 +1,84 @@
1
- # 01.07.24
2
-
3
- # External libraries
4
- import httpx
5
- from bs4 import BeautifulSoup
6
-
7
-
8
- # Internal utilities
9
- from StreamingCommunity.Src.Util.console import console
10
- from StreamingCommunity.Src.Util._jsonConfig import config_manager
11
- from StreamingCommunity.Src.Util.headers import get_headers
12
- from StreamingCommunity.Src.Util.table import TVShowManager
13
-
14
-
15
- # Logic class
16
- from StreamingCommunity.Src.Api.Template import get_select_title
17
- from StreamingCommunity.Src.Api.Template.Util import search_domain
18
- from StreamingCommunity.Src.Api.Template.Class.SearchType import MediaManager
19
-
20
-
21
- # Variable
22
- from .costant import SITE_NAME
23
- media_search_manager = MediaManager()
24
- table_show_manager = TVShowManager()
25
-
26
-
27
- def title_search(word_to_search: str) -> int:
28
- """
29
- Search for titles based on a search query.
30
-
31
- Parameters:
32
- - title_search (str): The title to search for.
33
-
34
- Returns:
35
- - int: The number of titles found.
36
- """
37
-
38
- # Find new domain if prev dont work
39
- max_timeout = config_manager.get_int("REQUESTS", "timeout")
40
- domain_to_use, _ = search_domain(SITE_NAME, f"https://{SITE_NAME}")
41
-
42
- # Construct the full site URL and load the search page
43
- try:
44
- response = httpx.get(
45
- url=f"https://{SITE_NAME}.{domain_to_use}/search?q={word_to_search}&category=1&subcat=2&page=1",
46
- headers={'user-agent': get_headers()},
47
- timeout=max_timeout
48
- )
49
- response.raise_for_status()
50
-
51
- except Exception as e:
52
- console.print(f"Site: {SITE_NAME}, request search error: {e}")
53
-
54
- # Create soup and find table
55
- soup = BeautifulSoup(response.text, "html.parser")
56
-
57
- for title_div in soup.find_all("li", class_ = "card"):
58
- try:
59
- div_stats = title_div.find("div", class_ = "stats")
60
-
61
- title_info = {
62
- 'name': title_div.find("a").get_text(strip=True),
63
- 'url': title_div.find_all("a")[-1].get("href"),
64
- #'nDownload': div_stats.find_all("div")[0].get_text(strip=True),
65
- 'size': div_stats.find_all("div")[1].get_text(strip=True),
66
- 'seader': div_stats.find_all("div")[2].get_text(strip=True),
67
- 'leacher': div_stats.find_all("div")[3].get_text(strip=True),
68
- 'date': div_stats.find_all("div")[4].get_text(strip=True)
69
- }
70
-
71
- media_search_manager.add_media(title_info)
72
-
73
- except:
74
- pass
75
-
76
- # Return the number of titles found
77
- return media_search_manager.get_length()
78
-
79
-
80
- def run_get_select_title():
81
- """
82
- Display a selection of titles and prompt the user to choose one.
83
- """
84
- return get_select_title(table_show_manager, media_search_manager)
1
+ # 01.07.24
2
+
3
+ # External libraries
4
+ import httpx
5
+ from bs4 import BeautifulSoup
6
+
7
+
8
+ # Internal utilities
9
+ from StreamingCommunity.Src.Util.console import console
10
+ from StreamingCommunity.Src.Util._jsonConfig import config_manager
11
+ from StreamingCommunity.Src.Util.headers import get_headers
12
+ from StreamingCommunity.Src.Util.table import TVShowManager
13
+
14
+
15
+ # Logic class
16
+ from StreamingCommunity.Src.Api.Template import get_select_title
17
+ from StreamingCommunity.Src.Api.Template.Util import search_domain
18
+ from StreamingCommunity.Src.Api.Template.Class.SearchType import MediaManager
19
+
20
+
21
+ # Variable
22
+ from .costant import SITE_NAME
23
+ media_search_manager = MediaManager()
24
+ table_show_manager = TVShowManager()
25
+
26
+
27
+ def title_search(word_to_search: str) -> int:
28
+ """
29
+ Search for titles based on a search query.
30
+
31
+ Parameters:
32
+ - title_search (str): The title to search for.
33
+
34
+ Returns:
35
+ - int: The number of titles found.
36
+ """
37
+
38
+ # Find new domain if prev dont work
39
+ max_timeout = config_manager.get_int("REQUESTS", "timeout")
40
+ domain_to_use, _ = search_domain(SITE_NAME, f"https://{SITE_NAME}")
41
+
42
+ # Construct the full site URL and load the search page
43
+ try:
44
+ response = httpx.get(
45
+ url=f"https://{SITE_NAME}.{domain_to_use}/search?q={word_to_search}&category=1&subcat=2&page=1",
46
+ headers={'user-agent': get_headers()},
47
+ timeout=max_timeout
48
+ )
49
+ response.raise_for_status()
50
+
51
+ except Exception as e:
52
+ console.print(f"Site: {SITE_NAME}, request search error: {e}")
53
+
54
+ # Create soup and find table
55
+ soup = BeautifulSoup(response.text, "html.parser")
56
+
57
+ for title_div in soup.find_all("li", class_ = "card"):
58
+ try:
59
+ div_stats = title_div.find("div", class_ = "stats")
60
+
61
+ title_info = {
62
+ 'name': title_div.find("a").get_text(strip=True),
63
+ 'url': title_div.find_all("a")[-1].get("href"),
64
+ #'nDownload': div_stats.find_all("div")[0].get_text(strip=True),
65
+ 'size': div_stats.find_all("div")[1].get_text(strip=True),
66
+ 'seader': div_stats.find_all("div")[2].get_text(strip=True),
67
+ 'leacher': div_stats.find_all("div")[3].get_text(strip=True),
68
+ 'date': div_stats.find_all("div")[4].get_text(strip=True)
69
+ }
70
+
71
+ media_search_manager.add_media(title_info)
72
+
73
+ except:
74
+ pass
75
+
76
+ # Return the number of titles found
77
+ return media_search_manager.get_length()
78
+
79
+
80
+ def run_get_select_title():
81
+ """
82
+ Display a selection of titles and prompt the user to choose one.
83
+ """
84
+ return get_select_title(table_show_manager, media_search_manager)