mediawiki_api-wikidata 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -1,63 +1,67 @@
1
- # Wikidata API Gem
2
-
3
- [![Build Status](https://api.travis-ci.org/wmde/WikidataApiGem.png?branch=master)](http://travis-ci.org/wmde/WikidataApiGem)
4
-
5
- A library for interacting with the Wikidata API from Ruby.
6
- Extends the [MediaWiki API Gem](https://github.com/wikimedia/mediawiki-ruby-api).
7
-
8
- ## Installation
9
-
10
- Add this line to your application's Gemfile:
11
-
12
- gem 'mediawiki_api-wikidata'
13
-
14
- And then execute:
15
-
16
- $ bundle
17
-
18
- Or install it yourself as:
19
-
20
- $ gem install mediawiki_api-wikidata
21
-
22
- ## Usage
23
-
24
- ```ruby
25
- require "mediawiki_api/wikidata"
26
-
27
- wikidata_client = MediawikiApi::Wikidata::WikidataClient.new "http://127.0.0.1/w/api.php" #instantiate new client
28
- wikidata_client.log_in "username", "password" #log in via the API
29
- wikidata_client.create_item "data" #create a new item specified by "data"
30
- wikidata_client.create_property "data" #create a new property specified by "data"
31
- wikidata_client.add_sitelink "Q1234", "enwiki", "Berlin" #add a new sitelink enwiki/Berlin to item Q1234
32
- wikidata_client.remove_sitelink "Q1234", "enwiki" #remove enwiki sitelink from item Q1234
33
- wikidata_client.sitelink_exists? "enwiki", "Berlin" #returns true if enwiki/Berlin sitelink exists, false otherwise
34
- wikidata_client.create_claim "Q1234", "value", "P1234", '"test"' #adds claim with property P1234 and value "test" to item Q1234
35
- wikidata_client.search_entities "test", "en", "item" #searches for items containing the string "test" in their english labels, descriptions and aliases
36
- ```
37
-
38
- ## Release notes
39
-
40
- ### 0.2.1 (2016-05-26)
41
- - Compatible with [mediawiki_api 6.0](https://rubygems.org/gems/mediawiki_api/versions/0.6.0)
42
-
43
- ### 0.2.0 (2015-10-09)
44
- - Compatible with [mediawiki_api 5.0](https://rubygems.org/gems/mediawiki_api/versions/0.5.0)
45
-
46
- ### 0.1.0 (2014-10-09)
47
- - Feature complete for [Wikidata BrowserTests](https://github.com/wmde/WikidataBrowserTests)
48
- - Support creating claims
49
- - Support searching entities
50
-
51
- ### 0.0.2 (2014-10-09)
52
-
53
- - Support adding sitelinks
54
- - Support changing sitelinks
55
- - Support removing sitelinks
56
- - Support checking for existing sitelinks
57
- - Provide separate methods for creating items and properties
58
- - Removed custom edit summaries
59
-
60
- ### 0.0.1 (2014-09-29)
61
-
62
- - Initial version
63
- - Supports creation of entities via wbeditentity
1
+ # Wikidata API Gem
2
+
3
+ [![Build Status](https://api.travis-ci.org/wmde/WikidataApiGem.png?branch=master)](http://travis-ci.org/wmde/WikidataApiGem)
4
+
5
+ A library for interacting with the Wikidata API from Ruby.
6
+ Extends the [MediaWiki API Gem](https://github.com/wikimedia/mediawiki-ruby-api).
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ gem 'mediawiki_api-wikidata'
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ Or install it yourself as:
19
+
20
+ $ gem install mediawiki_api-wikidata
21
+
22
+ ## Usage
23
+
24
+ ```ruby
25
+ require "mediawiki_api/wikidata"
26
+
27
+ wikidata_client = MediawikiApi::Wikidata::WikidataClient.new "http://127.0.0.1/w/api.php" #instantiate new client
28
+ wikidata_client.log_in "username", "password" #log in via the API
29
+ wikidata_client.create_item "data" #create a new item specified by "data"
30
+ wikidata_client.create_property "data" #create a new property specified by "data"
31
+ wikidata_client.add_sitelink "Q1234", "enwiki", "Berlin" #add a new sitelink enwiki/Berlin to item Q1234
32
+ wikidata_client.remove_sitelink "Q1234", "enwiki" #remove enwiki sitelink from item Q1234
33
+ wikidata_client.sitelink_exists? "enwiki", "Berlin" #returns true if enwiki/Berlin sitelink exists, false otherwise
34
+ wikidata_client.create_claim "Q1234", "value", "P1234", '"test"' #adds claim with property P1234 and value "test" to item Q1234
35
+ wikidata_client.search_entities "test", "en", "item" #searches for items containing the string "test" in their english labels, descriptions and aliases
36
+ ```
37
+
38
+ ## Release notes
39
+ ### 0.3.0 (2021-06-08)
40
+ - Compatible with [mediawiki_api 7.0](https://rubygems.org/gems/mediawiki_api/versions/0.7.1)
41
+ - Compatible with Ruby 2.5
42
+ - Support for several API actions.
43
+
44
+ ### 0.2.1 (2016-05-26)
45
+ - Compatible with [mediawiki_api 6.0](https://rubygems.org/gems/mediawiki_api/versions/0.6.0)
46
+
47
+ ### 0.2.0 (2015-10-09)
48
+ - Compatible with [mediawiki_api 5.0](https://rubygems.org/gems/mediawiki_api/versions/0.5.0)
49
+
50
+ ### 0.1.0 (2014-10-09)
51
+ - Feature complete for [Wikidata BrowserTests](https://github.com/wmde/WikidataBrowserTests)
52
+ - Support creating claims
53
+ - Support searching entities
54
+
55
+ ### 0.0.2 (2014-10-09)
56
+
57
+ - Support adding sitelinks
58
+ - Support changing sitelinks
59
+ - Support removing sitelinks
60
+ - Support checking for existing sitelinks
61
+ - Provide separate methods for creating items and properties
62
+ - Removed custom edit summaries
63
+
64
+ ### 0.0.1 (2014-09-29)
65
+
66
+ - Initial version
67
+ - Supports creation of entities via wbeditentity
@@ -1 +1 @@
1
- require "mediawiki_api/wikidata/wikidata_client"
1
+ require "mediawiki_api/wikidata/wikidata_client"
@@ -1,10 +1,10 @@
1
- module MediawikiApi
2
- module Wikidata
3
- class WikidataApiError < ApiError
4
-
5
- end
6
-
7
- class EntityIdentifierMismatchError < StandardError
8
- end
9
- end
10
- end
1
+ module MediawikiApi
2
+ module Wikidata
3
+ class WikidataApiError < ApiError
4
+
5
+ end
6
+
7
+ class EntityIdentifierMismatchError < StandardError
8
+ end
9
+ end
10
+ end
@@ -1,5 +1,5 @@
1
- module MediawikiApi
2
- module Wikidata
3
- VERSION = "0.2.1"
4
- end
5
- end
1
+ module MediawikiApi
2
+ module Wikidata
3
+ VERSION = "0.3.0"
4
+ end
5
+ end
@@ -1,64 +1,80 @@
1
- # Author:: Tobias Gritschacher (tobias.gritschacher@wikimedia.de)
2
- # License:: GNU GPL v2+
3
-
4
- require "mediawiki_api/wikidata/version"
5
- require "mediawiki_api/wikidata/exceptions"
6
-
7
- module MediawikiApi
8
- module Wikidata
9
- class WikidataClient < Client
10
-
11
- def create_entity(entity_data, type)
12
- action(:wbeditentity, token_type: "csrf", new: type, data: entity_data)
13
- end
14
-
15
- def create_item(item_data)
16
- create_entity(item_data, "item")
17
- end
18
-
19
- def create_property(property_data)
20
- create_entity(property_data, "property")
21
- end
22
-
23
- def set_sitelink(entity_identifier, sitelink_site_id, sitelink_title = nil, badges = nil)
24
- params = { token_type: "csrf", linksite: sitelink_site_id, linktitle: sitelink_title, badges: badges}
25
- action(:wbsetsitelink, params.merge(parse_entity_identifier(entity_identifier)))
26
- end
27
-
28
- def add_sitelink(entity_identifier, sitelink_site_id, sitelink_title, badges = nil)
29
- set_sitelink(entity_identifier, sitelink_site_id, sitelink_title, badges)
30
- end
31
-
32
- def remove_sitelink(entity_identifier, sitelink_site_id)
33
- set_sitelink(entity_identifier, sitelink_site_id)
34
- end
35
-
36
- def sitelink_exists?(site_id, title)
37
- resp = action(:wbgetentities, token_type: false, sites: [site_id], titles: [title] )
38
- !resp.data["entities"]["-1"]
39
- end
40
-
41
- def search_entities(search, language, entity_type, limit = 10, continue = nil)
42
- action(:wbsearchentities, token_type: false, search: search, language: language, type: entity_type, limit: limit,
43
- continue: continue)
44
- end
45
-
46
- def create_claim(entity_id, snaktype = "value", property_id, value_data)
47
- action(:wbcreateclaim, token_type: "csrf", entity: entity_id, snaktype: snaktype, property: property_id, value: value_data)
48
- end
49
-
50
- private
51
-
52
- def parse_entity_identifier(identifier)
53
- if identifier.is_a?(::Hash)
54
- { site: identifier[:site_id], title: identifier[:title] }
55
- elsif identifier.is_a?(String)
56
- { id: identifier }
57
- else
58
- raise EntityIdentifierMismatchError, "Either entity id or site id and page title need to be set to identify the entity."
59
- end
60
- end
61
-
62
- end
63
- end
64
- end
1
+ # Author:: Tobias Gritschacher (tobias.gritschacher@wikimedia.de)
2
+ # License:: GNU GPL v2+
3
+
4
+ require "mediawiki_api/wikidata/version"
5
+ require "mediawiki_api/wikidata/exceptions"
6
+
7
+ module MediawikiApi
8
+ module Wikidata
9
+ class WikidataClient < Client
10
+
11
+ def create_entity(entity_data, type)
12
+ action(:wbeditentity, token_type: "csrf", new: type, data: entity_data)
13
+ end
14
+
15
+ def create_item(item_data)
16
+ create_entity(item_data, "item")
17
+ end
18
+
19
+ def create_property(property_data)
20
+ create_entity(property_data, "property")
21
+ end
22
+
23
+ def set_sitelink(entity_identifier, sitelink_site_id, sitelink_title = nil, badges = nil)
24
+ params = { token_type: "csrf", linksite: sitelink_site_id, linktitle: sitelink_title, badges: badges}
25
+ action(:wbsetsitelink, params.merge(parse_entity_identifier(entity_identifier)))
26
+ end
27
+
28
+ def add_sitelink(entity_identifier, sitelink_site_id, sitelink_title, badges = nil)
29
+ set_sitelink(entity_identifier, sitelink_site_id, sitelink_title, badges)
30
+ end
31
+
32
+ def remove_sitelink(entity_identifier, sitelink_site_id)
33
+ set_sitelink(entity_identifier, sitelink_site_id)
34
+ end
35
+
36
+ def sitelink_exists?(site_id, title)
37
+ resp = action(:wbgetentities, token_type: false, sites: [site_id], titles: [title] )
38
+ !resp.data["entities"]["-1"]
39
+ end
40
+
41
+ def search_entities(search, language, entity_type, limit = 10, continue = nil)
42
+ action(:wbsearchentities, token_type: false, search: search, language: language, type: entity_type, limit: limit,
43
+ continue: continue)
44
+ end
45
+
46
+ def create_claim(entity_id, snaktype = "value", property_id, value_data)
47
+ action(:wbcreateclaim, token_type: "csrf", entity: entity_id, snaktype: snaktype, property: property_id, value: value_data)
48
+ end
49
+
50
+ def get_entities(ids)
51
+ action(:wbgetentities, token_type: false, ids: ids)
52
+ end
53
+
54
+ def get_entities_by_titles(titles, sites)
55
+ action(:wbgetentities, token_type: false, titles: titles, sites: sites)
56
+ end
57
+
58
+ def set_qualifier(claim_id, snaktype = "value", property_id, value_data)
59
+ action(:wbsetqualifier, token_type: "csrf", claim: claim_id, snaktype: snaktype, property: property_id, value: value_data)
60
+ end
61
+
62
+ def set_reference(statement_id, snaks_data)
63
+ action(:wbsetreference, token_type: "csrf", statement: statement_id, snaks: snaks_data)
64
+ end
65
+
66
+ private
67
+
68
+ def parse_entity_identifier(identifier)
69
+ if identifier.is_a?(::Hash)
70
+ { site: identifier[:site_id], title: identifier[:title] }
71
+ elsif identifier.is_a?(String)
72
+ { id: identifier }
73
+ else
74
+ raise EntityIdentifierMismatchError, "Either entity id or site id and page title need to be set to identify the entity."
75
+ end
76
+ end
77
+
78
+ end
79
+ end
80
+ end
@@ -1,28 +1,28 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'mediawiki_api/wikidata/version'
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "mediawiki_api-wikidata"
8
- spec.version = MediawikiApi::Wikidata::VERSION
9
- spec.authors = ["Tobias Gritschacher"]
10
- spec.email = ["tobias.gritschacher@wikimedia.de"]
11
- spec.description = %q{A library for interacting with the Wikidata API from Ruby.}
12
- spec.summary = %q{Extends the MediaWiki API Gem.}
13
- spec.homepage = "https://github.com/wmde/WikidataApiGem"
14
- spec.license = "GPL-2"
15
-
16
- spec.files = `git ls-files`.split($/)
17
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
- spec.require_paths = ["lib"]
19
-
20
- spec.add_runtime_dependency "mediawiki_api", "~> 0.6.0"
21
-
22
- spec.add_development_dependency "bundler", "~> 1.3"
23
- spec.add_development_dependency "rake", "~> 0"
24
- spec.add_development_dependency "rspec", "~> 3.0", ">= 3.0.0"
25
- spec.add_development_dependency "webmock", "~> 1.17", ">= 1.17.2"
26
- spec.add_development_dependency "redcarpet"
27
- spec.add_development_dependency "yard"
28
- end
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'mediawiki_api/wikidata/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "mediawiki_api-wikidata"
8
+ spec.version = MediawikiApi::Wikidata::VERSION
9
+ spec.authors = ["Tobias Gritschacher"]
10
+ spec.email = ["tobias.gritschacher@wikimedia.de"]
11
+ spec.description = %q{A library for interacting with the Wikidata API from Ruby.}
12
+ spec.summary = %q{Extends the MediaWiki API Gem.}
13
+ spec.homepage = "https://github.com/wmde/WikidataApiGem"
14
+ spec.license = "GPL-2"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_runtime_dependency "mediawiki_api", "~> 0.7.1"
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.3"
23
+ spec.add_development_dependency "rake", "~> 0"
24
+ spec.add_development_dependency "rspec", "~> 3.0", ">= 3.0.0"
25
+ spec.add_development_dependency "webmock", "~> 1.17", ">= 1.17.2"
26
+ spec.add_development_dependency "redcarpet"
27
+ spec.add_development_dependency "yard"
28
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'webmock/rspec'
2
- require 'json'
3
- require 'mediawiki_api'
4
- require 'mediawiki_api/wikidata'
1
+ require 'webmock/rspec'
2
+ require 'json'
3
+ require 'mediawiki_api'
4
+ require 'mediawiki_api/wikidata'
@@ -1,40 +1,40 @@
1
- module MediawikiApi::Wikidata::RequestHelpers
2
- def api_url
3
- "http://localhost/api.php"
4
- end
5
-
6
- def index_url
7
- "http://localhost/w/index.php"
8
- end
9
-
10
- def mock_token
11
- "token123"
12
- end
13
-
14
- def stub_api_request(method, params)
15
- params = params.each.with_object({}) { |(k, v), p| p[k] = v.to_s }
16
-
17
- stub_request(method, api_url).
18
- with((method == :post ? :body : :query) => params.merge(format: "json"))
19
- end
20
-
21
- def stub_action_request(action, params = {})
22
- method = params.delete(:http_method) || :post
23
-
24
- stub_api_request(method, params.merge(action: action, token: mock_token))
25
- end
26
-
27
- def stub_action_request_without_token(action, params = {})
28
- method = params.delete(:http_method) || :post
29
-
30
- stub_api_request(method, params.merge(action: action))
31
- end
32
-
33
- def stub_token_request(type, warning = nil)
34
- response = { query: { tokens: { "#{type}token" => mock_token } } }
35
- response[:warnings] = { type => { '*' => [warning] } } unless warning.nil?
36
-
37
- stub_api_request(:get, action: 'query', meta: 'tokens', type: type).
38
- to_return(body: response.to_json)
39
- end
40
- end
1
+ module MediawikiApi::Wikidata::RequestHelpers
2
+ def api_url
3
+ "http://localhost/api.php"
4
+ end
5
+
6
+ def index_url
7
+ "http://localhost/w/index.php"
8
+ end
9
+
10
+ def mock_token
11
+ "token123"
12
+ end
13
+
14
+ def stub_api_request(method, params)
15
+ params = params.each.with_object({}) { |(k, v), p| p[k] = v.to_s }
16
+
17
+ stub_request(method, api_url).
18
+ with((method == :post ? :body : :query) => params.merge(format: "json"))
19
+ end
20
+
21
+ def stub_action_request(action, params = {})
22
+ method = params.delete(:http_method) || :post
23
+
24
+ stub_api_request(method, params.merge(action: action, token: mock_token))
25
+ end
26
+
27
+ def stub_action_request_without_token(action, params = {})
28
+ method = params.delete(:http_method) || :post
29
+
30
+ stub_api_request(method, params.merge(action: action))
31
+ end
32
+
33
+ def stub_token_request(type, warning = nil)
34
+ response = { query: { tokens: { "#{type}token" => mock_token } } }
35
+ response[:warnings] = { type => { '*' => [warning] } } unless warning.nil?
36
+
37
+ stub_api_request(:get, action: 'query', meta: 'tokens', type: type).
38
+ to_return(body: response.to_json)
39
+ end
40
+ end