Skip to content

Instantly share code, notes, and snippets.

@VojtechStep
Last active November 27, 2016 11:23
Show Gist options
  • Save VojtechStep/4d0cefea37f642b52e97da7110e7609e to your computer and use it in GitHub Desktop.
Save VojtechStep/4d0cefea37f642b52e97da7110e7609e to your computer and use it in GitHub Desktop.
Generate codenames for your projects with this utility. Just run "node ./getname.js"
var http = require('http')
var https = require('https')
var alphabet = " -b -c -d -e -f -g -h -i -j-k -l -m -n -o -p -q -r -s -t -u-v -w x-y-z".split(" ")
function download(url, callback) {
var prot = url.startsWith('https') ? https : http
prot.get(url, function (res) {
var data = ""
res.on('data', function (chunk) {
data += chunk
})
res.on("end", function () {
callback(data)
})
}).on("error", function () {
callback(null)
})
}
function parseFromSource(patt, loc, resolve, reject) {
try {
download(loc, data => {
try {
var arr = data.match(patt).map(p => patt.exec(p)).filter(p => p != null).map(p => p[1])
resolve(arr[Math.floor(Math.random() * arr.length)])
} catch (e) { reject(e) }
})
} catch (e) { reject(e) }
}
function getNames() {
getRandomName1Promise = new Promise((resolve, reject) => { parseFromSource(/<strong>(.*?):\s*</gi, 'http://www.gardeningchannel.com/list-of-flower-names/', resolve, reject) }),
getRandomName2Promise = new Promise((resolve, reject) => { parseFromSource(/<p id=\"common-flower-name-.*?> (.*?) </gi, 'http://www.list-of-flower-names.com/flower-names/common/list/A-Z', resolve, reject) }),
getRandomName3Promise = new Promise((resolve, reject) => { parseFromSource(/<p>\s*<span.*?><b>(?:<a.*?>)?(.*?)\./gi, `http://www.all-my-favourite-flower-names.com/list-of-flower-names${alphabet[Math.floor(Math.random() * alphabet.length)].toUpperCase()}.html`, resolve, reject) }),
getRandomName4Promise = new Promise((resolve, reject) => { parseFromSource(/<td.*p>\s*<b>(.*?)</gi, 'http://www.namesofflowers.net/names-of-all-flowers.html', resolve, reject) }),
getRandomName5Promise = new Promise((resolve, reject) => { parseFromSource(/<strong>((?:(?!name).)*)<\/strong>/gi, 'http://www.flowers.org.uk/flowers/flower-common-names/list-of-flower-common-names/', resolve, reject) })
getRandomName6Promise = new Promise((resolve, reject) => { parseFromSource(/<td>\s*<i><a .*?>(.*?)</gi, 'https://en.wikipedia.org/wiki/The_world%27s_100_most_threatened_species', resolve, reject)})
Promise.all(
[
getRandomName1Promise,
getRandomName2Promise,
getRandomName3Promise,
getRandomName4Promise,
getRandomName5Promise,
getRandomName6Promise
]
).then(resp => {console.log("Project", resp[Math.floor(Math.random() * resp.length)])})
.catch(reason => {console.log(reason);setTimeout(getNames, 0)})
}
getNames()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment