· 4 years ago · Sep 29, 2021, 05:50 PM
1const results = {
2 pages: []
3};
4
5const promises = [];
6
7const defaultParams = {
8 action: "query",
9 format: "json",
10};
11
12// Object.keys(mw.config.values.wgFormattedNamespaces).forEach((key) => {
13
14const namespaces = [0,1,2,3,4,5,6,7,8,9];
15
16namespaces.forEach((key) => {
17 const queryParams = {
18 generator: "allpages",
19 gaplimit: 5000,
20 gapfilterredir: "nonredirects",
21 prop: "info|pageprops",
22 gapnamespace: key,
23 ...defaultParams,
24 };
25 promises.push(getInfo('pages', queryParams));
26});
27
28
29Promise.all(promises).then((values) => {
30 console.log("Done, the file will be downloaded");
31
32 download("results.txt", JSON.stringify(results, null, 2));
33});
34
35function getInfo(key, queryParams) {
36 return new Promise((resolve) => {
37 const api = new mw.Api();
38
39 api.post(queryParams).done((data) => {
40 if (data.continue) {
41 const [next] = Object.entries(data.continue);
42 const [continueKey, continueValue] = next;
43 queryParams[continueKey] = continueValue;
44
45 resolve(getInfo(key, queryParams));
46 } else {
47 resolve();
48 }
49 console.log("fetching data ...");
50 results[key].push(data.query);
51 });
52 });
53}
54
55function download(filename, text) {
56 var element = document.createElement("a");
57 element.setAttribute(
58 "href",
59 "data:text/plain;charset=utf-8," + encodeURIComponent(text)
60 );
61 element.setAttribute("download", filename);
62
63 element.style.display = "none";
64 document.body.appendChild(element);
65
66 element.click();
67
68 document.body.removeChild(element);
69}