使用gdata-python-client访问Google图书搜索数据API的SyntaxError

时间:2010-05-28 00:38:19

标签: python gdata elementtree google-books gdata-python-client

>>> 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 and open issue tickets on Google Code无济于事(在我看来,这似乎更容易成为一个愚蠢的错误,而不是库的问题)。我不知道如何解释错误消息。如果重要的话,我使用的是python 2.6.5和最新版本的gdata,即2.0.10。

3 个答案:

答案 0 :(得分:3)

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

...
gd_client.ProgrammaticLogin()
gd_client.ssl = False
...

答案 1 :(得分:2)

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

service.ssl = False

在运行search_by_keyword方法之前,会正确返回结果。如果您没有将SSL设置为false,那么由于客户端未经过正确的身份验证,请求会被重定向到主Google主页(因此,Alex Martelli看到错误的是您在转到{{时获得的HTML> 3}} ...绝对不是格式良好的XML)。

答案 2 :(得分:1)

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

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

但是当它在XML中遇到这个错误时,它会在第496行显示另一个错误(我认为这是在一些javascript代码的中间)。我想在这一点上,书本服务中有一些东西......: - (