Improve shorts check (shared connection)

This commit is contained in:
BreadTube 2025-09-30 00:27:11 +09:00 committed by Corentin
commit a9e0fd26d7
2 changed files with 4 additions and 3 deletions

View file

@ -4,6 +4,7 @@ from enum import Enum
import logging import logging
import operator import operator
from pathlib import Path from pathlib import Path
import http.client
import re import re
import time import time
import tomllib import tomllib
@ -315,11 +316,12 @@ class Bot:
max_results=self.SUBS_LIST_SHORTS_RATIO * self.config.youtube_channel_video_count, max_results=self.SUBS_LIST_SHORTS_RATIO * self.config.youtube_channel_video_count,
request_timeout=self.config.request_timeout) request_timeout=self.config.request_timeout)
video_ids = {v.id.videoId for v in subscription.shorts_list + subscription.video_list} video_ids = {v.id.videoId for v in subscription.shorts_list + subscription.video_list}
yt_connection = http.client.HTTPSConnection('www.youtube.com', timeout=self.config.request_timeout)
for yt_info in yt_video_info.items: for yt_info in yt_video_info.items:
if yt_info.id.videoId in video_ids: if yt_info.id.videoId in video_ids:
continue continue
if self.yt_manager.is_shorts(yt_info.id.videoId, request_timeout=self.config.request_timeout): if self.yt_manager.is_shorts(yt_connection, yt_info.id.videoId):
subscription.shorts_list.append(yt_info) subscription.shorts_list.append(yt_info)
else: else:
subscription.video_list.append(yt_info) subscription.video_list.append(yt_info)

View file

@ -58,9 +58,8 @@ class YoutubeManager:
except TimeoutError as error: except TimeoutError as error:
raise RuntimeError(f'Timeout calling YT API ({url}): {error}') from error raise RuntimeError(f'Timeout calling YT API ({url}): {error}') from error
def is_shorts(self, video_id: str, request_timeout: float) -> bool: def is_shorts(self, connection: http.client.HTTPConnection, video_id: str) -> bool:
try: try:
connection = http.client.HTTPSConnection('www.youtube.com', timeout=request_timeout)
connection.request('GET', f'/shorts/{video_id}') connection.request('GET', f'/shorts/{video_id}')
response = connection.getresponse() response = connection.getresponse()
return response.status != self.SHORTS_CHECK_STATUS return response.status != self.SHORTS_CHECK_STATUS