associated Wikibase API doc: wbsearchentities
const url = wbk.searchEntities({ search: 'Ingmar Bergman' })
this returns a query url that you are then free to request with the tool you like
https://www.wikidata.org/w/api.php?action=wbsearchentities&search=Ingmar%20Bergman&language=en&limit=20&format=json
This search endpoint, wbsearchentities
, is the one used by the search bar and autocomplete fields on Wikibase GUI.
With more parameters:
const url = wbk.searchEntities({
search: 'Ingmar Bergman',
language: 'sv', // Default: en
limit: 30, // Default: 20
continue: 10, // Default: 0
format: 'xml', // Defaut: json
})
By default, the uselang
parameter (the language in which the search results are returned) is set to the same as the language passed, but if for some weird use case you need to set a different language, you can still pass a 2 letters language code:
const url = wbk.searchEntities({
search: 'Ingmar Bergman',
language: 'sv',
uselang: 'eo'
})
If the values aren't available in the desired language, it will fallback to the English value if available.
You can request a specific type of entity by setting the type
parameter to either item
(default), property
, lexeme
, form
, or sense
:
const url = wbk.searchEntities({ search: 'alphabet', type: 'property' })
associated Wikibase API doc: action=query&list=search
This alternative search mode allows to use the WikibaseCirrusSearch
features, such as haswbstatement
.
// Note that the search is case-insensitive
const url = wbk.cirrusSearchPages({ search: 'ingmar bergman' })
Due to the endpoint not returning much data other than the page title, a full example could look something like this:
const url = wbk.cirrusSearchPages({ search: 'Ingmar Bergman' })
const titles = await fetch(url)
.then(res => res.json())
.then(wbk.parse.pagesTitles)
// If you where searching in an entity namespace, which is the default namespace on Wikibase instances,
// those titles are either entities ids (ex: Q1) or prefixed entities ids (ex: Item:Q1)
// In the first case, we can just do
const ids = titles
// In the second case, to get the ids, we need to drop the prefix
const ids = titles.map(title => title.split(':')[1])
// From there, to get the full entities data, you could do
const entitiesUrl = wbk.getEntities({ ids })
// Yeah data!
const entities = await fetch(entitiesUrl).then(res => res.json())
associated Wikibase API doc: haswbstatement
This feature requires that the Wikibase instance you are targetting has the WikibaseCirrusSearch
extension installed: you can check that on /wiki/Special:Version
// Search for instance of (P31) filmographies (Q1371849) matching "Ingmar Bergman"
const url = wbk.cirrusSearchPages({ search: 'Ingmar Bergman', haswbstatement: 'P31=Q1371849' })
// Search for instance of (P31) filmographies (Q1371849)
const url = wbk.cirrusSearchPages({ haswbstatement: 'P31=Q1371849' })
// AND
// Search for instance of (P31) filmographies (Q1371849) AND that have a main subject (P921)
const url = wbk.cirrusSearchPages({ haswbstatement: [ 'P31=Q1371849', 'P921' ] })
// OR
// Search for instance of (P31) filmographies (Q1371849) OR that have a main subject (P921)
const url = wbk.cirrusSearchPages({ haswbstatement: 'P31=Q1371849|P921' })
// NOT
// Search for entities that are not instance of (P31) human (Q5)
const url = wbk.cirrusSearchPages({ haswbstatement: '-P31=Q5' })
// Qualifiers
// Search for entities that depict (P180) a cat (Q146) of color (P462) black (P462)
const url = wbk.cirrusSearchPages({ haswbstatement: 'P180=Q146[P462=Q23445]' })
This can also be used to lookup external ids:
const url = wbk.cirrusSearchPages({ haswbstatement: 'P227=4079154-3' })
but note that if your Wikibase instance offers a SPARQL endpoint, this can also be done with getReverseClaims
const url = wbk.getReverseClaims('P227', '4079154-3')
By default, the search returns is run only on the main namespace (0
), but it is possible to customize that, and use cirrusSearchPages
to search pages from any namespace
const url = wbk.cirrusSearchPages({
search: 'Ingmar Bergman',
// Only one namespace
namespace: 2
// Multiple namespaces
namespace: [ 0, 1, 2, 3 ]
})
Customise the search profile:
const url = wbk.cirrusSearchPages({
search: 'Ingmar Bergman',
profile: 'wikibase_config_entity_weight',
})
See srqiprofile
for possible values
Customise the search sort algorithm:
const url = wbk.cirrusSearchPages({
search: 'Ingmar Bergman',
sort: 'last_edit_asc',
})
See srsort
for possible values
Customise the prop parameter:
const url = wbk.cirrusSearchPages({
search: 'Ingmar Bergman',
prop: [ 'snippet', 'titlesnippet' ],
})
See srprop
for possible values
const url = wbk.cirrusSearchPages({
search: 'Ingmar Bergman', // Becomes 'srsearch' in the url
limit: 100, // Default: 10. Becomes 'srlimit' in the url
offset: 500, // Default: 0. Becomes 'sroffset' in the url
format: 'xml', // Default: json
})