Last active
October 7, 2015 05:18
-
-
Save misja/3112073 to your computer and use it in GitHub Desktop.
Read a Google spreadsheet, with worksheets
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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