Skip to content

Instantly share code, notes, and snippets.

@elct9620
Created December 4, 2019 17:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save elct9620/4905025cae7d9e491b4f72ce633b688e to your computer and use it in GitHub Desktop.
Save elct9620/4905025cae7d9e491b4f72ce633b688e to your computer and use it in GitHub Desktop.
require 'csv'
require 'json'
require 'open-uri'
class Downloader
SCRIPT_URL = 'SCRIPT_URL'
attr_reader :uri
def initialize
@uri = "#{SCRIPT_URL}?token=#{ENV['TOKEN']}"
end
def data
@data ||= open(uri).read
end
alias perform data
end
class Generator
def initialize(json)
@data = JSON.parse(json)
end
def perform
@data['files']&.each do |file|
create(file['name'], file['rows'])
end
end
private
def create(name, rows)
CSV.open(name, 'wb') do |csv|
rows.each { |row| csv << row }
end
end
end
desc 'Update fixtures from Google Spreadsheet'
task :update do
downloader = Downloader.new
generator = Generator.new(downloader.data)
generator.perform
end
var TOKEN = 'API_TOKEN';
var SPREADSHEET = 'SPREADSHEET_ID'
function doGet(e) {
var response = {}
// Block no access users
if (e.parameter.token !== TOKEN) {
response = {
error: {
code: '401',
message: 'Invalid Token: ' + e.parameter.token
}
}
} else {
var SpreadSheet = SpreadsheetApp.openById(SPREADSHEET);
response['name'] = SpreadSheet.getName();
response['files'] = export(SpreadSheet.getSheets());
}
Logger.log(response);
return ContentService.createTextOutput(JSON.stringify(response))
.setMimeType(ContentService.MimeType.JSON);
}
function export(sheets) {
return sheets
.filter(function(sheet) {
return sheet.getName().indexOf('_') !== 0;
})
.map(function(sheet) {
var rows = sheet.getLastRow();
return {
name: sheet.getName() + ".csv",
rows: exportRows(sheet)
};
});
}
function exportRows(sheet) {
var rows = sheet.getLastRow();
var columns = sheet.getLastColumn();
return sheet
.getSheetValues(1, 1, rows, columns);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment