Wikidata API, как получить некоторые атрибуты на основе идентификатора страницы Википедии - PullRequest
2 голосов
/ 24 января 2020

Итак, у меня есть идентификатор этой страницы 12517871: https://fr.wikipedia.org/wiki?curid=12517871

Я хотел бы получить идентификаторы снизу https://www.wikidata.org/wiki/Q64007200

Использование sparql, но я не знаю, как это сделать.

Я знаю, что должен использовать что-то вроде

    SELECT ?sitelink ?itemLabel ?sitelinkLabel ?article ?cid WHERE {
  ?sitelink schema:isPartOf <https://fr.wikipedia.org/>.
}

, но тогда я не знаю, как искать по странице id и как получить идентификаторы (imdb, allocine ..)

спасибо

edit: я использую этот запрос https://w.wiki/GD5, но он случайно ничего не возвращает. Чтобы проверить эту случайность, измените число на «предел»

SELECT ?propertyclaim ?value ?item WHERE {
  hint:Query hint:optimizer "None" .
  SERVICE wikibase:mwapi {
    bd:serviceParam wikibase:endpoint "fr.wikipedia.org" .
    bd:serviceParam wikibase:api "Generator" .
    bd:serviceParam mwapi:generator "revisions" .
    bd:serviceParam mwapi:pageids "12148688" .
    ?item_ wikibase:apiOutputItem mwapi:item .
    bd:serviceParam wikibase:limit 3
  }
  BIND (COALESCE(?item_, " ") AS ?item) 
  ?item ?propertyclaim ?value .  
  ?property wikibase:directClaim ?propertyclaim . 
  ?property wikibase:propertyType wikibase:ExternalId .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }} 

Ответы [ 2 ]

5 голосов
/ 25 января 2020

Поскольку у вас есть pageid, а не заголовок статьи, это делает запрос немного громоздким.

Вам необходимо использовать MediaWiki API Service , чтобы вызывать Mediawiki API из SPARQL для получение идентификатора элемента Wikidata идентификатора страницы Wikipedia.

Получив идентификатор элемента, вы можете запросить все внешние идентификаторы этого элемента. Вместе запрос выглядит так:

SELECT ?propertyLabel ?value WHERE {
  SERVICE wikibase:mwapi {
    bd:serviceParam wikibase:endpoint "fr.wikipedia.org" .
    bd:serviceParam wikibase:api "Generator" .
    bd:serviceParam mwapi:generator "revisions" .
    bd:serviceParam mwapi:pageids "12517871" .
    ?item wikibase:apiOutputItem mwapi:item .
  }
  ?property wikibase:propertyType wikibase:ExternalId .
  ?property wikibase:directClaim ?propertyclaim .
  ?item ?propertyclaim ?value   
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }        
}
2 голосов
/ 25 января 2020

Если вы не ограничены просто с использованием SPARQL, тогда двухэтапный подход заключается в прямом использовании API для получения идентификатора Wikidata:

https://fr.wikipedia.org/w/api.php?action=query&prop=pageprops&pageids=12517871

 "wikibase_item": "Q64007200"

и затем передайте это непосредственно в SPARQL:

SELECT ?propertyLabel ?value WHERE {
  ?property wikibase:propertyType wikibase:ExternalId .
  ?property wikibase:directClaim ?propertyclaim .    
  wd:Q64007200 ?propertyclaim ?value   
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }        
}

Это гораздо более эффективно и не требует времени, но немного сложнее в коде.

...