2010-05-28 30 views
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 and open issue tickets on Google Code無濟於事(在我看來,這似乎更容易成爲一個愚蠢的錯誤,而不是庫的問題)。我不知道如何解釋錯誤信息。如果它很重要,我使用python 2.6.5和最新版本的gdata,即2.0.10。使用gdata-python-client訪問Google圖書搜索數據API的語法錯誤

+0

您使用哪個版本的gdata庫? – Sijin 2010-05-28 00:48:28

+0

2.0.10(最新)。 – 2010-05-28 00:50:33

+0

我們是否知道數據的實際外觀? – 2010-05-28 00:59:04

回答

3

我發現我需要在客戶端GDATA禁用SSL,它的工作:

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

我有這個問題試圖訪問Picassa數據。我認爲有一些gdata庫尚未更新,以反映谷歌決定在任何可能的情況下默認啓用ssl。 – sje397 2010-06-23 15:58:31

1

張望了一下黑客看到XML字符串,我發現它有一個小寫<!doctype html>在啓動(應該大寫DOCTYPE)這當然是使XML解析失敗 - 在書中服務絕對是個錯誤需要報告。作爲臨時解決辦法,你可以破解atom/__init__.xml到行改變127 ...:

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

,但同時,在XML不會越過這個bug它揭示了另一個在496列(我認爲這是在一些中間JavaScript代碼)。我想有什麼東西在一般bookService的博肯在這一點上... :-(

2

sje397的答案是正確的之一;在你上面的例子,如果你這樣做:

service.ssl = False 

之前運行search_by_keyword方法,正確地返回結果。如果你不設置SSL是假的話,由於客戶端沒有正確驗證,該請求被重定向到主Google主頁(因此Alex Martelli w因爲看到錯誤是因爲您在訪問http://www.google.com時得到的HTML ...絕對不是格式良好的XML)。