Merge pull request 'Use API All domains as search sources' (#8) from DAP-86-hinzuf-gen-weiterer-streaming-domains into main
Reviewed-on: #8
This commit was merged in pull request #8.
This commit is contained in:
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
import re
|
import re
|
||||||
import xbmcgui
|
import xbmcgui
|
||||||
|
from concurrent.futures import ThreadPoolExecutor, as_completed
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
from resources.lib.handler.ParameterHandler import ParameterHandler
|
from resources.lib.handler.ParameterHandler import ParameterHandler
|
||||||
@@ -60,6 +61,42 @@ def _get_configured_domain():
|
|||||||
|
|
||||||
return _get_default_domain()
|
return _get_default_domain()
|
||||||
|
|
||||||
|
|
||||||
|
def _get_search_domains():
|
||||||
|
domains = []
|
||||||
|
configured = _get_configured_domain()
|
||||||
|
if configured:
|
||||||
|
domains.append(configured)
|
||||||
|
|
||||||
|
for entry in API_ALL_DOMAINS:
|
||||||
|
domain = entry['domain']
|
||||||
|
if domain not in domains:
|
||||||
|
domains.append(domain)
|
||||||
|
|
||||||
|
return domains
|
||||||
|
|
||||||
|
|
||||||
|
def _fetch_movies_for_domain(domain, sLang):
|
||||||
|
oRequest = cRequestHandler(
|
||||||
|
'https://' + domain + '/data/browse/?lang=%s&order_by=%s&page=%s&limit=0' % (sLang, 'new', '1'),
|
||||||
|
caching=True
|
||||||
|
)
|
||||||
|
oRequest.addHeaderEntry('Referer', 'https://' + domain + '/')
|
||||||
|
oRequest.addHeaderEntry('Origin', 'https://' + domain + '/')
|
||||||
|
oRequest.cacheTime = 60 * 60 * 48
|
||||||
|
sJson = oRequest.request()
|
||||||
|
aJson = loads(sJson)
|
||||||
|
movies = aJson.get('movies', [])
|
||||||
|
return movies if isinstance(movies, list) else []
|
||||||
|
|
||||||
|
|
||||||
|
def _movie_signature(movie):
|
||||||
|
return (
|
||||||
|
str(movie.get('_id', '')).strip(),
|
||||||
|
str(movie.get('title', '')).strip().lower(),
|
||||||
|
str(movie.get('year', '')).strip(),
|
||||||
|
)
|
||||||
|
|
||||||
SITE_NAME = 'API Suchmaschine'
|
SITE_NAME = 'API Suchmaschine'
|
||||||
SITE_ICON = 'api.png'
|
SITE_ICON = 'api.png'
|
||||||
SITE_IDENTIFIER = 'api_all'
|
SITE_IDENTIFIER = 'api_all'
|
||||||
@@ -623,13 +660,30 @@ def loadMoviesData():
|
|||||||
sLang = '3'
|
sLang = '3'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
oRequest = cRequestHandler(URL_SEARCH % (sLang, 'new', '1'), caching=True)
|
merged_movies = {}
|
||||||
oRequest.addHeaderEntry('Referer', REFERER)
|
domains = _get_search_domains()
|
||||||
oRequest.addHeaderEntry('Origin', ORIGIN)
|
|
||||||
oRequest.cacheTime = 60 * 60 * 48 # HTML Cache Zeit 2 Tage
|
with ThreadPoolExecutor(max_workers=min(8, len(domains) or 1)) as executor:
|
||||||
sJson = oRequest.request()
|
futures = {
|
||||||
apiJson = loads(sJson)
|
executor.submit(_fetch_movies_for_domain, domain, sLang): domain
|
||||||
logger.info('API-Daten erfolgreich geladen')
|
for domain in domains
|
||||||
|
}
|
||||||
|
|
||||||
|
for future in as_completed(futures):
|
||||||
|
domain = futures[future]
|
||||||
|
try:
|
||||||
|
movies = future.result()
|
||||||
|
except Exception:
|
||||||
|
logger.info('API-Daten konnten von %s nicht geladen werden' % domain)
|
||||||
|
continue
|
||||||
|
|
||||||
|
for movie in movies:
|
||||||
|
if not isinstance(movie, dict) or '_id' not in movie:
|
||||||
|
continue
|
||||||
|
merged_movies.setdefault(_movie_signature(movie), movie)
|
||||||
|
|
||||||
|
apiJson = {'movies': list(merged_movies.values())}
|
||||||
|
logger.info('API-Daten erfolgreich aus %d Domains geladen' % len(domains))
|
||||||
except:
|
except:
|
||||||
logger.error('Fehler beim Laden der API-Daten')
|
logger.error('Fehler beim Laden der API-Daten')
|
||||||
apiJson = {'movies': []}
|
apiJson = {'movies': []}
|
||||||
|
|||||||
Reference in New Issue
Block a user