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