It's version 0.5.1 I fix dowmp3
This commit is contained in:
@@ -20,8 +20,6 @@ async def get_video_info(url: str) -> dict:
|
||||
"yt-dlp",
|
||||
"--dump-json",
|
||||
"--no-playlist",
|
||||
"--cookies",
|
||||
"/addons/download_mp3_to_youtube/cookies.txt",
|
||||
url,
|
||||
stdout=asyncio.subprocess.PIPE,
|
||||
stderr=asyncio.subprocess.PIPE,
|
||||
@@ -29,9 +27,14 @@ async def get_video_info(url: str) -> dict:
|
||||
|
||||
stdout, stderr = await process.communicate()
|
||||
if process.returncode == 0:
|
||||
return json.loads(stdout.decode())
|
||||
info = json.loads(stdout.decode())
|
||||
logger.info(f"Информация получена: {info.get('title', 'Unknown')}")
|
||||
return info
|
||||
else:
|
||||
stderr_msg = stderr.decode()
|
||||
logger.error(f"yt-dlp ошибка: {stderr_msg}")
|
||||
except Exception as e:
|
||||
logger.warning(f"Не удалось получить информацию о видео: {e}")
|
||||
logger.error(f"Не удалось получить информацию о видео: {e}", exc_info=True)
|
||||
return None
|
||||
|
||||
|
||||
@@ -57,18 +60,30 @@ async def download_thumbnail(
|
||||
def apply_metadata(mp3_path: str, metadata: dict):
|
||||
"""Прописывает ID3-теги и обложку в MP3"""
|
||||
try:
|
||||
# Сначала удаляем старые теги ID3 если есть
|
||||
try:
|
||||
ID3(mp3_path).delete()
|
||||
except:
|
||||
pass
|
||||
|
||||
# Добавляем текстовые теги
|
||||
try:
|
||||
audio = EasyID3(mp3_path)
|
||||
except error:
|
||||
audio = EasyID3()
|
||||
audio.save(mp3_path)
|
||||
|
||||
audio["title"] = metadata.get("title", "Unknown Title")
|
||||
audio["artist"] = metadata.get("performer", "Unknown Artist")
|
||||
audio.save(mp3_path)
|
||||
audio.save(mp3_path, v2_version=4)
|
||||
logger.info(f"Текстовые теги добавлены: {audio['title']} - {audio['artist']}")
|
||||
|
||||
# Добавляем обложку отдельно
|
||||
if metadata.get("thumbnail_data"):
|
||||
audio = ID3(mp3_path)
|
||||
try:
|
||||
audio = ID3(mp3_path)
|
||||
except error:
|
||||
audio = ID3()
|
||||
|
||||
audio.add(
|
||||
APIC(
|
||||
encoding=3,
|
||||
@@ -78,10 +93,12 @@ def apply_metadata(mp3_path: str, metadata: dict):
|
||||
data=metadata["thumbnail_data"],
|
||||
)
|
||||
)
|
||||
audio.save(mp3_path)
|
||||
logger.info("Обложка добавлена в MP3")
|
||||
audio.save(mp3_path, v2_version=4)
|
||||
logger.info(f"Обложка добавлена в MP3 ({len(metadata['thumbnail_data'])} байт)")
|
||||
else:
|
||||
logger.warning("Данные обложки не найдены в метаданных")
|
||||
except Exception as e:
|
||||
logger.warning(f"Не удалось прописать метаданные: {e}")
|
||||
logger.error(f"Не удалось прописать метаданные: {e}", exc_info=True)
|
||||
|
||||
|
||||
async def download_mp3_isolated(url: str) -> tuple[str, dict]:
|
||||
@@ -108,15 +125,15 @@ async def download_mp3_isolated(url: str) -> tuple[str, dict]:
|
||||
if thumbnails:
|
||||
thumbnail_url = thumbnails[-1].get("url")
|
||||
duration = video_info.get("duration", 0)
|
||||
logger.info(f"Получена информация о видео: {title}")
|
||||
logger.info(f"Получена информация о видео: title={title}, uploader={uploader}, thumbnail={thumbnail_url is not None}")
|
||||
else:
|
||||
logger.warning("video_info = None, используются значения по умолчанию")
|
||||
|
||||
process = await asyncio.create_subprocess_exec(
|
||||
"yt-dlp",
|
||||
"-x",
|
||||
"--audio-format",
|
||||
"mp3",
|
||||
"--cookies",
|
||||
"/addons/download_mp3_to_youtube/cookies.txt",
|
||||
"--audio-quality",
|
||||
"320K",
|
||||
"--no-playlist",
|
||||
@@ -173,4 +190,5 @@ async def download_mp3_isolated(url: str) -> tuple[str, dict]:
|
||||
except asyncio.TimeoutError:
|
||||
raise Exception("Таймаут загрузки (5 минут)")
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка при скачивании: {e}", exc_info=True)
|
||||
raise e
|
||||
|
||||
@@ -49,6 +49,7 @@ def register_handlers(dp: Dispatcher, state: BotState, bot: Bot):
|
||||
}
|
||||
|
||||
# Добавляем обложку если есть
|
||||
thumb_filename = None
|
||||
if metadata["thumbnail_data"]:
|
||||
try:
|
||||
# Создаем временный файл для обложки
|
||||
@@ -60,17 +61,21 @@ def register_handlers(dp: Dispatcher, state: BotState, bot: Bot):
|
||||
|
||||
# Используем FSInputFile для обложки
|
||||
send_params["thumbnail"] = types.FSInputFile(thumb_filename)
|
||||
logger.info("Обложка добавлена к сообщению")
|
||||
logger.info(f"Обложка подготовлена: {thumb_filename} ({len(metadata['thumbnail_data'])} байт)")
|
||||
|
||||
except Exception as e:
|
||||
logger.warning(f"Не удалось добавить обложку: {e}")
|
||||
logger.error(f"Не удалось добавить обложку: {e}", exc_info=True)
|
||||
|
||||
# Отправляем аудио
|
||||
await message.answer_audio(**send_params)
|
||||
|
||||
# Удаляем временный файл обложки если создавали
|
||||
if "thumb_filename" in locals() and path.exists(thumb_filename):
|
||||
unlink(thumb_filename)
|
||||
if thumb_filename and path.exists(thumb_filename):
|
||||
try:
|
||||
unlink(thumb_filename)
|
||||
logger.info("Временный файл обложки удален")
|
||||
except OSError as e:
|
||||
logger.warning(f"Не удалось удалить файл обложки: {e}")
|
||||
|
||||
await status_msg.delete()
|
||||
logger.info(f"Аудио отправлено пользователю {message.from_user.id}")
|
||||
|
||||
+5
-5
@@ -6,11 +6,11 @@ if __name__ == "__main__":
|
||||
|
||||
cursor = db.cursor()
|
||||
|
||||
# cursor.execute("""CREATE TABLE message (
|
||||
# chat_id integer,
|
||||
# message_id integer
|
||||
# )""")
|
||||
# db.commit()
|
||||
cursor.execute("""CREATE TABLE message (
|
||||
chat_id integer,
|
||||
message_id integer
|
||||
)""")
|
||||
db.commit()
|
||||
|
||||
cursor.execute("SELECT * FROM message")
|
||||
print(cursor.fetchone())
|
||||
|
||||
Reference in New Issue
Block a user