コンテンツにスキップ

利用者:Yuukin0248/wikidata-link.js

お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。

多くの WindowsLinux のブラウザ

  • Ctrl を押しながら F5 を押す。

Mac における Safari

  • Shift を押しながら、更新ボタン をクリックする。

Mac における ChromeFirefox

  • Cmd Shift を押しながら R を押す。

詳細についてはWikipedia:キャッシュを消すをご覧ください。

/**
 * wikidataLink.js
 * #contentSub に閲覧しているページの Wikidata 項目へのリンクを追加
 * リンクの隣に ID と説明を表示
 *
 * [[User:Rxy|rxy]] さんの [[利用者:Rxy/wikidata-description.js]] を改変して作成
 * License: MIT (https://opensource.org/licenses/MIT)
 */

$(function () {
  // Wikidata の ID、ページの名前空間、 アクションを取得
  const config = mw.config.get(['wgWikibaseItemId', 'wgNamespaceNumber', 'wgAction']);

  // 特別ページ以外であり、編集画面以外であり、Wikidata に紐づくID があれば
  if (config.wgNamespaceNumber !== -1 && config.wgAction !== 'edit' && config.wgWikibaseItemId !== null) {
    // Wikidata の API を叩いて説明を表示する関数を呼ぶ
    getWikidataDescription(config.wgWikibaseItemId);
  }
});

/**
 * Wikidata から日本語の説明を取得して、#contentSub に配置
 * @param {string} WikidataQID Wikidata の ID
 */
async function getWikidataDescription(WikidataQID) {
  // 外部 API を使用するためのモジュール
  await mw.loader.using('mediawiki.ForeignApi');

  const span = $(
    `<span class="custom-wikidata-link-and-description"><a href="https://www.wikidata.org/wiki/${WikidataQID}">ウィキデータの項目</a> (${WikidataQID})</span>`
  ).appendTo('#contentSub');

  const data = await new mw.ForeignApi('https://www.wikidata.org/w/api.php').get({
    action: 'wbgetentities',
    ids: WikidataQID,
    props: 'descriptions',
    languages: 'ja',
  });

  const descriptionInJa = data.entities[WikidataQID].descriptions.ja;
  if (typeof descriptionInJa !== 'undefined') {
    span.children('a').html(`ウィキデータの説明: ${descriptionInJa.value}`);
  }
}