mediawiki_api-wikidata 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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