Проблема с получением метаданных с помощью библиотеки yt-dlp с YouTube

Пользователь

от berilloda , в категории: PHP , месяц назад

У меня проблема с использованием библиотеки yt-dlp для загрузки видео с YouTube


При получении названия видео иногда программа выдает неправильное название, которого вообще не существует. Я получаю название видео с помощью `['title']`


Я использую php для запроса


Не могли бы вы подсказать мне, как сделать более стабильные запросы для получения названия видео?


Вот код: 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<?php
      $metadata_command = "$yt_dlp_path --dump-json --verbose \"$user_url\"";
      $metadata_output = [];
      $metadata_return_var = 0;
      exec($metadata_command, $metadata_output, $metadata_return_var);
      if ($metadata_return_var !== 0) {
        echo "Metadata retrieval error: " . implode("\n", $metadata_output);
        throw new Exception('Metadata retrieval error video from YouTube');
      }
      if ($metadata_return_var === 0) {
        $metadata = json_decode(implode("\n", $metadata_output), true);
        if ($metadata === null) {
          throw new Exception('Error decoding JSON metadata.');
        }
        $video_title = $metadata['title'];
      }
Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от Ekaterina_90 , 19 дней назад

@berilloda Возможно несоответствие версий yt-dlp или устаревшая версия или неправильный формат данных и иногда exec может возвращать данные в поврежденном виде, особенно если используется многострочный вывод. Вместо использования exec, рекомендуется использовать другой подход, например через popen или прямую работу с Python-скриптом.


Попробуйте запустить код и посмотрите что выведет?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$yt_dlp_path = "/path/to/yt-dlp";
$user_url = "https://www.youtube.com/watch?v=example"; // Замените на ваш URL

$metadata_command = escapeshellcmd("$yt_dlp_path --dump-json --no-warnings \"$user_url\"");
exec($metadata_command, $metadata_output, $metadata_return_var);

if ($metadata_return_var !== 0) {
    echo "Ошибка получения метаданных: " . implode("\n", $metadata_output);
    throw new Exception('Ошибка загрузки метаданных видео.');
}

$metadata_json = implode("\n", $metadata_output);
$metadata = json_decode($metadata_json, true);

if ($metadata === null) {
    echo "Ошибка декодирования JSON: " . json_last_error_msg();
    throw new Exception('Ошибка декодирования метаданных.');
}

$video_title = $metadata['title'] ?? 'Название не найдено';

echo "Название видео: " . htmlspecialchars($video_title);
?>