Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Download a spreadsheet from Google Docs using Python

Can you produce a Python example of how to download a Google Docs spreadsheet given its key and worksheet ID (gid)? I can't.

I've scoured versions 1, 2 and 3 of the API. I'm having no luck, I can't figure out their compilcated ATOM-like feeds API, the gdata.docs.service.DocsService._DownloadFile private method says that I'm unauthorized, and I don't want to write an entire Google Login authentication system myself. I'm about to stab myself in the face due to frustration.

I have a few spreadsheets and I want to access them like so:

username = '[email protected]' password = getpass.getpass()  def get_spreadsheet(key, gid=0):     ... (help!) ...  for row in get_spreadsheet('5a3c7f7dcee4b4f'):     cell1, cell2, cell3 = row     ... 

Please save my face.


Update 1: I've tried the following, but no combination of Download() or Export() seems to work. (Docs for DocsService here)

import gdata.docs.service import getpass import os import tempfile import csv  def get_csv(file_path):   return csv.reader(file(file_path).readlines())  def get_spreadsheet(key, gid=0):   gd_client = gdata.docs.service.DocsService()   gd_client.email = '[email protected]'   gd_client.password = getpass.getpass()   gd_client.ssl = False   gd_client.source = "My Fancy Spreadsheet Downloader"   gd_client.ProgrammaticLogin()    file_path = tempfile.mktemp(suffix='.csv')   uri = 'http://docs.google.com/feeds/documents/private/full/%s' % key   try:     entry = gd_client.GetDocumentListEntry(uri)      # XXXX - The following dies with RequestError "Unauthorized"     gd_client.Download(entry, file_path)      return get_csv(file_path)   finally:     try:       os.remove(file_path)     except OSError:       pass 
like image 540
a paid nerd Avatar asked Jul 20 '10 06:07

a paid nerd


People also ask

Can Python access Google Sheets?

With the Python to Google Sheets connection, it becomes easier to integrate the data with libraries like NumPy or Pandas. Google also provides an API for executing most of the operations, which acts as a medium to connect Python to Google Sheets.


1 Answers

The https://github.com/burnash/gspread library is a newer, simpler way to interact with Google Spreadsheets, rather than the old answers to this that suggest the gdata library which is not only too low-level, but is also overly-complicated.

You will also need to create and download (in JSON format) a Service Account key: https://console.developers.google.com/apis/credentials/serviceaccountkey

Here's an example of how to use it:

import csv import gspread from oauth2client.service_account import ServiceAccountCredentials  scope = ['https://spreadsheets.google.com/feeds'] credentials = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope)  docid = "0zjVQXjJixf-SdGpLKnJtcmQhNjVUTk1hNTRpc0x5b9c"  client = gspread.authorize(credentials) spreadsheet = client.open_by_key(docid) for i, worksheet in enumerate(spreadsheet.worksheets()):     filename = docid + '-worksheet' + str(i) + '.csv'     with open(filename, 'wb') as f:         writer = csv.writer(f)         writer.writerows(worksheet.get_all_values()) 
like image 152
aculich Avatar answered Nov 02 '22 03:11

aculich