SyntaxError с использованием gdata-python-client для доступа к API данных Поиска книг Google

>>> 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.


person Ismail Badawi    schedule 28.05.2010    source источник
comment
какую версию библиотеки gdata вы используете?   -  person Sijin    schedule 28.05.2010
comment
Есть ли у нас представление о том, как на самом деле выглядят данные?   -  person Ignacio Vazquez-Abrams    schedule 28.05.2010
comment
Взглянув на источник, я почти уверен, что это запрос GET, который выполняется за кулисами.   -  person Ismail Badawi    schedule 28.05.2010


Ответы (3)


Я обнаружил, что мне нужно отключить SSL в клиенте gdata, чтобы он работал:

...
gd_client.ProgrammaticLogin()
gd_client.ssl = False
...
person sje397    schedule 10.06.2010
comment
У меня возникла проблема при попытке доступа к данным Picassa. Я думаю, что существует ряд библиотек gdata, которые не обновлялись, чтобы отразить решение Google включить ssl по умолчанию везде, где это возможно. - person sje397; 23.06.2010

sje397 ответ правильный; в приведенном выше примере, если вы это сделаете:

service.ssl = False

перед запуском метода search_by_keyword результат возвращается правильно. Если вы не установите SSL как false, то из-за того, что клиент не прошел аутентификацию должным образом, запрос перенаправляется на главную домашнюю страницу Google (следовательно, ошибки, которые Алекс Мартелли видел, было HTML, который вы получаете, когда переходите к http://www.google.com ... определенно не правильно сформированный XML).

person jlmcdonald    schedule 14.06.2010

Немного потрудившись, чтобы увидеть строку xml, я заметил, что она имеет нижний регистр <!doctype html> в начале (должен быть верхний регистр DOCTYPE), что, конечно же, приводит к сбою синтаксического анализа XML - определенно ошибка в книге услуга, о которой нужно сообщить. В качестве временного обходного пути вы можете взломать atom/__init__.xml, чтобы изменить строку 127 на ...:

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

но, хотя эта ошибка в XML устранена, она обнаруживает другую в столбце 496 (я думаю, что это в середине некоторого кода javascript). Я думаю, что в книжном сервисе в целом что-то не так ... :-(

person Alex Martelli    schedule 28.05.2010