משתמש:מוטי בוט/ניסוי5.js
מראה
לתשומת ליבך: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.
- פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
- גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
- אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
let api = new mw.ForeignApi("https://www.wikidata.org/w/api.php", {
anonymous: true,
});
async function fetchEntityData(entityId) {
try {
const response = await api.get({
action: "wbgetentities",
ids: entityId,
format: "json",
});
return response.entities[entityId];
} catch (error) {
console.error("Error fetching entity data:", error);
throw error;
}
}
async function resolveWikidataIds(ids) {
const MAX_IDS_PER_REQUEST = 50;
const chunks = [];
for (let i = 0; i < ids.length; i += MAX_IDS_PER_REQUEST) {
chunks.push(ids.slice(i, i + MAX_IDS_PER_REQUEST));
}
const resolvedEntities = {};
for (const chunk of chunks) {
try {
const response = await api.get({
action: "wbgetentities",
ids: chunk.join("|"),
format: "json",
});
Object.assign(resolvedEntities, response.entities);
} catch (error) {
console.error("Error resolving Wikidata IDs:", error);
throw error;
}
}
return resolvedEntities;
}
function extractClaims(entityData) {
const claims = entityData.claims;
const wikidataIds = new Set();
const parsedClaims = {};
for (const [property, statements] of Object.entries(claims)) {
parsedClaims[property] = statements.map((statement) => {
const mainsnak = statement.mainsnak;
if (mainsnak.datavalue) {
const value = mainsnak.datavalue.value;
switch (mainsnak.datatype) {
case "wikibase-item":
wikidataIds.add(value.id);
return { type: "wikidata-id", value: value.id };
case "commonsMedia":
return { type: "commonsMedia", value: value };
case "url":
return { type: "url", value: value };
default:
return { type: "other", value: value };
}
}
return null;
}).filter(Boolean);
}
return { parsedClaims, wikidataIds: Array.from(wikidataIds) };
}
async function getEntityInfo(entityId) {
const entityData = await fetchEntityData(entityId);
const { parsedClaims, wikidataIds } = extractClaims(entityData);
if (wikidataIds.length > 0) {
const resolvedEntities = await resolveWikidataIds(wikidataIds);
for (const [property, statements] of Object.entries(parsedClaims)) {
statements.forEach((statement) => {
if (statement.type === "wikidata-id") {
const resolvedEntity = resolvedEntities[statement.value];
if (resolvedEntity && resolvedEntity.labels) {
statement.label = resolvedEntity.labels.en.value;
}
}
});
}
}
return {
id: entityData.id,
labels: entityData.labels,
descriptions: entityData.descriptions,
claims: parsedClaims,
};
}
getEntityInfo("Q181").then((data) => console.log(data));