Python:来自opensubtitles api的DownloadSubtitle方法返回空白数据

Posted

技术标签:

【中文标题】Python:来自opensubtitles api的DownloadSubtitle方法返回空白数据【英文标题】:Python: DownloadSubtitle method from opensubtitles api returning blank data 【发布时间】: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。

【问题讨论】:

【参考方案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 仅适用于“类文件”对象,而不适用于字符串。

以上是关于Python:来自opensubtitles api的DownloadSubtitle方法返回空白数据的主要内容,如果未能解决你的问题,请参考以下文章

在代理后面使用 opensubtitles api Node.js/Python 包装器

OpenSubtitles API 401 Unauthorized 如何修复?

来自 SSPI 的 KRB_AP_REQ 票证

如何在没有来自脚本的 Internet 连接的情况下在 Python 中转发地理编码?

scss 来自https://medium.com/@gommaar/responsive-typography-with-sass-maps-3b0838292662

html 来自http://wordpress.org/support/topic/close-modal-when-opening-email-app?replies=4#post-5951647