Kaynakça oluşturucunun çalışması için ilk gereksinim, xbrowserSync adlı bir tarayıcı yer imi yöneticisi uygulaması tarafından oluşturulan bir JSON nesnesinden oluşan içerik verilerinin kaynağıdır. Bu uygulama iki bölümden oluşan, tarayıcıdan bağımsız bir yer imi yöneticisidir.
Bir kısmı bir tarayıcı uzantısı, diğeri ise yer imi verilerini MongoDB veri dosyası olarak yöneten bir sunucu API'sidir. Sunucu API'si hakkında bilmemiz gereken tek şey onun URL'sidir. Tarayıcı uzantısı, Chrome tarayıcısı için Google Play gibi çevrimiçi uygulama "mağazalarında" bulunabilir.
Temel fikir, xbrowserSync uygulamasının yer imi verilerinizi API sunucusunda saklanan şifreli bir veritabanında saklamasıdır. Veritabanının kendisi aslında yerel olarak kaydedip kullanabileceğimiz ve uygulama uzantımızın uygun şekilde yüklendiği herhangi bir tarayıcı tarafından kullanılabilen bir JSON nesne dosyasıdır.
Bu bana, örneğin tarayıcının yer işareti verilerimi kaydetmesine gerek kalmadan Chrome, Edge ve Firefox'ta aynı yer işaretlerini sağlıyor. xbrowserSync için APP ve API kaynağının her biri GitHub deposundadır.
Kaynakça oluşturucunun ikinci gereksinimi, Windows 10 makinemdeki Komut Penceresinde node.js altında çalışan program kodudur. Aşağıda handler.js adlı bu basit düğüm programı yer almaktadır.
#!/usr/bin/env node // --------------------------------- // Simple bibliography file handler Node Server API // --------------------------------- const fs = require('fs') const path = require('path') //const dn = require('./dirname'); var filePath = './bibliotest.json'; //the biblio bookmark file var biblio = ''; var str = ''; var searchValue = 'url:'; // -------------- // read and parse biblio JSON file // ---------------- const jsonReader = () => { return new Promise(resolve => { str = fs.readFile(filePath, (err, fd) => { object = JSON.parse(fd); str = object.children; // strip outer layer biblio = str; // count biblio array elements count = biblio.length; resolve (str); //return str; }) }) } // async function performAsyncFunctions(){ // list of promises to execute sequentially const firstRequest = await jsonReader(); //console.log('\nAll tasks complete.'); console.log('==== function complete ====\n') console.log('count = ', count) var html = '<html><lang = en><head></head><body>'; for (let i = 0; i < count; i++) { html = html + '<h3><i>id'+[i]+':</i> <a href='+biblio[i].url+'>'+biblio[i].title+'</a></h3><p>'+biblio[i].description+'</p>\n'; } html = html + '</body></html>'; console.info(html); const content = html try { const data = fs.writeFileSync('./bibliotest.html', content) //file written successfully } catch (err) { console.error(err) }} // --------------- performAsyncFunctions(); // console.log('biblio = ', object) // ------------------
XbrowserSync tarayıcı uzantısı menüsünden, yer imlerimizin verilerinin bir yedeğini kaydetmeyi seçebiliriz. Yedekleme JSON dosyası olarak kaydedilir. Buradaki örneğimiz için, tüm yer imleri “MuskArticle” adlı bir yer imleri klasöründedir.
Yalnızca kaynakçamızda kullanmak istediğimiz yer imleri klasörünü çıkarmak için JSON yer imlerini düzenliyoruz. Bu JSON dosyası aşağıda aşağıda gösterilmektedir.
{ "title": "__MuskArticle", "children": [ { "title": "Musk's X caught throttling outbound links to websites he doesn't like", "url": "https://www.msn.com/en-us/news/technology/musk-sx-caught-throttling-outbound-links-to-websites-he-doesn-t-like/ar-AA1fmbYw?ocid=windirect&cvid=3ff1100b6fba4172b3b0b8b9c6bbc7e0&ei=185", "description": "Elon Musk claims that he bought Twitter, now called X, to preserve free speech. He claimed that everyone's voice should be heard. This is a great thing for free speech and must surely be a coincidence, right? Elon Musk's X was this week caught throttling outbound links to several sites, coincidentally ones that the billionaire has complained about or feuded with in the past.… Links directing users of the website formerly…", "id": 6643 }, { "title": "Mark Cuban takes another jab at Elon Musk's business practices", "url": "https://www.msn.com/en-us/money/companies/mark-cuban-takes-another-jab-at-elon-musk-s-business-practices/ar-AA1fmrNQ?ocid=windirect&cvid=528ef4be846842fa87342b96d92d0dfa&ei=35", "description": "These two billionaires are not best buds.", "id": 6664 }, { "title": "Twitter now makes you PAY to access one of its most popular features", "url": "https://www.msn.com/en-us/money/technology/twitter-now-makes-you-pay-to-access-one-of-its-most-popular-features/ar-AA1flk5Y?ocid=windirect&cvid=ee4ba03e4c414849a910c7f25dbfd759&ei=27", "description": "X (formerly Twitter) has started diverting users to a paid-subscription sign-up page when they try to access TweetDeck.", "id": 6665 }, { "title": "NYU Professor Locked Out of Twitter After Reportedly Declining to Meet With Elon Musk", "url": "https://www.msn.com/en-us/news/technology/nyu-professor-locked-out-of-twitter-after-reportedly-declining-to-meet-with-elon-musk/ar-AA1fmedB?ocid=windirect&cvid=a7973a74a0d24f2287ea421bbd70f5ea&ei=42", "description": "New York University professor and Kara Swisher's podcasting buddy Scott Galloway voiced his outrage at being banned from posting on Twitter in a Threads post on Tuesday. Galloway claims he's been locked out of Twitter (aka X) two days after allegedly declining an invitation to meet with the chief…", "id": 6666 }, { "title": "A federal judge wondered if Elon Musk was trying to 'cozy up' to Trump by trying to inform him about a search warrant into his social media account", "url": "https://www.msn.com/en-us/news/politics/a-federal-judge-wondered-if-elon-musk-was-trying-to-cozy-up-to-trump-by-trying-to-inform-him-about-a-search-warrant-into-his-social-media-account/ar-AA1flSZV?ocid=windirect&cvid=ee4ba03e4c414849a910c7f25dbfd759&ei=51", "description": "In January, federal prosecutors obtained a search warrant to obtain information from Trump's personal Twitter account.", "id": 6667 } ] }
Yukarıdaki JSON dosyasını node.js işleyici programımıza gönderirsek, aşağıdaki HTML formatındaki kaynakça listesini oluşturacaktır.
Böylece, yer imleri verilerimizden bibliyografyalar oluşturmak için xbrowserSync'in yer imleri yöneticisi olarak kullanımından nasıl yararlanabileceğimizi gördük. Okuduğunuz için teşekkür eder, bu bilgilerin sizin için yararlı olacağını umarız. Her zaman olduğu gibi yorum, öneri ve eleştirilere açığız.