میڈیاویکی:Gadget-Peshkar-toWikidata.js
یاددہانی: محفوظ کرنے کے بعد تازہ ترین تبدیلیوں کو دیکھنے کے لیے آپ کو اپنے براؤزر کا کیش صاف کرنا ہوگا۔
- فائرفاکس/ سفاری: جب Reload پر کلک کریں تو Shift دبا کر رکھیں، یا Ctrl-F5 یا Ctrl-R دبائیں (Mac پر R- )
- گوگل کروم: Ctrl-Shift-R دبائیں (Mac پر Shift-R-⌘)
- انٹرنیٹ ایکسپلورر: جب Refresh پر کلک کریں تو Ctrl یا Ctrl-F5 دبائیں
- اوپیرا: Tools → Preferences میں جائیں اور کیش صاف کریں
اس اسکرپٹ کی دستاویزی تفصیلات میڈیاویکی:Gadget-Peshkar-toWikidata پر درج کی جا سکتی ہیں۔ |
var peshkarToWikidata = (function() {
// انگریزی کا بین الویکی ربط اخذ کیا جا رہا ہے
async function getEnIWLink(pageContent) {
const regex = /\[\[en:([^\]]+)\]\]/;
const match = pageContent.match(regex);
return match ? match[1] : null;
}
async function getEnArticle(pageContent) {
const englishInterwiki = pageContent ? await getEnIWLink(pageContent) : null;
return englishInterwiki ? englishInterwiki.replace(/ /g, '_') : null;
}
// ویکی ڈیٹا آئٹم کی تخلیق
async function createWikidataItem(urduTitle, englishTitle) {
try {
const api = new mw.ForeignApi(`https://www.wikidata.org/w/api.php`);
const tokenData = await api.get({
action: 'query',
meta: 'tokens'
});
const token = tokenData.query.tokens.csrftoken;
const createData = {
action: 'wbeditentity',
new: 'item',
token: token,
data: JSON.stringify({
labels: {
ur: {
language: 'ur',
value: urduTitle
},
en: {
language: 'en',
value: englishTitle.replace(/_/g, ' ')
}
},
sitelinks: {
urwiki: {
site: 'urwiki',
title: urduTitle
},
enwiki: {
site: 'enwiki',
title: englishTitle
}
}
})
};
const response = await api.post(createData);
console.log('Wikidata item created successfully.');
return response.entity.id;
} catch (error) {
console.error('Error creating Wikidata item:', error);
return null;
}
}
async function getWikidataItem(title) {
const endpoint = 'https://en.wikipedia.org/w/api.php';
const params = new URLSearchParams({
action: 'query',
titles: title,
prop: 'pageprops',
format: 'json',
formatversion: 2
});
try {
const response = await fetch(`${endpoint}?origin=*&${params.toString()}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
});
const data = await response.json();
if (data.query && data.query.pages[0].pageprops.wikibase_item) {
return data.query.pages[0].pageprops.wikibase_item;
}
} catch (error) {
console.error('Error fetching Wikidata item:', error);
return null;
}
}
async function updateWikidataItem(urduTitle, wikidataItem) {
try {
const api = new mw.ForeignApi(`https://www.wikidata.org/w/api.php`);
const tokenData = await api.get({
action: 'query',
meta: 'tokens'
});
const token = tokenData.query.tokens.csrftoken;
// Set sitelink
await api.post({
action: "wbsetsitelink",
id: wikidataItem,
linksite: "urwiki",
token: token,
linktitle: urduTitle
});
// Set label
await api.post({
action: "wbsetlabel",
id: wikidataItem,
language: "ur",
token: token,
value: urduTitle
});
console.log('Wikidata item updated successfully.');
return true;
} catch (error) {
console.error('Error updating Wikidata item:', error);
return false;
}
}
async function processPageContent(pageContent) {
const urduTitle = mw.config.get('wgPageName').replace(/_/g, ' ');
const englishTitle = await getEnArticle(pageContent);
if (englishTitle) {
let wikidataItem = await getWikidataItem(englishTitle);
if (!wikidataItem) {
wikidataItem = await createWikidataItem(urduTitle, englishTitle);
}
if (wikidataItem) {
const updated = await updateWikidataItem(urduTitle, wikidataItem);
if (updated) {
const regex = /\[\[en:([^\]]+)\]\]/;
return pageContent.replace(regex, ''); // حذف بین الویکی ربط
}
} else {
console.log('Failed to create or update Wikidata item.');
}
} else {
console.log('No English interwiki link found.');
}
return pageContent;
}
async function addLabelToWikidata(pageContent) {
try {
const pageTitle = mw.config.get('wgPageName').replace(/_/g, ' ');
const wikidataItem = await getWikidataItemForLabel(pageTitle);
if (wikidataItem) {
const labelAdded = await addUrduLabel(wikidataItem, pageTitle);
if (labelAdded) {
console.log('Urdu label added successfully to the Wikidata item.');
} else {
console.log('Urdu label already exists or no changes were needed.');
}
} else {
console.log('No Wikidata item found for the current article.');
}
return pageContent;
} catch (error) {
console.error('Error in addLabelToWikidata:', error);
return pageContent;
}
}
async function getWikidataItemForLabel(pageTitle) {
const endpoint = 'https://ur.wikipedia.org/w/api.php';
const params = new URLSearchParams({
action: 'query',
titles: pageTitle,
prop: 'pageprops',
format: 'json',
formatversion: 2
});
try {
const response = await fetch(`${endpoint}?origin=*&${params.toString()}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
});
const data = await response.json();
if (data.query && data.query.pages[0].pageprops.wikibase_item) {
return data.query.pages[0].pageprops.wikibase_item;
}
} catch (error) {
console.error('Error fetching Wikidata item:', error);
return null;
}
}
async function addUrduLabel(wikidataItem, urduTitle) {
try {
const endpoint = 'https://www.wikidata.org/w/api.php';
const api = new mw.ForeignApi(endpoint);
const itemData = await api.get({
action: 'wbgetentities',
ids: wikidataItem,
props: 'labels',
languages: 'ur',
format: 'json'
});
if (itemData.entities[wikidataItem].labels.ur) {
return false;
} else {
const tokenData = await api.get({
action: 'query',
meta: 'tokens'
});
const token = tokenData.query.tokens.csrftoken;
await api.postWithEditToken({
action: 'wbsetlabel',
id: wikidataItem,
language: 'ur',
value: urduTitle,
token: token
});
return true;
}
} catch (error) {
console.error('Error checking or adding Urdu label:', error);
return false;
}
}
return {
processPageContent: processPageContent,
addLabelToWikidata: addLabelToWikidata
};
}());
if (typeof window !== "undefined") {
window.peshkarToWikidata = peshkarToWikidata;
}