From 63b9cc3053c2d8201c2ea72dcf7aef526fc9d248 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 15 Nov 2025 20:09:15 +0000 Subject: [PATCH 1/2] Initial plan From 4ec82b507e215134f0bc56b95ba14f2ba3a3d40d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 15 Nov 2025 20:14:53 +0000 Subject: [PATCH 2/2] Replace deprecated Clearbit Logo API with Google Favicon Service Co-authored-by: DonnieBLT <128622481+DonnieBLT@users.noreply.github.com> --- website/models.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/website/models.py b/website/models.py index 535feccad1..690542f761 100644 --- a/website/models.py +++ b/website/models.py @@ -18,7 +18,6 @@ from django.contrib.contenttypes.models import ContentType from django.core.cache import cache from django.core.exceptions import ValidationError -from django.core.files.base import ContentFile from django.core.files.storage import default_storage from django.core.validators import MaxValueValidator, MinValueValidator, URLValidator from django.db import models, transaction @@ -299,16 +298,13 @@ def get_name(self): def get_logo(self): if self.logo: return self.logo.url - image_request = requests.get("https://logo.clearbit.com/" + self.name) - try: - if image_request.status_code == 200: - image_content = ContentFile(image_request.content) - self.logo.save(self.name + ".jpg", image_content) - return self.logo.url - - except: - favicon_url = self.url + "/favicon.ico" - return favicon_url + # Use Google's favicon service as a free alternative to Clearbit + # Extract domain from URL for better compatibility + parsed_url = urlparse(self.url if "://" in self.url else f"http://{self.url}") + domain = parsed_url.netloc or self.name + # Google favicon service with 128px size for better quality + favicon_url = f"https://www.google.com/s2/favicons?domain={domain}&sz=128" + return favicon_url @property def hostname_domain(self):