cloudstream/.github/site-list.py
Jace 6f05154f50
[Feature] Display language on github page site list. (#1038)
* add language to gh page

* display language on page

* fixes

* log for debugging

* handle error on parsing language

* minor change

* rename some providers for consistency on naming conventions.

* fixes on site-list generator script:
- fix key name, use classname from content. defaults to filename.
- fix provider display name, use name from content. defaults to filename.
- only build from animeproviders and movieproviders path. prevents unnecessary objects populating json file.
2022-05-08 12:57:30 +00:00

65 lines
2.6 KiB
Python

#!/usr/bin/python3
from glob import glob
from re import findall, compile, DOTALL
from json import dump, load
from typing import List, Dict
# Globals
JSON_PATH = "docs/providers.json"
GLOB_ANIME = "app/src/main/java/com/lagradost/cloudstream3/animeproviders/*Provider.kt"
GLOB_MOVIE = "app/src/main/java/com/lagradost/cloudstream3/movieproviders/*Provider.kt"
URL_REGEX = compile("override\sva[lr]\smainUrl[^\"']+[\"'](https?://[a-zA-Z0-9\.-]+)[\"']")
FILENAME_REGEX = compile("([A-Za-z0-9]+)(?:.kt)$")
PROVIDER_CLASSNAME_REGEX = compile("(?<=class\s)([a-zA-Z]+)(?=\s:\sMainAPI\(\))")
NAME_REGEX = compile("override\sva[lr]\sname[^\"']+[\"']([a-zA-Z-.\s]+)")
LANG_REGEX = compile("override\sva[lr]\slang[^\"']+[\"']([a-zA-Z]+)")
old_sites: Dict[str, Dict] = load(open(JSON_PATH, "r", encoding="utf-8"))
sites: Dict[str, Dict] = {}
animelist = glob(GLOB_ANIME)
movielist = glob(GLOB_MOVIE)
allProvidersList = animelist + movielist
# parse all *Provider.kt files
for path in allProvidersList:
with open(path, "r", encoding='utf-8') as file:
try:
site_text: str = file.read()
filename: str = findall(FILENAME_REGEX, path)[0]
name: str = [*findall(PROVIDER_CLASSNAME_REGEX, site_text), filename][0]
provider_url: str = [*findall(URL_REGEX, site_text), ""][0]
lang: str = [*findall(LANG_REGEX, site_text), "en"][0]
if name in old_sites.keys(): # if already in previous list use old status and name
sites[name] = {
"name": old_sites[name]['name'],
"url": provider_url if provider_url else old_sites[name]['url'],
"status": old_sites[name]['status'],
"language": lang
}
else: # if not in previous list add with new data
display_name: str = [*findall(NAME_REGEX, site_text), name][0]
if display_name.endswith("Provider"):
display_name = display_name[:-len("Provider")]
sites[name] = {
"name": display_name,
"url": provider_url if provider_url else "",
"status": 1,
"language": lang
}
except Exception as ex:
print("Error => {0}: {1}".format(path, ex))
# add sites from old_sites that are missing in new list
for name in old_sites.keys():
if name not in sites.keys():
sites[name] = {
"name": old_sites[name]['name'],
"url": old_sites[name]['url'],
"status": old_sites[name]['status']
}
dump(sites, open(JSON_PATH, "w+", encoding="utf-8"), indent=4, sort_keys=True)