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

2 投票
3 回答
2395 浏览
提问于 2025-04-15 23:16
>>> 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

这是一个简单的例子——特别是,包里面的书籍服务单元测试也出现了完全相同的错误。我查看了Google Code上的维基和公开问题,但没有找到解决办法(我觉得这更可能是我这边的一个小错误,而不是库本身的问题)。我不太确定该如何理解这个错误信息。如果有关系的话,我使用的是python 2.6.5和最新版本的gdata,也就是2.0.10。

3 个回答

1

我在尝试查看这个xml字符串时,发现它开头有一个小写<!doctype html>(应该是大写的 DOCTYPE),这当然导致了XML解析失败——这绝对是书籍服务中的一个错误,需要报告一下。作为一个临时解决办法,你可以修改 atom/__init__.xml 文件,把第127行改成...:

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

不过,虽然这样可以解决XML中的这个错误,但在第496列又出现了另一个错误(我想那是在一些javascript代码的中间)。我想书籍服务在这个时候可能整体上都有问题...:-(

2

sje397的回答是正确的;在你上面的例子中,如果你执行:

service.ssl = False

在运行search_by_keyword方法之前,结果是正确返回的。如果你不把SSL设置为false,那么因为客户端没有正确认证,请求就会被重定向到谷歌的主页(所以Alex Martelli看到的错误其实是你访问http://www.google.com时得到的HTML内容……这显然不是格式正确的XML)。

3

我发现为了让gdata客户端正常工作,我需要关闭SSL功能:

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

撰写回答