【问题标题】:Python: DownloadSubtitle method from opensubtitles api returning blank dataPython:来自opensubtitles api的DownloadSubtitle方法返回空白数据
【发布时间】:2015-07-27 01:12:35
【问题描述】:

这是我在 Python 中的第一个项目之一,我遇到了这个问题。代码:

def get_sub(path):
        server = xmlrpclib.Server(url)
        token = server.LogIn('', '', 'en', 'OSTestUserAgent')['token']
        print server.LogIn('', '', 'en', 'OSTestUserAgent')
        sub_id = get_hash(path)
        print sub_id
        resp = server.DownloadSubtitles(token, [sub_id])
        print resp
        data = resp['data'][0]['data']
        print data

变量 'data' 应该是 base64 编码和 gzip 压缩的数据,但它输出的是 'H4sIAAAAAAAAAAwMAAAAAAAAAAAA='(200 OK 状态代码),它基本上是一个空白数据。尝试使用 API 中的示例检查哈希函数,它没有问题。我无法理解这一点,任何帮助将不胜感激。可以查看APIhere

【问题讨论】:

    标签: python api subtitle xmlrpclib


    【解决方案1】:

    您将sub_id 设置为什么?它看起来像是一个散列,然而,它应该是一个表示字幕文件 ID 的整数(参见documentation)。

    示例字幕文件 ID 为 1951894257。

    import xmlrpclib, io, gzip
    
    url = 'https://api.opensubtitles.org/xml-rpc'
    server = xmlrpclib.Server(url)
    token = server.LogIn('', '', 'en', 'OSTestUserAgent')['token']
    sub_id = 1951894257
    resp = server.DownloadSubtitles(token, [1951894257])
    if resp['status'] == '200 OK':
        compressed_data = resp['data'][0]['data'].decode('base64')
        sub_text = gzip.GzipFile(fileobj=io.BytesIO(compressed_data)).read()
        print sub_text
    

    【讨论】:

    • 那么字幕文件ID不是hash吗?我从哪里获得字幕文件 ID?
    • 不,是OSDb使用的ID。您可以使用 SearchSubtitles 与视频文件的哈希或 IMDB ID 进行搜索。如果 OSDb 知道,那应该会给你一个字幕 ID。
    • 没关系,我明白了! IDSubtitleFile是通过SearchSubtitle函数获取的,非常感谢。无论如何,你能解释一下 sub_text 变量吗,我还在学习如何 gzip 和 ungzip 文件。
    • 如您所知,API 返回一个 base64 编码的 gzip 压缩字幕字符串。需要 base64 解码的解码,然后通过 gzip 解压缩运行。 gzip.GzipFile 对象被实例化并从中读取解压缩的数据。需要将压缩字符串包装在 BytesIO 中,因为 GzipFile 仅适用于“类文件”对象,而不适用于字符串。
    猜你喜欢
    • 2014-12-13
    • 2022-10-01
    • 1970-01-01
    • 2019-05-06
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    相关资源
    最近更新 更多