Skip to content

Instantly share code, notes, and snippets.

@magician11
Last active November 2, 2015 12:13
Show Gist options
  • Save magician11/18a424b5eeee4f150f4c to your computer and use it in GitHub Desktop.
Save magician11/18a424b5eeee4f150f4c to your computer and use it in GitHub Desktop.
Script to process all baptiste data
(function() {
"use strict";
var fs = require('fs');
var firebase = require("firebase");
var ref = new firebase("https://xyz.firebaseio.com/baptiste");
var request = require('request').defaults({ encoding: null });
// Grab all teacher data
var obj = JSON.parse(fs.readFileSync('teachers-part1.json', 'utf8'));
var teachers = obj.articles;
obj = JSON.parse(fs.readFileSync('teachers-part2.json', 'utf8'));
teachers = teachers.concat(obj.articles);
// now add in metafields
obj = JSON.parse(fs.readFileSync('metafieldsTeachersv2.json', 'utf8'));
var metafieldTeacherData = {};
obj.forEach(function(metadata) {
if(!metafieldTeacherData[metadata.resource_id]) { // create the obj if it doesn't exist yet
metafieldTeacherData[metadata.resource_id] = {};
}
if(metadata.key == 'state-prov') {
if(metadata.value) {
metafieldTeacherData[metadata.resource_id].state = metadata.value;
}
} else if(metadata.key == 'studio-link') {
if(metadata.value) {
var studioName = metadata.value.match(/>(.*)</);
if(studioName) { // if there is a URL embedded
metafieldTeacherData[metadata.resource_id].studioName = studioName[1];
metafieldTeacherData[metadata.resource_id].studioURL = metadata.value.match(/href=?\+? ?("|“)(.*)("|“|”)/)[2];
}
else {
metafieldTeacherData[metadata.resource_id].studioName = metadata.value;
}
}
} else if(metadata.key == 'city') {
if(metadata.value) {
metafieldTeacherData[metadata.resource_id].city = metadata.value;
}
} else if(metadata.key == 'country') {
if(metadata.value) {
metafieldTeacherData[metadata.resource_id].country = metadata.value;
}
}
});
function urlToBase64(url) {
return new Promise((resolve, reject) => {
request.get(`http:${url}`, function (error, response, body) {
if (!error && response.statusCode == 200) {
resolve("data:" + response.headers["content-type"] + ";base64," + new Buffer(body).toString('base64'));
}
else {
resolve('todoManually');
}
});
});
}
let promises = teachers.map(teacher => {
return urlToBase64(teacher.summary_html.match(/src="(.*?)"/)[1])
.then(base64Image => {
let names = teacher.title.split(' ');
let firebaseObj = {
firstName: names.splice(0,1).toString(),
lastName: names.splice(-1,1).toString(),
middleNames: names.join(' '),
description: teacher.body_html,
image: base64Image,
city: metafieldTeacherData[teacher.id].city,
country: metafieldTeacherData[teacher.id].country,
state: metafieldTeacherData[teacher.id].state,
studioName: metafieldTeacherData[teacher.id].studioName,
studioURL: metafieldTeacherData[teacher.id].studioURL,
listInDirectory: {
baptiste: true
}
};
let pushRef = ref.push(firebaseObj);
if(base64Image === 'todoManually') {
console.log(`Need to manually add base64 image for ${teacher.title}`);
//console.log(teacher);
console.log(pushRef.key());
}
return firebaseObj;
})
});
Promise.all(promises)
.then(results => {
// console.log(results);
console.log(`Created ${results.length} teacher profiles.`);
})
}());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment