96 lines
3.3 KiB
JavaScript
Executable File
96 lines
3.3 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
const { program } = require('commander');
|
|
const request = require("sync-request");
|
|
const cheerio = require('cheerio');
|
|
const cliSelect = require('cli-select');
|
|
const chalk = require('chalk');
|
|
const open = require('open');
|
|
|
|
program
|
|
.name('qrzlookup')
|
|
.description('CLI to lookup someone on QRZ.com (a site for ham radio operators)')
|
|
.version(require("./package.json").version)
|
|
.option('-u, --username <username>', "Your QRZ Username")
|
|
.option('-p, --password <password>', "Your QRZ Password")
|
|
.option('-t, --text', "Disables the action selector (best used in scripts)")
|
|
.parse();
|
|
|
|
const opts = program.opts(process.argv);
|
|
|
|
var use_env = false
|
|
if (process.env.QRZ_USERNAME && process.env.QRZ_PASSWORD) use_env = true
|
|
|
|
if (!opts.username && !use_env) {
|
|
console.error("Please provide a username using the -u flag(or set the QRZ_USERNAME variable.");
|
|
process.exit(-1);
|
|
}
|
|
|
|
if (!opts.password && !use_env) {
|
|
console.error("Please provide a password using the -p flag (or set the QRZ_PASSWORD variable.")
|
|
process.exit(-1)
|
|
}
|
|
|
|
var call = process.argv.find(a=>!a.includes("-")&& !a.includes("/"))
|
|
if (!call) {
|
|
console.error("Please provide a callsign (i.e qrzlookup XX1XXX)")
|
|
process.exit(-1)
|
|
}
|
|
var username = process.env.QRZ_USERNAME || opts.username
|
|
var password = process.env.QRZ_PASSWORD || opts.password
|
|
|
|
var xml = request("GET", `https://xmldata.qrz.com/xml/current/?callsign=${call};username=${username};password=${password}`).getBody("utf8")
|
|
|
|
const $ = cheerio.load(xml)
|
|
if ($("Error").length > 0) {
|
|
console.error($("Error")[0].children[0].data)
|
|
process.exit(-1)
|
|
}
|
|
|
|
var args = []
|
|
call = $("call")[0].children[0].data
|
|
console.log("Callsign: %s", $("call")[0].children[0].data)
|
|
console.log("Name: %s", $("name_fmt")[0].children[0].data)
|
|
if ($("nickname").length > 0)
|
|
console.log("Nickname: %s", $("nickname")[0].children[0].data)
|
|
if ($("email").length > 0){
|
|
console.log("Email: %s", $("email")[0].children[0].data)
|
|
args.push(`Email`)
|
|
}
|
|
if ($("p_call").length > 0) console.log(`Previously: ${$("p_call")[0].children[0].data}`)
|
|
console.log("Address:")
|
|
|
|
console.log($("addr1")[0].children[0].data)
|
|
|
|
|
|
if ($("addr2").length > 0) process.stdout.write($("addr2")[0].children[0].data+" ")
|
|
if ($("state").length > 0) process.stdout.write($("state")[0].children[0].data)
|
|
if ($("zip").length > 0) console.log(" "+$("zip")[0].children[0].data)
|
|
if ($("county").length > 0) console.log(`${$("county")[0].children[0].data} county`)
|
|
console.log($("country")[0].children[0].data)
|
|
|
|
args.push("Look at bio")
|
|
if ($("image").length > 0)
|
|
args.push("View picture")
|
|
args.push("QTH on Google Maps")
|
|
if (!opts.text){
|
|
console.log("\nNow, what would you like to do?")
|
|
|
|
|
|
cliSelect({
|
|
values: args,
|
|
valueRenderer: (value, selected) => {
|
|
if (selected) {
|
|
return chalk.underline(value);
|
|
}
|
|
|
|
return value;
|
|
},
|
|
}).then(async selected=>{
|
|
if (selected.includes("Email")) await open($("email")[0].children[0].data)
|
|
if (selected.includes("picture")) await open($("image")[0].children[0].data)
|
|
if (selected.includes("QTH")) await open(`https://maps.google.com/maps?q=${$("addr1")[0].children[0].data}, ${$("zip")[0].children[0].data}, ${$("country")[0].children[0].data}`)
|
|
if (selected.includes("QTH"))
|
|
await open(`https://qrz.com/db/${call}`)
|
|
}).catch(e=>{})
|
|
} |