UNPKG

apobirthday

Version:

fetch picture taken by NASA on your Birthday

109 lines (93 loc) 2.94 kB
#!/usr/bin/env node const fs = require('fs') const request = require('request'); const fetch = require('node-fetch-commonjs') const c = require('ansi-colors') const dayjs = require('dayjs') const minimist = require('minimist')(process.argv.slice(2)) const {prompt} = require('enquirer') const {Select} = require('enquirer') const {execSync} = require('child_process') const token = process.env.APOD_ACCESS_TOKEN || 'DEMO_KEY' async function run() { welcomeMessage() const answers = await inputBirthday() if (validDate(answers)) { const inputDate = dayjs(answers) const startDate = dayjs('1995-06-16') const url = inputDate < startDate ? await fetchLink() : await fetchLink(specified=`date=${answers}`, ary=false) displayPicture(url) } else { console.log(c.red('\n 👀 Invalid date \n'),c.yellow('Example: 2000-03-18')) } } function welcomeMessage() { console.log(c.yellow("\n Welcome to APOB !! 🎉 \n Let's take a look at the picture taken by NASA on your B-day !! 😆 \n ")) } async function inputBirthday() { const question = [ { type: 'input', name: 'birthday', message: 'When is your birthday ? 🎂', initial: '2000-01-01' } ] const answers = await prompt(question) return answers.birthday } function validDate(response) { const date = dayjs(response).format("YYYY-MM-DD") return date === response } async function fetchLink(specified='count=1', ary=true) { const response = (await fetch(`https://api.nasa.gov/planetary/apod?api_key=${token}&${specified}`)).json() const link = await response return ary ? link[0] : link } function displayPicture(link) { request( {method: 'GET', url: link.url, encoding: null}, function (error, response, body){ if(!error && response.statusCode === 200){ console.log(c.yellow('\n 📚 Title:'), c.green(link.title)) if (!fs.existsSync('./picture_data')) {execSync(`mkdir ./picture_data`)} const title = link.title.replaceAll(' ', '_') fs.writeFileSync(`./picture_data/${title}.png`, body, 'binary') execSync(`open ./picture_data/${title}.png`) } } ) } function deletePicture() { const pictures = fs.readdirSync('./picture_data') if (pictures.length > 0) { execSync('rm ./picture_data/*') console.log(' \n Delete completed 😆') } else { console.log(' \n No files to delete 💦') } } function selectPicture() { const choices = fs.readdirSync('./picture_data') if(choices.length > 0) { const prompt = new Select({ message: 'Pick up picture you want to watch 👀', choices }) prompt.run() .then(answer => { execSync(`open ./picture_data/${answer}`) console.log(c.green('\n Selected:'), answer) }) } else { console.log(' \n No files to show 💦') } } if (minimist.d) { deletePicture() } else if (minimist.l){ selectPicture() } else { run() }