SyntaxError utilizando gdata-python-client para acceder a la API de datos de la Búsqueda de libros de Google

>>> import gdata.books.service >>> service = gdata.books.service.BookService() >>> results = service.search_by_keyword(isbn='0434003484') Traceback (most recent call last): File "", line 1, in  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 "", line 85, in XML SyntaxError: syntax error: line 1, column 0 

Este es un ejemplo mínimo: en particular, las pruebas de unidad de servicio de libros incluidas en el paquete también fallan con el mismo error exacto. He mirado el wiki y las entradas de tema abierto en Google Code sin éxito (y esto me parece más propenso a ser un error tonto en lugar de un problema con la biblioteca). No estoy seguro de cómo interpretar el mensaje de error. Si importa, estoy usando python 2.6.5 y la última versión de gdata, concretamente 2.0.10.

Descubrí que necesitaba deshabilitar SSL en el cliente gdata para que funcione:

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

La respuesta de sje397 es la correcta; en su ejemplo anterior, si lo hace:

 service.ssl = False 

antes de ejecutar el método search_by_keyword, el resultado se devuelve correctamente. Si no configura SSL para que sea falso, entonces debido a que el cliente no se ha autenticado correctamente, la solicitud se redirige a la página principal de Google (por lo tanto, Alex Martelli detectó errores en el código HTML que obtiene cuando ingresa a http: //www.google.com … definitivamente no está bien formado XML).

Hackeando un poco para ver la cadena xml, me doy cuenta de que tiene un en minúscula al principio (debería ser DOCTYPE mayúscula) que, por supuesto, hace que el análisis XML falle, definitivamente un error en el servicio de libros que necesita ser reportado. Como solución temporal temporal, podría piratear el atom/__init__.xml para cambiar la línea 127 a …

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

pero mientras se supera este error en el XML, se revela otro en la columna 496 (creo que está en medio de algún código javascript). Supongo que hay algo raro en el servicio de libros en general en este punto … 🙁