SyntaxError с использованием gdata-python-client для доступа к API данных Поиска книг Google - PullRequest
2 голосов
/ 28 мая 2010
>>> 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 ]

3 голосов
/ 10 июня 2010

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

...
gd_client.ProgrammaticLogin()
gd_client.ssl = False
...
2 голосов
/ 15 июня 2010

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

service.ssl = False

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

1 голос
/ 28 мая 2010

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

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

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

...