ph-municipalities
ph-municipalities have npm scripts that allow interactive querying of Philippines municipalities included in one or more provinces or from a whole region, with an option of writing them to JSON files from the command line.
It uses /data/day1.xlsx
(downloaded and stored as of this 20220808) from PAGASA's 10-day weather forecast excel files as the default data source.
It also asks users to key in the download URL of a remote excel file should they want to use another excel file for a new and updated data source.
Extracted municipalities are written in JSON files following the format:
{
"metadata": {
"source": "https://pubfiles.pagasa.dost.gov.ph/pagasaweb/files/climate/tendayweatheroutlook/day1.xlsx",
"title": "List of PH Municipalities By Province and Region",
"description": "This dataset generated with reference to the excel file contents from the source URL on 20220808.",
"date_created": "Mon Aug 08 2022"
},
"data": {
"Albay": ["Bacacay", "Camalig", ... ],
"Camarines Norte": ["Basud", "Capalonga", ... ],
"Camarines Sur": ["Baao", "Balatan", ... ],
...
}
}
Requirements
The following dependencies are used for this project. Feel free to use other dependency versions as needed.
- Windows 10 OS
- nvm for Windows v1.1.9
- NodeJS, installed using nvm
- Excel file
- ph-municipalities uses Excel files in the
/data
directory as data source. - At minimum, the excel file should have a column that contains municipality and province names following the pattern
"municipalityName (provinceName)"
- Checkout the excel file format on the
/data/day1.xlsx
sample file for more information
- (Optional) Download URL for a remote excel file.
- See the
EXCEL_FILE_URL
variable on the Installation section.
Contents
Installation
-
Clone this repository.
git clone https://github.com/ciatph/municipalities-by-province.git
-
Install dependencies.
npm install
-
Create a .env
file from the .env.example
file. Use the default values for the following environment variables.
Variable Name | Description |
---|
EXCEL_FILE_URL | (Optional) Remote excel file's download URL. If provided, the excel file will be downloaded and saved on the specified pathToFile local filesystem location during the ExcelFile class initialization. Read on Usage for more information. |
SHEETJS_COLUMN | Column name read by sheetjs in an excel file. This column contains the municipality and province names following the string pattern
"municipalityName (provinceName)" Default value is __EMPTY |
SORT_ALPHABETICAL | Arranges the municipality names in alphabetical order. Default value is 1 . Set to 0 to use the ordering as read from the Excel file. |
Available Scripts
npm start
/ npm run list:region
- Asks users to enter the download URL of a remote excel file or use the default local excel file
- Loads and parses the local excel file in
/data/day1.xlsx
by default. - Loads and parses the downloaded excel file in
/data/datasource.xlsx
if download URL input is provided.
- Displays a list of available PH region names.
- Lists all provinces and municipalities of a specified region via commandline input.
- Asks for an option to write results to a JSON file.
npm run list:province
- Asks users to enter the download URL of a remote excel file or use the default local excel file
- Loads and parses the local excel file in
/data/day1.xlsx
by default. - Loads and parses the downloaded excel file in
/data/datasource.xlsx
if download URL input is provided.
- Lists all municipalities under specified province(s) via commandline input.
- Asks for an option to write results to a JSON file.
npm run example
- Downloads and parses a remote excel file.
- Demonstrates sample usage with
await
build:win:region
- Package the Node.js project's
npm start
script into a stand-alone windows node16-win-x64
executable. - The windows executable file will be stored in
/build/ph-regions-win.exe
. Click the executable file to run.
build:win:province
- Package the Node.js project's
npm list:province
script into a stand-alone windows node16-win-x64
executable. - The windows executable file will be stored in
/build/ph-provinces-win.exe
. Click the executable file to run.
build:win:all
- Package the Node.js project's
npm start
and npm list:province
script into a stand-alone windows node16-win-x64
executables in one go. - Each window executable file will be stored in the
/build
directory.
npm run minify:region
- Compiles the Node.js project's
npm list:region
script and dependencies into a single script using ncc. - The compiled/minified file will be stored in
/build/region
. Run the command to use the compiled script:
node build/region
npm run minify:province
- Compiles the Node.js project's
npm list:province
script and dependencies into a single script using ncc. - The compiled/minified file will be stored in
/build/province
. Run the command to use the compiled script:
node build/province
npm run minify:all
- Run the
npm list:region
and npm list:province
scripts in one go. - Each compiled/minified files will be stored in the
/build
directory.
npm run lint
Lint JavaScript source codes.
npm run lint:fix
Fix JavaScript lint errors.
Class Usage
Load and Parse a Local Excel File
const path = require('path')
const { ExcelFile } = require('./classes/excel')
file = new ExcelFile({
pathToFile: path.join(__dirname, '..', 'data', 'day1.xlsx')
})
try {
file.init()
} catch (err) {
console.log(`[ERROR]: ${err.message}`)
}
Download and Parse a Remote Excel File
require('dotenv').config()
const path = require('path')
const { ExcelFile } = require('./classes/excel')
const main = async () => {
file = new ExcelFile({
pathToFile: path.join(__dirname, '..', 'data', 'day1.xlsx'),
url: process.env.EXCEL_FILE_URL
})
try {
await file.init()
} catch (err) {
console.log(err.message)
}
}
main()
Alternate Usage - Events
Initialize an ExcelFile
class instance.
require('dotenv').config()
const path = require('path')
const { ExcelFile } = require('./classes/excel')
const PHExcel = new ExcelFile({
pathToFile: path.join(path.join(__dirname, '..', '..', 'data', 'day1.xlsx')),
url: process.env.EXCEL_FILE_URL
})
PHExcel.init()
module.exports = PHExcel
Listen to the instance's EVENTS.LOADED
event.
PHExcel.events.on(PHExcel.EVENTS.LOADED, async () => {
console.log('Excel data loaded!')
})
Building Standalone Windows Executables
The main npm scripts can be packaged into standalone windows executables.
- Run any of the following scripts to build the programs.
npm run build:win:region
npm run build:win:province
- Click the resulting executable files in the
/build
directory to execute.
Compiling into Single, Minified Files
The main npm scripts can be compiled into standalone JavaScript files together with all its dependencies.
- Run any of the following scripts to compile the source codes.
npm run minify:region
npm run minify:province
- Run the compiled source codes in the
/build
directory to execute.
node build/region
node build/province
@ciatph
20220807