Después de de esta larga búsqueda de datos solucionamos esta contratiempo que tienen muchos los usuarios. Te dejamos la solución y nuestro deseo es serte de mucha ayuda.
Solución:
Solo use solicitudes, es mucho mejor que usar urllib:
import requests
response = requests.get('https://docs.google.com/spreadsheet/ccc?key=0ArM5yzzCw9IZdEdLWlpHT1FCcUpYQ2RjWmZYWmNwbXc&output=csv')
assert response.status_code == 200, 'Wrong status code'
print(response.content)
Puedes instalarlo con
pip install requests
No está almacenando cookies.
Primero déjeme decirle que apoyo completamente la recomendación de usar el más excelente requests
Biblioteca.
Sin embargo, si necesita hacer esto en vanilla Python 2, el problema radica en el hecho de que Google lo está rebotando a través de redirecciones HTTP 302, y espera que recuerde las cookies que está configurando con cada respuesta. Cuando detecta que no está almacenando cookies, lo redirige a la página de inicio de sesión.
Por defecto, urllib2.urlopen
(o el abridor regresó de build_opener
) seguirá las redirecciones 302, pero no almacenará cookies HTTP. Tienes que enseñarle a tu abridor cómo hacer eso. Al igual que:
>>> from cookielib import CookieJar
>>> from urllib2 import build_opener, HTTPCookieProcessor
>>> opener = build_opener(HTTPCookieProcessor(CookieJar()))
>>> resp = opener.open('https://docs.google.com/spreadsheet/ccc?key=0ArM5yzzCw9IZdEdLWlpHT1FCcUpYQ2RjWmZYWmNwbXc&output=csv')
>>> data = resp.read()
De nuevo, usa requests
si es posible, pero si no es posible, la biblioteca estándar puede hacer el trabajo.
El requests
La biblioteca es excelente y el estándar de oro para las solicitudes HTTP de Python; sin embargo, este estilo de descarga, aunque aún no está obsoleto, no es probable que dure, refiriéndose específicamente al estilo de enlace de descarga. De hecho, el downloadUrl
El campo de la API de Google Drive v2 ya está obsoleto. La forma actualmente aceptada de exportar Google Sheets como CSV es mediante utilizando la API de Google Drive (actual).
Entonces, ¿por qué la API de Drive? ¿No se supone que esto es algo para la API de Hojas de cálculo? Bueno, la API de Hojas de cálculo es para hoja de cálculo-funcionalidad orientada, es decir, formato de datos, cambio de tamaño de columna, creación de gráficos, validación de celda, etc., mientras que la API de Drive es para Archivo-funcionalidad orientada, es decir, importación / exportación.
A continuación se muestra una solución completa de cmd-line. (Si no usa Python, puede usarlo como pseudocódigo y elegir cualquier lenguaje compatible con las bibliotecas cliente de las API de Google). Para el fragmento de código, asuma la hoja más actual llamada inventory
(los archivos más antiguos con ese nombre se ignoran) y DRIVE
es el punto final del servicio API:
FILENAME = 'inventory'
SRC_MIMETYPE = 'application/vnd.google-apps.spreadsheet'
DST_MIMETYPE = 'text/csv'
# query for latest file named FILENAME
files = DRIVE.files().list(
q='name="%s" and mimeType="%s"' % (FILENAME, SRC_MIMETYPE),
orderBy='modifiedTime desc,name').execute().get('files', [])
# if found, export 1st matching Sheets file as CSV
if files:
fn = '%s.csv' % os.path.splitext(files[0]['name'].replace(' ', '_'))[0]
print('Exporting "%s" as "%s"... ' % (files[0]['name'], fn), end='')
data = DRIVE.files().export(fileId=files[0]['id'], mimeType=DST_MIMETYPE).execute()
# if non-empty file
if data:
with open(fn, 'wb') as f:
f.write(data)
print('DONE')
Si su hoja es grande, es posible que deba exportarla en trozos; consulte esta página para saber cómo hacerlo. ese. Si eres nuevo en las API de Google, tengo un video de introducción (algo anticuado pero) fácil de usar para ti. (Hay 2 videos después de eso que también pueden ser útiles).
Recuerda algo, que puedes optar por la opción de agregar una reseña si diste con el arreglo.