VOOZH about

URL: https://en.wikiversity.org/wiki/Applied_Programming/Internet_Data/JavaScript

⇱ Applied Programming/Internet Data/JavaScript - Wikiversity


Jump to content
From Wikiversity

internet.js

[edit | edit source]
/* 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

*/

consthttps=require("https");
constxmljs=require("xml-js");

if(typeofmodule!="undefined"&&!module.parent){
main();
}

/**
 * Runs main program logic.
 */
asyncfunctionmain(){
try{
leturl="https://www.w3schools.com/xml/note.xml";
lettext=awaitgetWebpage(url);
displayUrl(url,text);
displayXmltree(text)

url="https://en.wikiversity.org/wiki/Special:Export";
parameters={"pages":"Applied Programming","limit":"1"};
text=awaitpostWebpage(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=awaitgetWebpage(url);
displayUrl(url,text);
displayWikistats(text);
}catch(error){
console.error(error)
}
}

/**
 * Gets a webpage.
 * 
 * @param {string} url to retrieve
 * @returns {string} webpage text
 */
asyncfunctiongetWebpage(url){
returnnewPromise(function(resolve,reject){
letrequest=https.get(url,(response)=>{
letdata="";

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
 */
asyncfunctionpostWebpage(url,parameters){
returnnewPromise(function(resolve,reject){
parameters["method"]="POST";
letrequest=https.request(url,parameters,(response)=>{
letdata="";

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
 */
functiondisplayUrl(url,text){
console.log(url);
console.log(text);
console.log("");
}

/**
 * Displays an XML tree.
 * 
 * @param {string} text to display
 */
functiondisplayXmltree(text){
text=text.replace(/<\?xml.+?>\s?/,"");
constjson=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
 */
functiondisplayWikistats(text){
letobject=JSON.parse(text);
for(itemofobject.items){
console.log(`${item["timestamp"]}: ${item["views"]}`);
}
console.log("");
}

Try It

[edit | edit source]

Copy and paste the code above into one of the following free online development environments or use your own JavaScript compiler / interpreter / IDE.

See Also

[edit | edit source]