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 如何修复?
如何在没有来自脚本的 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