Skip to content

Instantly share code, notes, and snippets.

@lowe0292
Created December 8, 2015 16:10
Show Gist options
  • Save lowe0292/00f72622ccf7adcd2b66 to your computer and use it in GitHub Desktop.
Save lowe0292/00f72622ccf7adcd2b66 to your computer and use it in GitHub Desktop.
Fetch Owner Info From Addresses
// install node dependencies with `npm install chalk firebase json2csv le-storage-service le-storage-provider-firebase` before running
var FIREBASE_URL = 'FIREBASE URL GOES HERE';
var FIREBASE_SECRET = 'FIREBASE SECRET GOES HERE';
var fs = require('fs');
var chalk = require('chalk')
var Firebase = require('firebase');
var json2csv = require('json2csv');
var StorageProvider = require('le-storage-provider-firebase');
var StorageService = require('le-storage-service');
var firebaseRef = new Firebase(FIREBASE_URL);
var targetAddresses = [
'1090 Fort Park Blvd.',
'18531 Edinborough Rd',
'16574 Strathmoor St',
'15666 Eastwood St.',
'638-42 Seward, Unit 638, Upper',
'8610 Heyden St',
'11677 Sussex St.',
'3968 17th St',
'15010 Whitcomb St',
'3752 John Daly St',
'3560 Guilford St',
'15090 Rochelle Ave',
'16873 Ferguson',
'18613 Syracuse',
'2363-5 Commor, Unit 2365',
'8310 Rivard Ave',
'19815-19831 E 14 Mile Rd, Unit 19825',
'7484 Chatham',
'5064 Marseilles',
'67-67.5 East Street, Unit 67',
'4119 Grayton',
'19406 Packard Street',
'16224 Sussex',
'18317 Monica Street',
'8292 Braile',
'19964 Packard',
'5445 Woodward',
'34032 Cambria Court',
'34029 Cambria Court',
'5785 Marseilles St',
'18973 Northlawn',
'19477 Burgess St.',
'23091 Manistee',
'8120 Orchard Ave',
'7224 Westminster Ave, Apartment 1',
'9124 Manor',
'23276 Redman Ct',
'17579 Roselawn, Upper',
'19184 Joann',
];
console.log('Connecting to database...');
firebaseRef.authWithCustomToken(FIREBASE_SECRET, function(err) {
if (err) {
console.log(chalk.red(err));
throw new Error('Firebase auth failed.');
}
console.log('Connected.');
console.log('Fetching data...');
storageService = new StorageService(new StorageProvider(firebaseRef));
return storageService.fetchCollection('Property')
.then(function (collection) {
return collection.join(
[{ type: 'Unit', many: true }, { type: 'Address' }, { type: 'Owner' }],
{ type: 'Ledger', as: 'tenantLedger' },
{ type: 'Ledger Line Item', many: true }
);
})
.then(function (properties) {
console.log('Data fetched.');
var property;
var owner;
var unit;
var tenantLedger;
var address;
var output = [];
console.log('Processing data...');
for (var i = 0; i < properties.length; i += 1) {
property = properties[i];
owner = property.owner;
for (var j = 0; j < property.units.length; j += 1) {
unit = property.units[j];
tenantLedger = unit.tenantLedger;
address = property.address.street;
if (property.type === 'multi-unit') {
address += ', ' + unit.addressLine2;
}
console.log('checking', address);
if (targetAddresses.indexOf(address) !== -1) {
console.log(chalk.magenta('match found:'), address);
output.push({
address: address,
firstName: owner.firstName,
lastName: owner.lastName,
email: owner.email
});
}
}
}
var fields = ['address', 'firstName', 'lastName', 'email'];
json2csv({ data: output, fields: fields }, function(err, csv) {
if (err) console.log(err);
var relativeFilePath = 'output/unit-owner-info.csv'
fs.writeFile(relativeFilePath, csv, function(err) {
if (err) throw err;
console.log(chalk.magenta('Owner info saved in'), chalk.cyan(relativeFilePath));
process.exit();
});
});
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment