2014-01-10 165 views
3

我正在使用Python中的OpenSubtitle API创建下载电影字幕的软件。Python:如何通过xml-rpc从文件块中获取数据

该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和[数据]是字幕字节在base64和gzip格式。

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

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

我得到这样一个结果:

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

这里,data值应该是base64编码的二进制字幕数据,但如何才能将这么少的数据作为副标题。

我想某种程度上数据必须从服务器下载块,或者我错过了一些东西。

+1

您收到的回应基本上是一个压缩的空文件。我不希望有任何更多的块,从您收到的回复和API文档。 –

回答

3

只是为了扩大@的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

相关问题