Правильный способ вызова функции из импортированного пакета Python? - PullRequest
0 голосов
/ 24 июня 2019

Попытка импортировать функцию дешифрования подписи Youtube из пакета youtube-dl, но не может ее использовать, как показано в приведенном ниже коде:

import youtube_dl.extractor.youtube

video_id = 'HRfNqYoO9EU'
player_url="https://www.youtube.com/yts/jsbin/player_ias-vfl49f_g4/en_US/base.js" 
unsig= 'ALgxI2wwRgIhAN3cG9UXPZSyZcwx2fTOFvbKT_5CAb475HUHuTjSjOw-AiEAjaY1JtcKuHMQkHyCt5cKGBqazj7mpR4EQ1nwGYvhkEc=' 

signature = youtube_dl.extractor.youtube._decrypt_signature(unsig, video_id, player_url)
print signature

Попробовал несколько способов импорта и ссылки на модуль, но ни один из них не сработал:(

Вот соответствующий файл - https://github.com/ytdl-org/youtube-dl/blob/695720ebe81166b3ee249eb3916e3c7819ef57a8/youtube_dl/extractor/youtube.py#L2005-L2006

Вышеуказанные ошибки кода: AttributeError: 'module' object has no attribute '_decrypt_signature'

1 Ответ

0 голосов
/ 24 июня 2019

что вы называете метод класса YoutubeIE

Вам придется импортировать его, создать экземпляр и затем вызвать его, но, как @rdas statet, методы, начинающиеся с _, обычно являются внутренними методами, которые могут измениться в более поздних версиях пакета, а также могут быть небезопасны для вызова. , Но если нет другого пути, вы можете начать с этого кода:

from youtube_dl.extractor.youtube import YoutubeIE

import youtube_dl.extractor.youtube as yt
help(yt)

yt=YoutubeIE()

video_id = 'HRfNqYoO9EU'
player_url="https://www.youtube.com/yts/jsbin/player_ias-vfl49f_g4/en_US/base.js" 
unsig= 'ALgxI2wwRgIhAN3cG9UXPZSyZcwx2fTOFvbKT_5CAb475HUHuTjSjOw-AiEAjaY1JtcKuHMQkHyCt5cKGBqazj7mpR4EQ1nwGYvhkEc=' 

signature = yt._decrypt_signature(unsig, video_id, player_url)
print(signature)

Вы можете вызвать метод таким способом, но код завершится ошибкой, потому что переменная экземпляра "_downloader" установлена ​​неправильно. Как правило, он вызывает метод, но вы должны выяснить, как правильно инициализировать объект. Комментарий метода init () предполагает, что вы можете передать объект загрузчика непосредственно в строке yt = YoutubeIE ().

...