Nano Hash - криптовалюты, майнинг, программирование

Как youtube-dl генерирует прямую ссылку?


Мне интересно, как youtube-dl генерирует прямую ссылку на видео. Я знаю, что с помощью youtube-dl --get-url link я могу получить это, но я хочу знать, как проходит этот процесс. (От загрузки html страницы до получения ссылки). Есть ли способ проверить это?
Youtube-dl имеет открытый исходный код, так что я думаю, что это так, но я просто не знаю, где конкретно мне следует искать.
Заранее спасибо


Ответы:


1

youtube-dl использует классы под названием InfoExtractor, чтобы сделать возможной загрузку видео с разных сайтов. Средство извлечения информации для видео YouTube находится в /youtube_dl/extractor/youtube.py. .

Этот класс довольно сложен, так как он имеет дело с входом в систему пользователей и различными видами видео и каналов и т. д. Я думаю, что соответствующая часть:

url = proto + '://www.youtube.com/watch?v=%s&gl=US&hl=en&has_verified=1&bpctr=9999999999' % video_id

Где video_id извлекается большим регулярным выражением :

_VALID_URL = r"""(?x)^
                 (
                     (?:https?://|//)                                    # http(s):// or protocol-independent URL
                     (?:(?:(?:(?:\w+\.)?[yY][oO][uU][tT][uU][bB][eE](?:-nocookie)?\.com/|
                        (?:www\.)?deturl\.com/www\.youtube\.com/|
                        (?:www\.)?pwnyoutube\.com/|
                        (?:www\.)?yourepeat\.com/|
                        tube\.majestyc\.net/|
                        youtube\.googleapis\.com/)                        # the various hostnames, with wildcard subdomains
                     (?:.*?\#/)?                                          # handle anchor (#/) redirect urls
                     (?:                                                  # the various things that can precede the ID:
                         (?:(?:v|embed|e)/(?!videoseries))                # v/ or embed/ or e/
                         |(?:                                             # or the v= param in all its forms
                             (?:(?:watch|movie)(?:_popup)?(?:\.php)?/?)?  # preceding watch(_popup|.php) or nothing (like /?v=xxxx)
                             (?:\?|\#!?)                                  # the params delimiter ? or # or #!
                             (?:.*?&)?                                    # any other preceding param (like /?s=tuff&v=xxxx)
                             v=
                         )
                     ))
                     |youtu\.be/                                          # just youtu.be/xxxx
                     |(?:www\.)?cleanvideosearch\.com/media/action/yt/watch\?videoId=
                     )
                 )?                                                       # all until now is optional -> you can pass the naked ID
                 ([0-9A-Za-z_-]{11})                                      # here is it! the YouTube video ID
                 (?!.*?&list=)                                            # combined list/video URLs are handled by the playlist IE
                 (?(1).+)?                                                # if we found the ID, everything can follow
                 $"""

К счастью, это прокомментировано...

21.07.2015
  • все, что делает это регулярное выражение, — это поиск идентификатора YouTube по URL-адресу, предоставленному пользователем. страница для этого идентификатора должна быть проанализирована, чтобы найти прямой URL-адрес мультимедиа для разных форматов (хранится в переменной javascript) и должна включать подпись, которую необходимо расшифровать. результат youtube-dl -g <youtube url> выглядит как https://r2---sn-nx5e6n76.googlevideo.com/videoplayback?key=yt6&mime=video%2Fmp4&..., он включает такой параметр, как signature=CFC671E06803D382B6F7A403AFE1CB4AFFD3742F.01BF1F977DCF2018BE0318E4A0B6670C750A67D4, который youtube.py должен расшифровать из переменной s javascript. 19.04.2016
  • см. _extract_signature_function в youtube.py 19.04.2016
  • Ответ неверный. @ user1441998, похоже, правильно понял. 01.01.2021
  • @Leo Полностью - комментарий был бы лучше в виде редактирования или отдельного ответа :) Как вы думаете, должен ли я обновить свой собственный ответ комментарием? 01.01.2021
  • @AndréLaszlo - ну, ответ будет о том, как работает расшифровка ... 01.01.2021
  • @ AndréLaszlo Да, пожалуйста, обновите ответ и укажите, что это было недоразумение. (Настоящий ответ — просто прочитать исходный код youtube-dl...) 03.01.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..