Created
August 23, 2012 03:04
-
-
Save cramforce/3431703 to your computer and use it in GitHub Desktop.
speaker-apps-script.js
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
var COLS = { | |
name: 0, | |
title: 11, | |
summary: 12, | |
imageSrc: 10 | |
}; | |
var TEMPLATE = '---\n\ | |
layout: main\n\ | |
title: [title]\n\ | |
tag: speaker\n\ | |
---\n\ | |
\n\ | |
# {{ page.title }}\n\ | |
\n\ | |
<img src="images/[image]" class="speaker" alt="[name]">[summary]\n'; | |
function render(template, map) { | |
return template.replace(/\[([a-z-_]+)\]/ig, function(all, key) { | |
return map[key] || 'MISSING: ' + key; | |
}); | |
} | |
function fromSelectedRow() { | |
createPost(SpreadsheetApp.getActiveRange().getValues()[0]); | |
} | |
function createPost(row) { | |
var map = {}; | |
for (var key in COLS) { | |
var i = COLS[key]; | |
map[key] = row[i]; | |
} | |
var dir = DocsList.getFolder('jsconf-speakers'); | |
var filename = '2012-08-22-' + getFilename(map.title) + '.md'; | |
var existing = getFileByPrefix(dir, filename); | |
if (existing) { | |
existing.setTrashed(true); | |
} | |
map.image = fetchImage(DocsList.getFolder('jsconf-images'), map); | |
var content = render(TEMPLATE, map); | |
dir.createFile(filename, content); | |
Logger.log(content); | |
} | |
function fetchImage(dir, map) { | |
var exists = getFileByPrefix(dir, getFilename(map.name)); | |
if (exists) { | |
return exists.getName(); | |
} | |
var url = map.imageSrc; | |
if (url) { | |
var resp = UrlFetchApp.fetch(url); | |
Logger.log(url); | |
Logger.log(resp.getHeaders()) | |
var mimeType = resp.getHeaders()['content-type']; | |
Logger.log(mimeType); | |
// create a blob with a name and content type | |
var name = getFilename(map.name) + '.' + mimeType.split(/\//)[1]; | |
var blb = Utilities.newBlob(resp.getContent(), mimeType, name); | |
var file = dir.createFile(blb); | |
return name; | |
} | |
} | |
function getFileByPrefix(dir, name) { | |
var files = dir.getFiles().filter(function(file) { | |
return file.getName().indexOf(name) == 0; | |
}); | |
return files[files.length - 1]; | |
} | |
function getFilename(str) { | |
return str.toLowerCase().replace(/\W/g, '-').replace(/-+/g, '-') | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment