Upload and store favicons
This commit is contained in:
@@ -6,7 +6,7 @@ from random import random
|
||||
import sentry_sdk
|
||||
from sentry_sdk.integrations.django import DjangoIntegration
|
||||
|
||||
DEBUG = True
|
||||
DEBUG = os.getenv("DEBUG", True)
|
||||
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
SECRET_KEY = "wow so secret"
|
||||
@@ -103,6 +103,9 @@ AUTH_FAILED_REDIRECT_URL = "https://vas3k.ru/auth/login/"
|
||||
|
||||
SENTRY_DSN = None
|
||||
|
||||
MEDIA_UPLOAD_URL = "https://i.vas3k.ru/upload/"
|
||||
MEDIA_UPLOAD_CODE = None # should be set in private_settings.py
|
||||
|
||||
try:
|
||||
# poor mans' private settings
|
||||
from infomate.private_settings import *
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import os
|
||||
import sys
|
||||
import django
|
||||
|
||||
from utils.images import upload_image_from_url
|
||||
|
||||
BASE_DIR = os.path.join(os.path.dirname(__file__), "..")
|
||||
sys.path.append(BASE_DIR)
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "infomate.settings")
|
||||
@@ -133,6 +136,8 @@ def initialize(config, board_slug):
|
||||
if not icon:
|
||||
icon = find_favicon(feed_url, html)
|
||||
print(f"- found favicon: {icon}")
|
||||
icon = upload_image_from_url(icon)
|
||||
print(f"- uploaded favicon: {icon}")
|
||||
|
||||
feed.icon = icon
|
||||
|
||||
|
||||
49
utils/images.py
Normal file
49
utils/images.py
Normal file
@@ -0,0 +1,49 @@
|
||||
import io
|
||||
import logging
|
||||
import os
|
||||
from urllib.parse import urlparse
|
||||
|
||||
import requests
|
||||
from django.conf import settings
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def upload_image_from_url(url):
|
||||
if not url:
|
||||
return None
|
||||
|
||||
image_name = os.path.basename(urlparse(url).path)
|
||||
if "." not in image_name:
|
||||
image_name += ".jpg"
|
||||
|
||||
try:
|
||||
image_data = io.BytesIO(requests.get(url).content)
|
||||
except requests.exceptions.RequestException:
|
||||
return None
|
||||
|
||||
try:
|
||||
uploaded = requests.post(
|
||||
url=settings.MEDIA_UPLOAD_URL,
|
||||
params={
|
||||
"code": settings.MEDIA_UPLOAD_CODE
|
||||
},
|
||||
files={
|
||||
"media": (image_name, image_data)
|
||||
}
|
||||
)
|
||||
except requests.exceptions.RequestException:
|
||||
return None
|
||||
finally:
|
||||
image_data.close()
|
||||
|
||||
if 200 <= uploaded.status_code <= 299:
|
||||
try:
|
||||
response_data = uploaded.json()
|
||||
except Exception as ex:
|
||||
log.exception(f"Error uploading avatar: {ex}")
|
||||
return None
|
||||
|
||||
return response_data["uploaded"][0]
|
||||
|
||||
return None
|
||||
Reference in New Issue
Block a user