2
>>> import gdata.books.service
>>> service = gdata.books.service.BookService()
>>> results = service.search_by_keyword(isbn='0434003484')
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
  results = service.search_by_keyword(isbn='0434003484')
... snip ...
File "C:\Python26\lib\site-packages\atom\__init__.py", line 127, in CreateClassFromXMLString
  tree = ElementTree.fromstring(xml_string)
File "<string>", line 85, in XML
SyntaxError: syntax error: line 1, column 0

这是一个最小的示例——特别是,包中包含的图书服务单元测试也因完全相同的错误而失败。我查看了wiki 并在 Google Code 上打开了问题单,但无济于事(在我看来,这对我来说更容易成为一个愚蠢的错误,而不是图书馆的问题)。我不确定如何解释错误消息。如果重要的话,我使用的是 python 2.6.5 和最新版本的 gdata,即 2.0.10。

4

3 回答 3

3

我发现我需要在 gdata 客户端中禁用 SSL 才能使其工作:

...
gd_client.ProgrammaticLogin()
gd_client.ssl = False
...
于 2010-06-10T11:31:21.720 回答
2

sje397 的答案是正确的;在上面的示例中,如果您这样做:

service.ssl = False

在运行 search_by_keyword 方法之前,会正确返回结果。如果您没有将 SSL 设置为 false,那么由于客户端没有正确验证,请求将被重定向到主 Google 主页(因此 Alex Martelli 看到的错误是您访问http 时获得的 HTML: //www.google.com ... 绝对不是格式良好的 XML)。

于 2010-06-14T21:41:25.957 回答
1

稍微查看一下 xml 字符串,我注意到它的开头有一个小写字母 (应该是大写字母),这当然会导致 XML 解析失败——这绝对是图书服务中的一个错误,需要报告。作为临时解决方法,您可以将第 127 行更改为...:<!doctype html>DOCTYPEatom/__init__.xml

tree = ElementTree.fromstring(xml_string.replace('doctype','DOCTYPE'))

但是,虽然它通过了 XML 中的这个错误,但它在第 496 列显示了另一个错误(我认为这是在一些 javascript 代码的中间)。我想在这一点上一般来说图书服务有一些问题......:-(

于 2010-05-28T02:33:43.460 回答