User:החבלן/common.js/WikiRace.js

/* סקיצה זו נכתבה על ידי אלעד אזהרה: התוצאות אינן מדויקות ממספר סיבות: 1. ההפניות שכאן הן כל ההפניות - הן מגוף הערך והן מתבניות וכדו' 2. נכללים כאן דפי פירושונים. 3. דפי הפניה נספרים כדור בפני עצמו כך שייתכן שיש מסלול קצר יותר דרך דפי הפניה Example=> myNamespace.go('מפתח שבדי,3'); The script might take 20-30 minutes until it log 'finnish'. You can chack the myNamespace.results earlier. If you want arive from 'Big Data' to מפתח שבדי type in console myNamespace.results['Big Data']. This contains the genneration of this article and all the relations between big data and מפתח שבדי. You can filter the hirarchi like this way=> var bigData = myNamespace.results['Big Data']; var minResults = Object.keys(bigData.hirarchi).filter(function(art){return (myNamespace.results[art].seq < bigData.seq)}); var myNamespace = myNamespace || {}; myNamespace.maxSessions = 2000;// מקסימום הבקשות ללא תשובה בו זמנית myNamespace.delay = 200; myNamespace.query ="https://en.wikipedia.org/w/api.php?action=query&list=backlinks&bllimit=500&blnamespace=0&rawcontinue=&format=json&bltitle="; myNamespace.init = function { myNamespace.results = {}; ajaxOrchaster.init; } /* article - המאמר שאליו רוצים להגיע maxGennneration - עד איזה מרחק מהערך לבדוק. 0-הערכים שמקושרים ישירות. ערך ברירת מחדל -3 myNamespace.go = function(article, maxGennneration) { myNamespace.init; myNamespace.maxGennneration = maxGennneration || 3; myNamespace.results[article] = 1; ajaxOrchaster.reqCount++; //a=0 טריק מלוכלך כדי לדעת באיזה דור אחנו עומדים $.get(myNamespace.query+article+'&a=0',getSubArt); // נחכה טיפונת כדי שיהיה לו על מה לעבוד window.setTimeout(ajaxOrchaster, 100); } function getSubArt(res) { ajaxOrchaster.resCount++; //sequence - genneration var sequence = Number(this.url.substr(this.url.search('a=') + 'a='.length)); //הערך שאליו מקושרות התוצאות var callTitle =this.url.substring(this.url.search('title=') + 'title='.length, this.url.search('&a=')); // האובייקט של הערך הזה var callObj =myNamespace.results[callTitle]; if (res.query) { if (sequence < myNamespace.maxGennneration) {// אנחנו נשלח בקשה עבור כל אחד מהערכים שחזרו res.query.backlinks.forEach(function(val){				if (!myNamespace.results[val.title]) { // אם הערך לא קיים במילון נוסיף אותו					myNamespace.results[val.title] = {hirarchi:{},seq:sequence};					myNamespace.results[val.title].hirarchi[callTitle] =callObj;					ajaxOrchaster.requests.push(myNamespace.query+val.title+'&a='+(sequence+1));				} else if (myNamespace.results[val.title].hirarchi && !myNamespace.results[val.title].hirarchi[callTitle]) { // אם הערך קיים במילון אך עדיין לא מקושר לערך הספציפי					myNamespace.results[val.title].hirarchi[callTitle] =callObj;				}			}); } else { // רק נשמור את הערכים שחזרו res.query.backlinks.forEach(function(val){				if (!myNamespace.results[val.title]) {					myNamespace.results[val.title] = {hirarchi:{},seq:sequence};					myNamespace.results[val.title].hirarchi[callTitle] =callObj;				} else if (myNamespace.results[val.title].hirarchi && !myNamespace.results[val.title].hirarchi[callTitle]) {					myNamespace.results[val.title].hirarchi[callTitle] =callObj;				}			}); }	} } // דואג שלא יהיו יותר מדי בקשות שלא חזרו בו זמנית function ajaxOrchaster{ if (ajaxOrchaster.tryCount < 11) { while (ajaxOrchaster.requests.length && ajaxOrchaster.reqCount < ajaxOrchaster.resCount + myNamespace.maxSessions) { ajaxOrchaster.tryCount =0; ajaxOrchaster.reqCount++; $.get(ajaxOrchaster.requests.shift,getSubArt); }		window.setTimeout(ajaxOrchaster, myNamespace.delay); // אם אין לנו יותר בקשות ננסה 10 פעמים לפני שנחליט שאין יותר בקשות if(!ajaxOrchaster.requests.length) { ajaxOrchaster.tryCount++; }	} else { console.log('finnish!'); alert('המירוץ הסתיים!'); ajaxOrchaster.init; } } ajaxOrchaster.init = function { ajaxOrchaster.tryCount =0; ajaxOrchaster.reqCount =0; ajaxOrchaster.resCount =0; ajaxOrchaster.requests = []; } myNamespace.init; myNamespace.run = function { myNamespace.go(document.getElementById('rc_article_name').value,document.getElementById('rc_genneration').value); } $('#p-navigation').after(' מירוץ ויקיפדיה שם ערך היעד מספר דורות   '); //Function for calculate the short way (Warning: be carful with this) myNamespace.calculateMin = function(source,target){ var minHirarchi=[source]; var currArt = myNamespace.results[source]; var minResults = Object.keys(currArt.hirarchi).filter(function(art){return (myNamespace.results[art].seq < currArt.seq)})[0]; while (minResults) { minHirarchi.push(minResults); currArt = myNamespace.results[minResults]; minResults = Object.keys(currArt.hirarchi).filter(function(art){return (myNamespace.results[art].seq < currArt.seq)})[0]; }	minHirarchi.push(target); console.log(minHirarchi.join('\r\n')); }