class Wiki

This class is for getting data directly from the Wikipedia API.

Public Class Methods

get_page_content(page_title, opts = {}) click to toggle source
# File lib/wikipedia_twitterbot/wiki.rb, line 15
def self.get_page_content(page_title, opts = {})
  response = wikipedia('get_wikitext', page_title, opts)
  response.status == 200 ? response.body : nil
end
query(query_parameters, opts = {}) click to toggle source

General entry point for making arbitrary queries of the Wikipedia API

# File lib/wikipedia_twitterbot/wiki.rb, line 11
def self.query(query_parameters, opts = {})
  wikipedia('query', query_parameters, opts)
end
save_commons_image(filename) click to toggle source
# File lib/wikipedia_twitterbot/wiki.rb, line 20
def self.save_commons_image(filename)
  opts = { site: 'commons.wikimedia.org' }
  query = { prop: 'imageinfo',
            iiprop: 'url',
            iiurlheight: 1000,
            titles: filename }
  response = query(query, opts)
  url = response.data['pages'].values.first['imageinfo'].first['thumburl']

  File.write filename, open(url).read
end

Private Class Methods

api_client(opts) click to toggle source
# File lib/wikipedia_twitterbot/wiki.rb, line 54
def api_client(opts)
  site = opts[:site]
  language = opts[:language] || 'en'

  url = if site
          "https://#{site}/w/api.php"
        else
          "https://#{language}.wikipedia.org/w/api.php"
        end
  MediawikiApi::Client.new url
end
wikipedia(action, query, opts = {}) click to toggle source
# File lib/wikipedia_twitterbot/wiki.rb, line 38
def wikipedia(action, query, opts = {})
  tries ||= 3
  @mediawiki = api_client(opts)
  @mediawiki.send(action, query)
rescue StandardError => e
  tries -= 1
  typical_errors = [Faraday::TimeoutError,
                    Faraday::ConnectionFailed,
                    MediawikiApi::HttpError]
  if typical_errors.include?(e.class)
    retry if tries >= 0
  else
    raise e
  end
end