Buenas a todos.<div><br></div><div>Gracias a los links que me posteraron como respuesta a mi consulta sobre documentación de pycurl ... he podido hacer lo que quería, conectarme al web-chat ajax del site y poder descargar los mensajes.</div>
<div><br></div><div>Ahora se plantea un problema que me tiene hablando solo toda la tarde y al que no le encuentro solución.</div><div><br></div><div>Cuando hago la llamada a curl para que descarge los mensajes, el site me devuelve un xml con los mensajes he información extra.</div>
<div><br></div><div><div>import os.path</div><div>import time</div><div>import pycurl</div><div>import urllib</div><div>import StringIO</div><div>import codecs</div></div><div><br></div><div>[...]</div><div><div><br></div>
<div>output = StringIO.StringIO()</div><div>header = StringIO.StringIO()</div></div><div><br></div><div>[...]</div><div><div><br></div><div>c.setopt(pycurl.WRITEFUNCTION, output.write)</div><div>c.setopt(pycurl.HEADERFUNCTION, header.write)</div>
</div><div><br></div><div>[...]</div><div><div><br></div><div># llamas a la url</div><div>c.perform()</div></div><div><br></div><div>[...]</div><div><br></div><div>xml = output.getvalue()</div><div><br></div><div>Bien .. a partir de aquí empiezan los problemas ... si intento grabar el contenido a un fichero .xml para luego procesarlo con otra script python, lo hago así:</div>
<div><br></div><div>f = open(&#39;salida.xml&#39;,&#39;wb&#39;)</div><div><div>value = output.getvalue().decode(&#39;utf-8&#39;)</div><div>if value.strip():</div><div>        f.write(value.encode(&#39;utf-8&#39;))</div><div>
f.close()</div></div><div><br></div><div>...</div><div><br></div><div>El problema es que el fichero salida.xml, cuando lo voy a procesar con el otro script python, que usa lxml ... se queja de los caracteres &quot;especiales&quot;, que está codificados en UTF-8 (o deberían) ... no son válidos.</div>
<div><br></div><div>He probado de esta otra manera:</div><div><br></div><div>f = codecs.open(&#39;salida&#39;,&#39;wb&#39;,&#39;utf-8&#39;)</div><div><div>#Y por ultimo la respuesta guardada en la variable output</div><div>
value = output.getvalue()</div><div>if value.strip():</div><div>        f.write(value)</div><div>f.close()</div><div>c.close()</div></div><div><br></div><div>Y no hay forma ... luego al intentar procesarlo con lxml se queja de errores relacionados con la codificación.</div>
<div><br></div><div>La pregunta es como lidiar con esta situación ¿? ... como respuesta a la petición de pycurl, objeto un XML que está codificado en UTF-8 ..., necesito grabarlo correctamente para poder procesarlo luego, ¿que estoy haciendo mal?</div>
<div><br></div><div>Saludos</div>