从导入的python包中调用函数的正确方法?

时间:2019-06-24 10:10:59

标签: python import youtube-dl

尝试从youtube-dl包中导入Youtube签名解密功能,但无法使用它,如下面的代码所示:

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 :(得分:0)

您所指的是类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()行中传递下载程序对象。