Class: WikiData::Category
Instance Method Summary collapse
- #_categorymembers_search(args = {}) ⇒ Object
- #client ⇒ Object
-
#initialize(page, lang = 'en') ⇒ Category
constructor
A new instance of Category.
- #member_ids ⇒ Object
- #member_titles ⇒ Object
- #members ⇒ Object
- #subcategories ⇒ Object
- #wikidata_ids ⇒ Object
Methods inherited from WikiData
Constructor Details
#initialize(page, lang = 'en') ⇒ Category
Returns a new instance of Category.
5 6 7 8 |
# File 'lib/wikidata/category.rb', line 5 def initialize(page, lang = 'en') @_page = page @_lang = lang end |
Instance Method Details
#_categorymembers_search(args = {}) ⇒ Object
14 15 16 17 18 19 20 21 22 |
# File 'lib/wikidata/category.rb', line 14 def _categorymembers_search(args = {}) cat_args = { cmtitle: @_page, token_type: false, list: 'categorymembers', cmlimit: '500', }.merge(args) client.action :query, cat_args end |
#client ⇒ Object
10 11 12 |
# File 'lib/wikidata/category.rb', line 10 def client @_client ||= MediawikiApi::Client.new "https://#{@_lang}.wikipedia.org/w/api.php" end |
#member_ids ⇒ Object
40 41 42 |
# File 'lib/wikidata/category.rb', line 40 def member_ids members.map { |m| m['pageid'] }.sort end |
#member_titles ⇒ Object
44 45 46 |
# File 'lib/wikidata/category.rb', line 44 def member_titles members.map { |m| m['title'] }.sort end |
#members ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'lib/wikidata/category.rb', line 24 def members search = _categorymembers_search all = search.data['categorymembers'] while search['continue'] search = _categorymembers_search(cmcontinue: search['continue']['cmcontinue']) all << search.data['categorymembers'] end all.flatten.select { |m| (m['ns']).zero? } end |
#subcategories ⇒ Object
34 35 36 37 38 |
# File 'lib/wikidata/category.rb', line 34 def subcategories search = _categorymembers_search all = search.data['categorymembers'] all.flatten.select { |m| m['ns'] == 14 }.map { |m| m['title'] } end |
#wikidata_ids ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/wikidata/category.rb', line 48 def wikidata_ids member_ids.compact.each_slice(50).map do |ids| page_args = { prop: 'pageprops', ppprop: 'wikibase_item', redirects: 1, pageids: ids.join('|'), token_type: false, } response = client.action :query, page_args response.data['pages'].find_all { |p| p.last.key? 'pageprops' }.map { |p| p.last['pageprops']['wikibase_item'] } end.flatten end |