Comparing version 2.9.62 to 2.9.71
259
bin/index.js
#!/usr/bin/env node | ||
// required modules | ||
const fetch = require("node-fetch"); | ||
let cheerio = require('cheerio'); | ||
console.log(` | ||
___________ .__ | ||
\\\__ ___/__________ _____ |__| ____ ______ _ ________ | ||
| |_/ __ \\\_ __ \\\/ \\\| |/ \\\_/ __ \\\ \\\/ \\\/ / ___/ | ||
| |\\\ ___/| | \\\/ Y Y \\\ | | \\\ ___/\\\ /\\\___ \\\\ | ||
|____| \\\___ >__| |__|_| /__|___| /\\\___ >\\\/\\\_//____ >`); | ||
console.log("\n\n TERMINEWS - READ THE HEADLINES IN YOUR TERMINAL "); | ||
console.log("\n\n To open a link in your browser hold command and click the link \n\n\n"); | ||
const getUserAgent = () => { | ||
var userAgents = [ | ||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36", | ||
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36", | ||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36", | ||
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36", | ||
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36", | ||
"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2226.0 Safari/537.36", | ||
"Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36", | ||
"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36", | ||
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36", | ||
"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36", | ||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36", | ||
"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36", | ||
"Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36", | ||
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36", | ||
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36", | ||
"Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36", | ||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1944.0 Safari/537.36", | ||
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36", | ||
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2309.372 Safari/537.36", | ||
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2117.157 Safari/537.36", | ||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36", | ||
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1866.237 Safari/537.36", | ||
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/4E423F", | ||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36", | ||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1", | ||
"Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0", | ||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0", | ||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0", | ||
"Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0", | ||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20120101 Firefox/29.0", | ||
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0", | ||
"Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0", | ||
"Mozilla/5.0 (X11; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0", | ||
"Mozilla/5.0 (Windows NT 6.1; rv:27.3) Gecko/20130101 Firefox/27.3", | ||
"Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:27.0) Gecko/20121011 Firefox/27.0Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0", | ||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko/20100101 Firefox/25.0", | ||
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0", | ||
"Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0", | ||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0", | ||
"Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/23.0", | ||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0", | ||
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0", | ||
"Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/22.0", | ||
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:22.0) Gecko/20130328 Firefox/22.0", | ||
"Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20130405 Firefox/22.0", | ||
"Mozilla/5.0 (Microsoft Windows NT 6.2.9200.0); rv:22.0) Gecko/20130405 Firefox/22.0", | ||
"Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1", | ||
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1", | ||
"Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:21.0.0) Gecko/20121011 Firefox/21.0.0", | ||
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20130331 Firefox/21.0", | ||
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0", | ||
"Mozilla/5.0 (X11; Linux i686; rv:21.0) Gecko/20100101 Firefox/21.0", | ||
"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20130514 Firefox/21.0", | ||
"Mozilla/5.0 (Windows NT 6.2; rv:21.0) Gecko/20130326 Firefox/21.0", | ||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130401 Firefox/21.0", | ||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130331 Firefox/21.0", | ||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130330 Firefox/21.0", | ||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0", | ||
"Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130401 Firefox/21.0", | ||
"Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130328 Firefox/21.0", | ||
"Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0", | ||
"Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130401 Firefox/21.0", | ||
"Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130331 Firefox/21.0", | ||
"Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20100101 Firefox/21.0", | ||
"Mozilla/5.0 (Windows NT 5.0; rv:21.0) Gecko/20100101 Firefox/21.0", | ||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0", | ||
"Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20121202 Firefox/17.0 Iceweasel/17.0.1", | ||
"Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1 Iceweasel/15.0.1", | ||
"Mozilla/5.0 (X11; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1 Iceweasel/15.0.1", | ||
"Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120724 Debian Iceweasel/15.0", | ||
"Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0 Iceweasel/15.0", | ||
"Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20120721 Debian Iceweasel/15.0", | ||
"Mozilla/5.0 (X11; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0 Iceweasel/15.0", | ||
"Mozilla/5.0 (X11; debian; Linux x86_64; rv:15.0) Gecko/20100101 Iceweasel/15.0", | ||
"Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1 Iceweasel/14.0.1", | ||
"Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1 Iceweasel/14.0.1", | ||
"Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0 Iceweasel/14.0", | ||
"Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Debian Iceweasel/14.0", | ||
"Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0 Iceweasel/14.0", | ||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A", | ||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A", | ||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.13+ (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2", | ||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10", | ||
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1", | ||
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; da-dk) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1", | ||
"Mozilla/5.0 (Windows; U; Windows NT 6.1; tr-TR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (Windows; U; Windows NT 6.1; ko-KR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (Windows; U; Windows NT 6.1; fr-FR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (Windows; U; Windows NT 6.1; cs-CZ) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (Windows; U; Windows NT 6.0; ja-JP) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; zh-cn) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; zh-cn) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; sv-se) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; ko-kr) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; it-it) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; fr-fr) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; es-es) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-us) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-gb) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; de-de) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", | ||
"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 7.0; InfoPath.3; .NET CLR 3.1.40767; Trident/6.0; en-IN)", | ||
"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)", | ||
"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)", | ||
"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)", | ||
"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/4.0; InfoPath.2; SV1; .NET CLR 2.0.50727; WOW64)", | ||
"Mozilla/5.0 (compatible; MSIE 10.0; Macintosh; Intel Mac OS X 10_7_3; Trident/6.0)", | ||
"Mozilla/4.0 (Compatible; MSIE 8.0; Windows NT 5.2; Trident/6.0)", | ||
"Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)", | ||
"Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))", | ||
"Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)", | ||
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.1; Trident/5.0)", | ||
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7)", | ||
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7)", | ||
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; InfoPath.3; MS-RTC LM 8; .NET4.0C; .NET4.0E)", | ||
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; chromeframe/12.0.742.112)", | ||
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)", | ||
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)", | ||
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; Tablet PC 2.0; InfoPath.3; .NET4.0C; .NET4.0E)", | ||
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)", | ||
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)", | ||
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; chromeframe/13.0.782.215)", | ||
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; chromeframe/11.0.696.57)", | ||
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) chromeframe/10.0.648.205", | ||
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.1; SV1; .NET CLR 2.8.52393; WOW64; en-US)", | ||
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; chromeframe/11.0.696.57)", | ||
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/4.0; GTB7.4; InfoPath.3; SV1; .NET CLR 3.1.76908; WOW64; en-US)" | ||
]; | ||
return userAgents[Math.floor(Math.random() * Math.floor(userAgents.length)) + 1]; | ||
}; | ||
// terminews can be invoked with a numeric flag (i.e. news -10) | ||
// the flag represents the number of articles to return, maximum is 30 | ||
const findArticleFlag = args => { | ||
let flag; | ||
if (args[1] && args[1].charAt(0) === '-') flag = args[1].slice(1) | ||
else if (args[2] && args[2].charAt(0) === '-') flag = args[2].slice(1) | ||
// make sure arg is a number | ||
let numberOfArticles = new Number(flag); | ||
if (numberOfArticles == 0 || isNaN(numberOfArticles) || numberOfArticles > 10) numberOfArticles = 30 | ||
return numberOfArticles | ||
} | ||
// make an HTTP GET request using node-fetch | ||
const getData = async url => { | ||
try { | ||
const headers = { | ||
'User-Agent': getUserAgent(), | ||
}; | ||
const options = { | ||
headers, | ||
method: 'GET' | ||
}; | ||
const response = await fetch(url, options); | ||
const parsedResponse = await response.text(); | ||
return parsedResponse; | ||
} catch (error) { | ||
throw new Error('Error in getData. Error:', error); | ||
} | ||
}; | ||
// edit and format the http response | ||
const editData = (stories) => new Promise((resolve, reject) => { | ||
let formattedData = []; | ||
let $ = cheerio.load(stories); | ||
try { | ||
$('a').each(function (i, elem) { | ||
const title = $(this).text().replace(/ /g, '').replace(/(\r\n|\n|\r)/gm, ""); | ||
const link = $(this).attr('href'); | ||
if ( | ||
// news article will have the date of publication present in the url | ||
link.indexOf(new Date(Date.now()).getFullYear()) > -1 && | ||
title.search('comments') === -1 && | ||
title.length > 3 | ||
) { | ||
formattedData.push([title, link]); | ||
} | ||
resolve(formattedData); | ||
}) | ||
} catch (e) { | ||
reject(new Error(e)); | ||
} | ||
}); | ||
// display the articles in the terminal | ||
const displayData = (news) => { | ||
let numberOfArticles = findArticleFlag(process.argv); | ||
var tmp, current, top = news.length; | ||
if (top) | ||
while (--top) { | ||
current = Math.floor(Math.random() * (top + 1)); | ||
tmp = news[current]; | ||
news[current] = news[top]; | ||
news[top] = tmp; | ||
} | ||
for (var z = 0; z < numberOfArticles; z++) { | ||
var title = '' | ||
var link = '' | ||
var titleLength = 0 | ||
var linkLength = 0 | ||
var dottedLineA = ' ' //starts with one whitespace | ||
var dottedLineB = ' ' //starts with one whitespace | ||
if (news[z][0][0].indexOf('comments') === -1) { | ||
title = news[z][0] | ||
link = 'https://www.nytimes.com' + news[z][1] | ||
title.length > 100 ? title = title.substring(0, 100) + '...' : null | ||
titleLength = title.length | ||
for (var zz = 0; zz < titleLength + 16; zz++) { //+16 to account to Article, Link, and whitespace | ||
dottedLineA = dottedLineA + '-' | ||
} | ||
linkLength = link.length | ||
for (var zzz = 0; zzz < linkLength + 16; zzz++) { //+16 to account to Article, Link, and whitespace | ||
dottedLineB = dottedLineB + '-' | ||
} | ||
console.log("\n" + dottedLineA) | ||
console.log(" | Article: | " + title.trim() + " | ") | ||
if (dottedLineA.length > dottedLineB.length) { | ||
console.log(dottedLineA) | ||
} else { | ||
console.log(dottedLineB) | ||
} | ||
console.log(" | Link: | " + link + " | ") | ||
console.log(dottedLineB) | ||
} | ||
} | ||
} | ||
getData('https://www.nytimes.com') | ||
.then((result) => { | ||
editData(result) | ||
.then((editedResult) => { | ||
displayData(editedResult); | ||
}) | ||
.catch(err => new Error(err)); | ||
}) | ||
.catch(error => new Error(error)); | ||
const fetch=require("node-fetch");let cheerio=require("cheerio");const{findArticleFlag:findArticleFlag}=require("./utilities");console.log("\n ___________ .__\n \\__ ___/__________ _____ |__| ____ ______ _ ________\n | |_/ __ \\_ __ \\/ \\| |/ \\_/ __ \\ \\/ \\/ / ___/\n | |\\ ___/| | \\/ Y Y \\ | | \\ ___/\\ /\\___ \\\\\n |____| \\___ >__| |__|_| /__|___| /\\___ >\\/\\_//____ >"),console.log("\n\n TERMINEWS - READ THE HEADLINES IN YOUR TERMINAL"),console.log("\n\n To open a link in your browser hold command and click the link \n\n\n");const getUserAgent=()=>{var e=["Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36","Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2226.0 Safari/537.36","Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36","Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36","Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36","Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36","Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36","Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1944.0 Safari/537.36","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2309.372 Safari/537.36","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2117.157 Safari/537.36","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1866.237 Safari/537.36","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/4E423F","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1","Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0","Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20120101 Firefox/29.0","Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0","Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0","Mozilla/5.0 (X11; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0","Mozilla/5.0 (Windows NT 6.1; rv:27.3) Gecko/20130101 Firefox/27.3","Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:27.0) Gecko/20121011 Firefox/27.0Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko/20100101 Firefox/25.0","Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0","Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0","Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/23.0","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0","Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0","Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/22.0","Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:22.0) Gecko/20130328 Firefox/22.0","Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20130405 Firefox/22.0","Mozilla/5.0 (Microsoft Windows NT 6.2.9200.0); rv:22.0) Gecko/20130405 Firefox/22.0","Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1","Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1","Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:21.0.0) Gecko/20121011 Firefox/21.0.0","Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20130331 Firefox/21.0","Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0","Mozilla/5.0 (X11; Linux i686; rv:21.0) Gecko/20100101 Firefox/21.0","Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20130514 Firefox/21.0","Mozilla/5.0 (Windows NT 6.2; rv:21.0) Gecko/20130326 Firefox/21.0","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130401 Firefox/21.0","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130331 Firefox/21.0","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130330 Firefox/21.0","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0","Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130401 Firefox/21.0","Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130328 Firefox/21.0","Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0","Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130401 Firefox/21.0","Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130331 Firefox/21.0","Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20100101 Firefox/21.0","Mozilla/5.0 (Windows NT 5.0; rv:21.0) Gecko/20100101 Firefox/21.0","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0","Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20121202 Firefox/17.0 Iceweasel/17.0.1","Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1 Iceweasel/15.0.1","Mozilla/5.0 (X11; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1 Iceweasel/15.0.1","Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120724 Debian Iceweasel/15.0","Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0 Iceweasel/15.0","Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20120721 Debian Iceweasel/15.0","Mozilla/5.0 (X11; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0 Iceweasel/15.0","Mozilla/5.0 (X11; debian; Linux x86_64; rv:15.0) Gecko/20100101 Iceweasel/15.0","Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1 Iceweasel/14.0.1","Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1 Iceweasel/14.0.1","Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0 Iceweasel/14.0","Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Debian Iceweasel/14.0","Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0 Iceweasel/14.0","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.13+ (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10","Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1","Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; da-dk) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1","Mozilla/5.0 (Windows; U; Windows NT 6.1; tr-TR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (Windows; U; Windows NT 6.1; ko-KR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (Windows; U; Windows NT 6.1; fr-FR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (Windows; U; Windows NT 6.1; cs-CZ) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (Windows; U; Windows NT 6.0; ja-JP) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; zh-cn) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; zh-cn) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; sv-se) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; ko-kr) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; it-it) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; fr-fr) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; es-es) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-us) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-gb) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; de-de) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 7.0; InfoPath.3; .NET CLR 3.1.40767; Trident/6.0; en-IN)","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/4.0; InfoPath.2; SV1; .NET CLR 2.0.50727; WOW64)","Mozilla/5.0 (compatible; MSIE 10.0; Macintosh; Intel Mac OS X 10_7_3; Trident/6.0)","Mozilla/4.0 (Compatible; MSIE 8.0; Windows NT 5.2; Trident/6.0)","Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)","Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))","Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.1; Trident/5.0)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; InfoPath.3; MS-RTC LM 8; .NET4.0C; .NET4.0E)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; chromeframe/12.0.742.112)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; Tablet PC 2.0; InfoPath.3; .NET4.0C; .NET4.0E)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; chromeframe/13.0.782.215)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; chromeframe/11.0.696.57)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) chromeframe/10.0.648.205","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.1; SV1; .NET CLR 2.8.52393; WOW64; en-US)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; chromeframe/11.0.696.57)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/4.0; GTB7.4; InfoPath.3; SV1; .NET CLR 3.1.76908; WOW64; en-US)"];return e[Math.floor(Math.random()*Math.floor(e.length))+1]},getData=async e=>{try{const i={headers:{"User-Agent":getUserAgent()},method:"GET"},o=await fetch(e,i);return 200!==o.status&&console.error("\n\n**Non-200 status code received. Status:",o.statusCode),o.text()}catch(e){console.error(`\n\n**Error in getData. Error: ${e}`)}},editData=e=>new Promise((i,o)=>{let l=[],a=cheerio.load(e);try{a("a").each(function(e,o){const n=a(this).text().replace(/ /g,"").replace(/(\r\n|\n|\r)/gm,""),r=a(this).attr("href");r.indexOf(new Date(Date.now()).getFullYear())>-1&&-1===n.search("comments")&&n.length>3&&l.push([n,r]),i(l)})}catch(e){console.error(`\n\n**Error in editData. Error: ${e}`),o(`\n\n**Error in editData. Error: ${e}`)}}),displayData=e=>{let i,o,l=findArticleFlag(process.argv),a=e.length;if(a)for(;--a;)i=e[o=Math.floor(Math.random()*(a+1))],e[o]=e[a],e[a]=i;for(var n=0;n<l;n++){let i="",o="",l=0,a=0,t=" ",c=" ";if(-1===e[n][0][0].indexOf("comments")){i=e[n][0],o=e[n][1].indexOf("https://www.nytimes.com")>-1?e[n][1]:"https://www.nytimes.com"+e[n][1],i.length>100&&(i=i.substring(0,100)+"..."),l=i.length;for(var r=0;r<l+16;r++)t+="-";a=o.length;for(var M=0;M<a+16;M++)c+="-";console.log("\n"+t),console.log(" | Article: | "+i.trim()+" | "),t.length>c.length?console.log(t):console.log(c),console.log(" | Link: | "+o+" | "),console.log(c)}}};getData("https://www.nytimes.com").then(e=>{editData(e).then(e=>{displayData(e)}).catch(e=>new Error(e))}).catch(e=>new Error(e)); |
86
index.js
// required modules | ||
const fetch = require("node-fetch"); | ||
let cheerio = require('cheerio'); | ||
const { findArticleFlag } = require("./utilities"); | ||
// logo | ||
console.log(` | ||
@@ -12,5 +14,6 @@ ___________ .__ | ||
console.log("\n\n TERMINEWS - READ THE HEADLINES IN YOUR TERMINAL "); | ||
console.log("\n\n TERMINEWS - READ THE HEADLINES IN YOUR TERMINAL"); | ||
console.log("\n\n To open a link in your browser hold command and click the link \n\n\n"); | ||
// user agent provider | ||
const getUserAgent = () => { | ||
@@ -153,20 +156,6 @@ var userAgents = [ | ||
// terminews can be invoked with a numeric flag (i.e. news -10) | ||
// the flag represents the number of articles to return, maximum is 30 | ||
const findArticleFlag = args => { | ||
let flag; | ||
if (args[1] && args[1].charAt(0) === '-') flag = args[1].slice(1) | ||
else if (args[2] && args[2].charAt(0) === '-') flag = args[2].slice(1) | ||
// make sure arg is a number | ||
let numberOfArticles = new Number(flag); | ||
if (numberOfArticles == 0 || isNaN(numberOfArticles) || numberOfArticles > 10) numberOfArticles = 30 | ||
return numberOfArticles | ||
} | ||
// make an HTTP GET request using node-fetch | ||
// get the news | ||
const getData = async url => { | ||
try { | ||
const headers = { | ||
'User-Agent': getUserAgent(), | ||
}; | ||
const headers = { 'User-Agent': getUserAgent() }; | ||
const options = { | ||
@@ -177,10 +166,10 @@ headers, | ||
const response = await fetch(url, options); | ||
const parsedResponse = await response.text(); | ||
return parsedResponse; | ||
if (response.status !== 200) console.error('\n\n**Non-200 status code received. Status:', response.statusCode); | ||
return response.text(); | ||
} catch (error) { | ||
throw new Error('Error in getData. Error:', error); | ||
console.error(`\n\n**Error in getData. Error: ${error}`); | ||
} | ||
}; | ||
// edit and format the http response | ||
// edit and format the news | ||
const editData = (stories) => new Promise((resolve, reject) => { | ||
@@ -190,2 +179,3 @@ let formattedData = []; | ||
try { | ||
// must use 'function' to retain scopped access to this, do not use arrow function | ||
$('a').each(function (i, elem) { | ||
@@ -195,3 +185,3 @@ const title = $(this).text().replace(/ /g, '').replace(/(\r\n|\n|\r)/gm, ""); | ||
if ( | ||
// news article will have the date of publication present in the url | ||
// news articles have the date (code looks for year, YYYY) of publication present in the url | ||
link.indexOf(new Date(Date.now()).getFullYear()) > -1 && | ||
@@ -206,3 +196,4 @@ title.search('comments') === -1 && | ||
} catch (e) { | ||
reject(new Error(e)); | ||
console.error(`\n\n**Error in editData. Error: ${e}`); | ||
reject(`\n\n**Error in editData. Error: ${e}`); | ||
} | ||
@@ -214,3 +205,3 @@ }); | ||
let numberOfArticles = findArticleFlag(process.argv); | ||
var tmp, current, top = news.length; | ||
let tmp, current, top = news.length; | ||
if (top) | ||
@@ -225,30 +216,30 @@ while (--top) { | ||
for (var z = 0; z < numberOfArticles; z++) { | ||
var title = '' | ||
var link = '' | ||
var titleLength = 0 | ||
var linkLength = 0 | ||
var dottedLineA = ' ' //starts with one whitespace | ||
var dottedLineB = ' ' //starts with one whitespace | ||
let title = ''; | ||
let link = ''; | ||
let titleLength = 0; | ||
let linkLength = 0; | ||
let dottedLineA = ' '; //starts with one whitespace | ||
let dottedLineB = ' '; //starts with one whitespace | ||
if (news[z][0][0].indexOf('comments') === -1) { | ||
title = news[z][0] | ||
link = 'https://www.nytimes.com' + news[z][1] | ||
title.length > 100 ? title = title.substring(0, 100) + '...' : null | ||
titleLength = title.length | ||
title = news[z][0]; | ||
link = news[z][1].indexOf('https://www.nytimes.com') > -1 ? news[z][1] : 'https://www.nytimes.com' + news[z][1]; | ||
title.length > 100 ? title = title.substring(0, 100) + '...' : null; | ||
titleLength = title.length; | ||
for (var zz = 0; zz < titleLength + 16; zz++) { //+16 to account to Article, Link, and whitespace | ||
dottedLineA = dottedLineA + '-' | ||
dottedLineA = dottedLineA + '-'; | ||
} | ||
linkLength = link.length | ||
linkLength = link.length; | ||
for (var zzz = 0; zzz < linkLength + 16; zzz++) { //+16 to account to Article, Link, and whitespace | ||
dottedLineB = dottedLineB + '-' | ||
dottedLineB = dottedLineB + '-'; | ||
} | ||
console.log("\n" + dottedLineA) | ||
console.log(" | Article: | " + title.trim() + " | ") | ||
console.log("\n" + dottedLineA); | ||
console.log(" | Article: | " + title.trim() + " | "); | ||
if (dottedLineA.length > dottedLineB.length) { | ||
console.log(dottedLineA) | ||
console.log(dottedLineA); | ||
} else { | ||
console.log(dottedLineB) | ||
console.log(dottedLineB); | ||
} | ||
console.log(" | Link: | " + link + " | ") | ||
console.log(dottedLineB) | ||
console.log(" | Link: | " + link + " | "); | ||
console.log(dottedLineB); | ||
} | ||
@@ -266,2 +257,9 @@ } | ||
}) | ||
.catch(error => new Error(error)); | ||
.catch(error => new Error(error)); | ||
module.exports = { | ||
getUserAgent, | ||
getData, | ||
editData, | ||
displayData, | ||
}; |
{ | ||
"name": "terminews", | ||
"version": "2.9.62", | ||
"version": "2.9.71", | ||
"description": "Read today's headlines in your terminal, paired with links to bring you to each story.", | ||
"main": "index.js", | ||
"scripts": { | ||
"news": "node ./dist/index.js", | ||
"test": "./node_modules/.bin/mocha", | ||
"build:commonjs": "babel index.js --out-dir dist/index.js", | ||
"build:umd": "cross-env FILE_NAME=index webpack", | ||
"build:umd:min": "cross-env NODE_ENV=production npm run build:umd" | ||
"devnews": "node ./index.js", | ||
"test": "./node_modules/.bin/mocha" | ||
}, | ||
@@ -16,3 +13,2 @@ "bin": { | ||
}, | ||
"preferGlobal": "true", | ||
"repository": { | ||
@@ -45,9 +41,5 @@ "type": "git", | ||
"devDependencies": { | ||
"@babel/cli": "^7.8.4", | ||
"@babel/core": "^7.9.0", | ||
"@babel/preset-env": "^7.9.0", | ||
"chai": "^4.1.2", | ||
"cross-env": "^7.0.2", | ||
"mocha": "^5.2.0" | ||
} | ||
} |
@@ -1,18 +0,25 @@ | ||
// var expect = require('chai').expect | ||
// var getnews = require('../reporter') | ||
// var editnews = require('../editor') | ||
const expect = require('chai').expect; | ||
const { getData, editData } = require("../index.js"); | ||
// it('reporters are working - stories are generating', function(done) { | ||
// getnews.reporter().then((result) => { | ||
// expect(result.length > 300000).to.be.true; | ||
// done(); | ||
// }) | ||
// }); | ||
it('ensure html length meets expectations', (done) => { | ||
getData("https://www.nytimes.com").then((result) => { | ||
expect(result.length > 300000).to.be.true; | ||
done(); | ||
}); | ||
}); | ||
// it('the stories appear to be news we can work with', function(done) { | ||
// getnews.reporter().then((result) => { | ||
// expect(result[0]+result[1]+result[2]+result[3]+result[4]+result[5]+result[6]).to.equal('<!DOCTY'); | ||
// done(); | ||
// }) | ||
// }); | ||
it('ensure html structure meets expectations', (done) => { | ||
getData("https://www.nytimes.com").then((result) => { | ||
expect( | ||
result[0] + | ||
result[1] + | ||
result[2] + | ||
result[3] + | ||
result[4] + | ||
result[5] + | ||
result[6] | ||
).to.equal("<!DOCTY"); | ||
done(); | ||
}); | ||
}); |
@@ -1,58 +0,58 @@ | ||
// const { findArticleFlag } = require('../utilities') | ||
// const { assert } = require('chai') | ||
const { findArticleFlag } = require('../utilities') | ||
const { assert } = require('chai') | ||
// describe('findArticleFlag()', () => { | ||
// it('Handles arg[1] as flag', () => { | ||
// let args = ['arg0', '-4'] | ||
// let numberOfArticles = findArticleFlag(args) | ||
// assert.equal(numberOfArticles, 4) | ||
// }) | ||
describe('findArticleFlag()', () => { | ||
it('Handles arg[1] as flag', () => { | ||
let args = ['arg0', '-4'] | ||
let numberOfArticles = findArticleFlag(args) | ||
assert.equal(numberOfArticles, 4) | ||
}) | ||
// it('Handles arg[2] as flag', () => { | ||
// let args = ['arg0', 'arg1', '-9'] | ||
// let numberOfArticles = findArticleFlag(args) | ||
// assert.equal(numberOfArticles, 9) | ||
// }) | ||
it('Handles arg[2] as flag', () => { | ||
let args = ['arg0', 'arg1', '-9'] | ||
let numberOfArticles = findArticleFlag(args) | ||
assert.equal(numberOfArticles, 9) | ||
}) | ||
// it('Handles various values that are not numbers and defaults to 10', () => { | ||
// let args = ['arg0', '-[]'] | ||
// let numberOfArticles = findArticleFlag(args) | ||
// assert.equal(numberOfArticles, 10) | ||
it('Handles various values that are not numbers and defaults to 10', () => { | ||
let args = ['arg0', '-[]'] | ||
let numberOfArticles = findArticleFlag(args) | ||
assert.equal(numberOfArticles, 20) | ||
// args[1] = '-false' | ||
// numberOfArticles = findArticleFlag(args) | ||
// assert.equal(numberOfArticles, 10) | ||
args[1] = '-false' | ||
numberOfArticles = findArticleFlag(args) | ||
assert.equal(numberOfArticles, 20) | ||
// args[1] = '-badValue' | ||
// numberOfArticles = findArticleFlag(args) | ||
// assert.equal(numberOfArticles, 10) | ||
args[1] = '-badValue' | ||
numberOfArticles = findArticleFlag(args) | ||
assert.equal(numberOfArticles, 20) | ||
// args[1] = '-true' | ||
// numberOfArticles = findArticleFlag(args) | ||
// assert.equal(numberOfArticles, 10) | ||
args[1] = '-true' | ||
numberOfArticles = findArticleFlag(args) | ||
assert.equal(numberOfArticles, 20) | ||
// args[1] = '-[]' | ||
// numberOfArticles = findArticleFlag(args) | ||
// assert.equal(numberOfArticles, 10) | ||
args[1] = '-[]' | ||
numberOfArticles = findArticleFlag(args) | ||
assert.equal(numberOfArticles, 20) | ||
// args[1] = '-{}' | ||
// numberOfArticles = findArticleFlag(args) | ||
// assert.equal(numberOfArticles, 10) | ||
args[1] = '-{}' | ||
numberOfArticles = findArticleFlag(args) | ||
assert.equal(numberOfArticles, 20) | ||
// args[1] = '-' | ||
// numberOfArticles = findArticleFlag(args) | ||
// assert.equal(numberOfArticles, 10) | ||
// }) | ||
args[1] = '-' | ||
numberOfArticles = findArticleFlag(args) | ||
assert.equal(numberOfArticles, 20) | ||
}) | ||
// it('Handles no article flag', () => { | ||
// let args = ['arg0'] | ||
// let numberOfArticles = findArticleFlag(args) | ||
// assert.equal(numberOfArticles, 10) | ||
// }) | ||
it('Handles no article flag', () => { | ||
let args = ['arg0'] | ||
let numberOfArticles = findArticleFlag(args) | ||
assert.equal(numberOfArticles, 20) | ||
}) | ||
// it('Handles numbers greater than 10', () => { | ||
// let args = ['arg0', '-100'] | ||
// let numberOfArticles = findArticleFlag(args) | ||
// assert.equal(numberOfArticles, 10) | ||
// }) | ||
// }) | ||
it('Handles numbers greater than 20', () => { | ||
let args = ['arg0', '-100'] | ||
let numberOfArticles = findArticleFlag(args) | ||
assert.equal(numberOfArticles, 20) | ||
}) | ||
}) |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
2
7
39085
326
2
3