Skip to content

Instantly share code, notes, and snippets.

@misja
Last active October 7, 2015 05:18
Show Gist options
  • Save misja/3112073 to your computer and use it in GitHub Desktop.
Save misja/3112073 to your computer and use it in GitHub Desktop.
Read a Google spreadsheet, with worksheets
import gdata.spreadsheet.service
class DocumentIterator(object):
index = 0
entries = []
def next(self):
if self.index >= self.count:
self.index = 0
raise StopIteration
else:
self.index += 1
return self.entries[self.index - 1]
@property
def count(self):
return len(self.entries)
def __getitem__(self, item):
return self.entries[item]
def __iter__(self):
return self
def __len__(self):
return self.count
class GoogleSpreadsheet(DocumentIterator):
class GoogleWorksheet(DocumentIterator):
def __init__(self, spreadsheet, worksheet):
self.spreadsheet = spreadsheet
if not isinstance(worksheet, gdata.spreadsheet.SpreadsheetsWorksheet):
raise Exception('Invalid spreadsheet feed type')
self.id = worksheet.id.text.rsplit('/', 1)[1]
self.title = worksheet.title.text
self.entries = self.formRows(spreadsheet.client.GetListFeed(spreadsheet.key, self.id))
def formRows(self, ListFeed):
rows = []
for entry in ListFeed.entry:
d = {}
for key in entry.custom.keys():
d[key] = entry.custom[key].text
rows.append(d)
return rows
def __init__(self, key, username, password):
self.key = key
self.client = gdata.spreadsheet.service.SpreadsheetsService()
self.client.email = username
self.client.password = password
self.client.ProgrammaticLogin()
for entry in self.client.GetWorksheetsFeed(key).entry:
self.entries.append(self.GoogleWorksheet(self, entry))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment