לדלג לתוכן

משתמש:מוטי בוט/עדכון תבניות.js

מתוך המכלול, האנציקלופדיה היהודית

לתשומת ליבך: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
//התשתית לסקריפט נכתבה ע"י גאון הירדן שופץ ע"י מוטי
async function getlist() {
  const linkToList = [
    "https://www.hamichlol.org.il/w/index.php",
    "?title=משתמש:מוטי_בוט/רשימה_לעדכון.json&action=raw",
  ];
  const result = await fetchData(linkToList[0], linkToList[1]);
  getTimestamp(result.titles.join("|"));
}

async function fetchData(api, queryString) {
  const response = await fetch(`${api}${queryString}`);
  return await response.json();
}

async function getTimestamp(list) {
  const queryString = `?action=query&format=json&prop=info&titles=${list}&utf8=1`;
  let localData = await fetchData(
    `https://www.hamichlol.org.il/w/api.php`,
    queryString
  );
  let wikiData = await fetchData(
    `https://import.hamichlol.org.il/api.php`,
    queryString
  );
  localData = Object.values(localData.query.pages);
  wikiData = Object.values(wikiData.query.pages);
  for (let index = 0; index < localData.length; index++) {
    const i = wikiData.findIndex((obj) => obj.title === localData[index].title);
    if (
      compareTimestamps(localData[index].touched, wikiData[i].touched)
    ) {
      await updatePage(localData[index].title);
    }
  }
  setCookie("update", "auto", 8);
}

function compareTimestamps(localtimestamp, wikitimestamp) {
  const localDate = new Date(localtimestamp);
  const wikiDate = new Date(wikitimestamp);
  // Rest of the code
  return localDate < wikiDate;
}

async function updatePage(title) {
  const apiEndpoint =
    "https://import.hamichlol.org.il/?action=parse&page=" +
    encodeURIComponent(title) +
    "&format=json&prop=wikitext|revid&origin=*";
  const response = await fetch(apiEndpoint);
  const result = await response.json();
  const txt = result.parse.wikitext["*"].replace(
    "הנתונים בתבנית מתעדכנים אוטומטית מדי יום על ידי הבוט [[משתמש:sapper-bot]].",
    "הנתונים בתבנית מבוססים על עדכון יומי של בוט [[w:he:משתמש:sapper-bot]]."
  );
  const girsa = result.parse.revid;
  const summary = "עדכון מוויקיפדיה גרסה " + girsa;
  await saveFunction(title, txt, summary);
}

async function saveFunction(title, txt, summary) {
  $.post(
    mw.util.wikiScript("api"),
    {
      action: "edit",
      format: "json",
      bot: 1,
      title: title,
      text: txt,
      token: mw.user.tokens.get("csrfToken"),
      summary: summary,
    },
    (data) => {
      //console.table(data.edit);
      //console.log(data.edit.nochange);
      if (data && data.edit && data.edit.newtimestamp) {
        mw.notify("עודכנה בהצלחה", {title: title, type: 'success'});
      } /*else if (data && data.edit && data.edit.nochange === "") {
        mw.notify("ב" + title + " אין מה לעדכן");
      }*/
      console.log(data);
    }
  );
}

function setCookie(cname, cvalue, exdays) {
  const d = new Date();
  d.setTime(d.getTime() + exdays * 60 * 60 * 1000);
  let expires = "expires=" + d.toUTCString();
  document.cookie = `${cname}=${cvalue};${expires};path=/`;
}

var Cookies = document.cookie;
var Cookie = /update/;
var existCookie = Cookie.test(Cookies);

if (
  mw.config.get("wgUserGroups").indexOf("עורך_אספקלריה") !== -1 &&
  !existCookie
) {
  getlist();
} else {
  console.log("עוד לא עברו 24 שעות מעדכון קודם!");
}