mirror of
https://github.com/tubearchivist/tubearchivist
synced 2024-11-19 15:25:51 +00:00
fallback channel and video artwork for 404 errors
This commit is contained in:
parent
3473c79d63
commit
72af95acd8
@ -22,6 +22,7 @@
|
|||||||
"add_thumbnail": false
|
"add_thumbnail": false
|
||||||
},
|
},
|
||||||
"application": {
|
"application": {
|
||||||
|
"app_root": "/app",
|
||||||
"cache_dir": "/cache",
|
"cache_dir": "/cache",
|
||||||
"videos": "/youtube",
|
"videos": "/youtube",
|
||||||
"file_template": "%(id)s_%(title)s.mp4",
|
"file_template": "%(id)s_%(title)s.mp4",
|
||||||
|
@ -88,6 +88,34 @@ class ThumbManager:
|
|||||||
|
|
||||||
return missing_channels
|
return missing_channels
|
||||||
|
|
||||||
|
def get_raw_img(self, img_url, thumb_type):
|
||||||
|
"""get raw image from youtube and handle 404"""
|
||||||
|
app_root = self.CONFIG["application"]["app_root"]
|
||||||
|
default_map = {
|
||||||
|
"video": os.path.join(
|
||||||
|
app_root, "static/img/default-video-thumb.jpg"
|
||||||
|
),
|
||||||
|
"icon": os.path.join(
|
||||||
|
app_root, "static/img/default-channel-icon.jpg"
|
||||||
|
),
|
||||||
|
"banner": os.path.join(
|
||||||
|
app_root, "static/img/default-channel-banner.jpg"
|
||||||
|
),
|
||||||
|
}
|
||||||
|
if img_url:
|
||||||
|
response = requests.get(img_url, stream=True)
|
||||||
|
else:
|
||||||
|
response = False
|
||||||
|
if not response or response.status_code == 404:
|
||||||
|
# use default
|
||||||
|
img_raw = Image.open(default_map[thumb_type])
|
||||||
|
else:
|
||||||
|
# use response
|
||||||
|
img_obj = response.raw
|
||||||
|
img_raw = Image.open(img_obj)
|
||||||
|
|
||||||
|
return img_raw
|
||||||
|
|
||||||
def download_vid(self, missing_thumbs):
|
def download_vid(self, missing_thumbs):
|
||||||
"""download all missing thumbnails from list"""
|
"""download all missing thumbnails from list"""
|
||||||
print(f"downloading {len(missing_thumbs)} thumbnails")
|
print(f"downloading {len(missing_thumbs)} thumbnails")
|
||||||
@ -99,16 +127,15 @@ class ThumbManager:
|
|||||||
thumb_path = os.path.join(self.CACHE_DIR, thumb_path_part)
|
thumb_path = os.path.join(self.CACHE_DIR, thumb_path_part)
|
||||||
|
|
||||||
os.makedirs(folder_path, exist_ok=True)
|
os.makedirs(folder_path, exist_ok=True)
|
||||||
img_raw = requests.get(thumb_url, stream=True).raw
|
img_raw = self.get_raw_img(thumb_url, "video")
|
||||||
img = Image.open(img_raw)
|
|
||||||
|
|
||||||
width, height = img.size
|
width, height = img_raw.size
|
||||||
if not width / height == 16 / 9:
|
if not width / height == 16 / 9:
|
||||||
new_height = width / 16 * 9
|
new_height = width / 16 * 9
|
||||||
offset = (height - new_height) / 2
|
offset = (height - new_height) / 2
|
||||||
img = img.crop((0, offset, width, height - offset))
|
img_raw = img_raw.crop((0, offset, width, height - offset))
|
||||||
|
|
||||||
img.convert("RGB").save(thumb_path)
|
img_raw.convert("RGB").save(thumb_path)
|
||||||
|
|
||||||
mess_dict = {
|
mess_dict = {
|
||||||
"status": "pending",
|
"status": "pending",
|
||||||
@ -122,23 +149,19 @@ class ThumbManager:
|
|||||||
"""download needed artwork for channels"""
|
"""download needed artwork for channels"""
|
||||||
print(f"downloading {len(missing_channels)} channel artwork")
|
print(f"downloading {len(missing_channels)} channel artwork")
|
||||||
for channel in missing_channels:
|
for channel in missing_channels:
|
||||||
print(channel)
|
|
||||||
channel_id, channel_thumb, channel_banner = channel
|
channel_id, channel_thumb, channel_banner = channel
|
||||||
|
|
||||||
thumb_path = os.path.join(
|
thumb_path = os.path.join(
|
||||||
self.CHANNEL_DIR, channel_id + "_thumb.jpg"
|
self.CHANNEL_DIR, channel_id + "_thumb.jpg"
|
||||||
)
|
)
|
||||||
img_raw = requests.get(channel_thumb, stream=True).content
|
img_raw = self.get_raw_img(channel_thumb, "icon")
|
||||||
with open(thumb_path, "wb") as f:
|
img_raw.convert("RGB").save(thumb_path)
|
||||||
f.write(img_raw)
|
|
||||||
|
|
||||||
if channel_banner:
|
|
||||||
banner_path = os.path.join(
|
banner_path = os.path.join(
|
||||||
self.CHANNEL_DIR, channel_id + "_banner.jpg"
|
self.CHANNEL_DIR, channel_id + "_banner.jpg"
|
||||||
)
|
)
|
||||||
img_raw = requests.get(channel_banner, stream=True).content
|
img_raw = self.get_raw_img(channel_banner, "banner")
|
||||||
with open(banner_path, "wb") as f:
|
img_raw.convert("RGB").save(banner_path)
|
||||||
f.write(img_raw)
|
|
||||||
|
|
||||||
mess_dict = {
|
mess_dict = {
|
||||||
"status": "pending",
|
"status": "pending",
|
||||||
|
@ -54,13 +54,11 @@
|
|||||||
{% if channels %}
|
{% if channels %}
|
||||||
{% for channel in channels %}
|
{% for channel in channels %}
|
||||||
<div class="channel-item {{ view_style }}">
|
<div class="channel-item {{ view_style }}">
|
||||||
{% if channel.source.channel_banner_url %}
|
|
||||||
<div class="channel-banner {{ view_style }}">
|
<div class="channel-banner {{ view_style }}">
|
||||||
<a href="{% url 'channel_id' channel.source.channel_id %}">
|
<a href="{% url 'channel_id' channel.source.channel_id %}">
|
||||||
<img src="/cache/channels/{{ channel.source.channel_id }}_banner.jpg" alt="{{ channel.source.channel_id }}-banner">
|
<img src="/cache/channels/{{ channel.source.channel_id }}_banner.jpg" alt="{{ channel.source.channel_id }}-banner">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
|
||||||
<div class="info-box info-box-2 {{ view_style }}">
|
<div class="info-box info-box-2 {{ view_style }}">
|
||||||
<div class="info-box-item">
|
<div class="info-box-item">
|
||||||
<div class="round-img">
|
<div class="round-img">
|
||||||
|
@ -6,9 +6,7 @@
|
|||||||
<h1>Channel: {{ channel_info.channel_name }}</h1>
|
<h1>Channel: {{ channel_info.channel_name }}</h1>
|
||||||
</div>
|
</div>
|
||||||
<div class="channel-banner">
|
<div class="channel-banner">
|
||||||
{% if channel_info.channel_banner_url %}
|
|
||||||
<a href="/channel/{{ channel_info.channel_id }}/"><img src="/cache/channels/{{ channel_info.channel_id }}_banner.jpg" alt="channel_banner"></a>
|
<a href="/channel/{{ channel_info.channel_id }}/"><img src="/cache/channels/{{ channel_info.channel_id }}_banner.jpg" alt="channel_banner"></a>
|
||||||
{% endif %}
|
|
||||||
</div>
|
</div>
|
||||||
<div class="info-box info-box-3">
|
<div class="info-box info-box-3">
|
||||||
<div class="info-box-item">
|
<div class="info-box-item">
|
||||||
|
BIN
tubearchivist/static/img/default-channel-banner.jpg
Normal file
BIN
tubearchivist/static/img/default-channel-banner.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 61 KiB |
BIN
tubearchivist/static/img/default-channel-icon.jpg
Normal file
BIN
tubearchivist/static/img/default-channel-icon.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 84 KiB |
BIN
tubearchivist/static/img/default-video-thumb.jpg
Normal file
BIN
tubearchivist/static/img/default-video-thumb.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 56 KiB |
Loading…
Reference in New Issue
Block a user