Applied Programming/Internet Data/JavaScript
internet.js
edit/* This program demonstrates webpage, XML, and JSON processing.
Input:
None
Output:
XML and JSON sample data.
References:
https://www.mediawiki.org/wiki/Manual:Parameters_to_Special:Export
https://www.twilio.com/blog/2017/08/http-requests-in-node-js.html
https://nodejs.dev/learn/make-an-http-post-request-using-nodejs
https://www.npmjs.com/package/xml-js
*/
const https = require("https");
const xmljs = require("xml-js");
if (typeof module != "undefined" && !module.parent) {
main();
}
/**
* Runs main program logic.
*/
async function main() {
try {
let url = "https://www.w3schools.com/xml/note.xml";
let text = await getWebpage(url);
displayUrl(url, text);
displayXmltree(text)
url = "https://en.wikiversity.org/wiki/Special:Export";
parameters = {"pages":"Applied Programming", "limit":"1"};
text = await postWebpage(url, parameters);
displayUrl(url, text);
url = "https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/en.wikiversity/all-access/user/" +
"Applied_Programming%2fInternet_Data" +
"/daily/2018030100/2018033100";
text = await getWebpage(url);
displayUrl(url, text);
displayWikistats(text);
} catch (error) {
console.error(error)
}
}
/**
* Gets a webpage.
*
* @param {string} url to retrieve
* @returns {string} webpage text
*/
async function getWebpage(url) {
return new Promise(function(resolve, reject) {
let request = https.get(url, (response) => {
let data = "";
response.on("data", (chunk) => {
data += chunk;
});
response.on("end", () => {
resolve(data);
});
}).on("error", (error) => {
reject(error);
});
request.end();
});
}
/**
* Posts to a webpage.
*
* @param {string} url to retrieve
* @param {object} parameters to post
* @returns {string} webpage response
*/
async function postWebpage(url, parameters) {
return new Promise(function(resolve, reject) {
parameters["method"] = "POST";
let request = https.request(url, parameters, (response) => {
let data = "";
response.on("data", (chunk) => {
data += chunk;
});
response.on("end", () => {
resolve(data);
});
}).on("error", (error) => {
reject(error);
});
request.end();
});
}
/**
* Displays a url and text.
*
* @param {string} url to display
* @param {string} text to display
*/
function displayUrl(url, text) {
console.log(url);
console.log(text);
console.log("");
}
/**
* Displays an XML tree.
*
* @param {string} text to display
*/
function displayXmltree(text) {
text = text.replace(/<\?xml.+?>\s?/, "");
const json = xmljs.xml2json(text, {compact: true, spaces: 4});
console.log(json);
}
/**
* Displays timestamp and page views for Wikimedia REST API statistics in JSON format.
*
* @param {string} text retrieved from /wikimedia.org/api/rest_v1/metrics
*/
function displayWikistats(text) {
let object = JSON.parse(text);
for (item of object.items) {
console.log(`${item["timestamp"]}: ${item["views"]}`);
}
console.log("");
}
Try It
editCopy and paste the code above into one of the following free online development environments or use your own JavaScript compiler / interpreter / IDE.