【问题标题】:Python: How to get data from chunks of file over xml-rpcPython:如何通过 xml-rpc 从文件块中获取数据
【发布时间】:2014-01-28 21:21:00
【问题描述】:

我正在使用 Python 中的 OpenSubtitle API 创建一个用于下载电影字幕的软件。

API 实现 XML-RPC 协议。根据API documentation,从站点数据库下载字幕,使用以下方法:

array DownloadSubtitles( $token, array($IDSubtitleFile, $IDSubtitleFile,...) )

它的输出是:

[data] => Array
    (
        [0] => Array
            (
                [idsubtitlefile] => 10
                [data] => MQ0KMDA6MDA6MzgsMzAwIC0tPiAwMDowMDo0MSwwMDA...
            )
        [1] => Array
            (
                [idsubtitlefile] => 20
                [data] => MQ0KMDA6MDA6MjYsMjgzIC0tPiAwMD...
            )

其中 [idsubtitlefile] 是 subtitle_id,[data] 是 base64 和 gzip 格式的字幕字节。

我面临的问题是,每当我下载字幕时:

idsubtitlefile='513de0ea27d63b9d631d769a492d72dc'
token='a1t49trievitmjda4ija7dif44'
xmlrpclib.DownloadSubtitles(token,[(idsubtitlefile)] )

我得到这样的结果:

[{'data': 'H4sIAAAAAAAAAwMAAAAAAAAAAAA=',\      
   'idsubtitlefile':'513de0ea27d63b9d631d769a492d72dc'}] 

这里data的值应该是base64编码的二进制字幕数据,但是这么少的数据怎么可能是字幕呢。

我认为数据必须以某种方式从服务器分块下载,或者我可能遗漏了一些东西。

【问题讨论】:

  • 您收到的响应本质上是一个压缩的空文件。我不希望有更多的块,无论是您收到的响应还是 API 文档。

标签: python python-3.x xml-rpc xmlrpcclient


【解决方案1】:

只是为了稍微放大@Martijn 的评论 - 响应确实是一个空文件,您可以使用如下代码进行验证:

>>> raw = 'H4sIAAAAAAAAAwMAAAAAAAAAAAA='
>>> import base64
>>> decoded = base64.b64decode(raw)
>>> import zlib
>>> decompressed_data=zlib.decompress(decoded, 16+zlib.MAX_WBITS)
>>> print decompressed_data

>>> len(decompressed_data)
0

根据 API 文档,没有什么可以表明您还需要什么。你能用一个已知有字幕的例子重试吗?你在检查错误吗? http://trac.opensubtitles.org/projects/opensubtitles/wiki/XmlRpcStatusCode

编辑:这里列出了一些开源 Python API 用户,以防万一他们有帮助: http://trac.opensubtitles.org/projects/opensubtitles/wiki/ProgramsUsingAPI

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 2013-11-13
    • 2011-04-13
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 2014-06-22
    相关资源
    最近更新 更多