class WikiData::Category

Public Class Methods

new(page, lang = 'en') click to toggle source
# File lib/wikidata/category.rb, line 5
def initialize(page, lang = 'en')
  @_page = page
  @_lang = lang
end

Public Instance Methods

client() click to toggle source
# File lib/wikidata/category.rb, line 10
def client
  @_client ||= MediawikiApi::Client.new "https://#{@_lang}.wikipedia.org/w/api.php"
end
member_ids() click to toggle source
# File lib/wikidata/category.rb, line 40
def member_ids
  members.map { |m| m['pageid'] }.sort
end
member_titles() click to toggle source
# File lib/wikidata/category.rb, line 44
def member_titles
  members.map { |m| m['title'] }.sort
end
members() click to toggle source
# 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() click to toggle source
# 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() click to toggle source
# 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