From 20349922c9b180e9ce0b9bb6295cba36dd2e2e6b Mon Sep 17 00:00:00 2001 From: diam0ndkiller <> Date: Thu, 19 Jun 2025 12:26:14 +0200 Subject: [PATCH 1/2] Added url parameter to favicon getter functions to use with external APIs --- usr/lib/webapp-manager/common.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/usr/lib/webapp-manager/common.py b/usr/lib/webapp-manager/common.py index e9ec1aa..c3c0a51 100644 --- a/usr/lib/webapp-manager/common.py +++ b/usr/lib/webapp-manager/common.py @@ -485,14 +485,14 @@ def download_image(root_url: str, link: str) -> Optional[PIL.Image.Image]: print(link) return None -def _find_link_favicon(soup, iconformat): +def _find_link_favicon(soup, iconformat, url): items = soup.find_all("link", {"rel": iconformat}) for item in items: link = item.get("href") if link: yield link -def _find_meta_content(soup, iconformat): +def _find_meta_content(soup, iconformat, url): item = soup.find("meta", {"name": iconformat}) if not item: return @@ -500,14 +500,14 @@ def _find_meta_content(soup, iconformat): if link: yield link -def _find_property(soup, iconformat): +def _find_property(soup, iconformat, url): items = soup.find_all("meta", {"property": iconformat}) for item in items: link = item.get("content") if link: yield link -def _find_url(_soup, iconformat): +def _find_url(_soup, iconformat, url): yield iconformat @@ -516,6 +516,7 @@ def download_favicon(url): url = normalize_url(url) (scheme, netloc, path, _, _, _) = urllib.parse.urlparse(url) root_url = "%s://%s" % (scheme, netloc) + api_url = "%s%s" % (netloc, path) # Check HTML and /favicon.ico try: @@ -538,7 +539,7 @@ def download_favicon(url): # icons defined in the HTML for (iconformat, getter) in iconformats: - for link in getter(soup, iconformat): + for link in getter(soup, iconformat, api_url): image = download_image(root_url, link) if image is not None: t = tempfile.NamedTemporaryFile(suffix=".png", delete=False) From c8f16879ee41ca4d646c8badd5e242b7c552fed7 Mon Sep 17 00:00:00 2001 From: diam0ndkiller <> Date: Thu, 19 Jun 2025 12:27:35 +0200 Subject: [PATCH 2/2] Added support for Google's favicon API as fallback option --- usr/lib/webapp-manager/common.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/usr/lib/webapp-manager/common.py b/usr/lib/webapp-manager/common.py index c3c0a51..256487e 100644 --- a/usr/lib/webapp-manager/common.py +++ b/usr/lib/webapp-manager/common.py @@ -510,6 +510,13 @@ def _find_property(soup, iconformat, url): def _find_url(_soup, iconformat, url): yield iconformat +def _find_google_api_favicon(_soup, iconformat, url): + url = urllib.parse.quote(url, safe='') + #response = requests.get("https://www.google.com/s2/favicons?sz=32&domain=%s" % url, timeout=3) + #link = response.url + link = "https://www.google.com/s2/favicons?sz=32&domain=%s" % url + yield link + def download_favicon(url): images = [] @@ -535,6 +542,7 @@ def download_favicon(url): ("msapplication-square70x70logo", _find_meta_content), ("og:image", _find_property), ("favicon.ico", _find_url), + ("google-api", _find_google_api_favicon), ] # icons defined in the HTML