SyntaxError 使用 gdata-python-client 访问 Google Book Search Data API

Posted

技术标签:

【中文标题】SyntaxError 使用 gdata-python-client 访问 Google Book Search Data API【英文标题】:SyntaxError using gdata-python-client to access Google Book Search Data API 【发布时间】:2011-02-24 22:35:31 【问题描述】:
>>> 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。

【问题讨论】:

您使用的是哪个版本的 gdata 库? 我们知道数据的实际样子吗? 从源码看,我很确定this是在幕后执行的GET请求。 【参考方案1】:

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

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

【讨论】:

我在尝试访问 picassa 数据时遇到了这个问题。我认为有许多 gdata 库尚未更新,以反映 Google 决定尽可能默认启用 ssl。【参考方案2】:

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

service.ssl = False

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

以上是关于SyntaxError 使用 gdata-python-client 访问 Google Book Search Data API的主要内容,如果未能解决你的问题,请参考以下文章

使用 ipython2 笔记本获取“SyntaxError:无效语法”

如何使用 Boost 获取 SyntaxError、NameError 等的 Python 错误信息

Typescript 和 Node.js 错误“SyntaxError:无法在模块外使用导入语句”

SyntaxError: missing ) 在参数列表之后,使用异步时

使用 TypeScript 和 nodemon:SyntaxError:无法在模块外使用 import 语句

JavaScript 使用 Jinja 模板中呈现的数据引发 SyntaxError