-
Notifications
You must be signed in to change notification settings - Fork 5
/
wikidata_client.rb
80 lines (62 loc) · 2.82 KB
/
wikidata_client.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# Author:: Tobias Gritschacher (tobias.gritschacher@wikimedia.de)
# License:: GNU GPL v2+
require "mediawiki_api/wikidata/version"
require "mediawiki_api/wikidata/exceptions"
module MediawikiApi
module Wikidata
class WikidataClient < Client
def create_entity(entity_data, type)
action(:wbeditentity, token_type: "csrf", new: type, data: entity_data)
end
def create_item(item_data)
create_entity(item_data, "item")
end
def create_property(property_data)
create_entity(property_data, "property")
end
def set_sitelink(entity_identifier, sitelink_site_id, sitelink_title = nil, badges = nil)
params = { token_type: "csrf", linksite: sitelink_site_id, linktitle: sitelink_title, badges: badges}
action(:wbsetsitelink, params.merge(parse_entity_identifier(entity_identifier)))
end
def add_sitelink(entity_identifier, sitelink_site_id, sitelink_title, badges = nil)
set_sitelink(entity_identifier, sitelink_site_id, sitelink_title, badges)
end
def remove_sitelink(entity_identifier, sitelink_site_id)
set_sitelink(entity_identifier, sitelink_site_id)
end
def sitelink_exists?(site_id, title)
resp = action(:wbgetentities, token_type: false, sites: [site_id], titles: [title] )
!resp.data["entities"]["-1"]
end
def search_entities(search, language, entity_type, limit = 10, continue = nil)
action(:wbsearchentities, token_type: false, search: search, language: language, type: entity_type, limit: limit,
continue: continue)
end
def create_claim(entity_id, snaktype = "value", property_id, value_data)
action(:wbcreateclaim, token_type: "csrf", entity: entity_id, snaktype: snaktype, property: property_id, value: value_data)
end
def get_entities(ids)
action(:wbgetentities, token_type: false, ids: ids)
end
def get_entities_by_titles(titles, sites)
action(:wbgetentities, token_type: false, titles: titles, sites: sites)
end
def set_qualifier(claim_id, snaktype = "value", property_id, value_data)
action(:wbsetqualifier, token_type: "csrf", claim: claim_id, snaktype: snaktype, property: property_id, value: value_data)
end
def set_reference(statement_id, snaks_data)
action(:wbsetreference, token_type: "csrf", statement: statement_id, snaks: snaks_data)
end
private
def parse_entity_identifier(identifier)
if identifier.is_a?(::Hash)
{ site: identifier[:site_id], title: identifier[:title] }
elsif identifier.is_a?(String)
{ id: identifier }
else
raise EntityIdentifierMismatchError, "Either entity id or site id and page title need to be set to identify the entity."
end
end
end
end
end