Sha256: 33dd620f9218086c886b2f95eaab070fabe6e24e5b0d1441e579f1cba3fcad65

Contents?: true

Size: 1.69 KB

Versions: 13

Compression:

Stored size: 1.69 KB

Contents

# frozen_string_literal: true

require "net/http"
module Boxcars
  # A Boxcar that uses the Wikipedia search API to get answers to questions.
  class WikipediaSearch < Boxcar
    # the description of this boxcar
    WDESC = "useful for when you need to answer questions about topics from Wikipedia." \
            "You should ask targeted questions"

    # implements a boxcar that uses the Wikipedia Search to get answers to questions.
    # @param name [String] The name of the boxcar. Defaults to classname.
    # @param description [String] A description of the boxcar. Defaults to SERPDESC.
    # @param serpapi_api_key [String] The API key to use for the SerpAPI. Defaults to Boxcars.configuration.serpapi_api_key.
    def initialize(name: "Wikipedia", description: WDESC)
      super
    end

    # Get an answer from Google using the SerpAPI.
    # @param question [String] The question to ask Google.
    # @return [String] The answer to the question.
    def run(question)
      Boxcars.debug "Question: #{question}", :yellow
      uri = URI("https://en.wikipedia.org/w/api.php")
      params = { action: "query", list: "search", srsearch: question, format: "json" }
      uri.query = URI.encode_www_form(params)

      res = Net::HTTP.get_response(uri)
      raise "Error getting response from Wikipedia: #{res.body}" unless res.is_a?(Net::HTTPSuccess)

      response = JSON.parse res.body
      answer = response.dig("query", "search", 0, "snippet").to_s.gsub(/<[^>]*>/, "")
      pageid = response.dig("query", "search", 0, "pageid")
      answer = "#{answer}\nurl: https://en.wikipedia.org/?curid=#{pageid}" if pageid
      Boxcars.debug "Answer: #{answer}", :yellow, style: :bold
      answer
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
boxcars-0.7.3 lib/boxcars/boxcar/wikipedia_search.rb
boxcars-0.7.2 lib/boxcars/boxcar/wikipedia_search.rb
boxcars-0.7.1 lib/boxcars/boxcar/wikipedia_search.rb
boxcars-0.6.9 lib/boxcars/boxcar/wikipedia_search.rb
boxcars-0.6.8 lib/boxcars/boxcar/wikipedia_search.rb
boxcars-0.6.7 lib/boxcars/boxcar/wikipedia_search.rb
boxcars-0.6.6 lib/boxcars/boxcar/wikipedia_search.rb
boxcars-0.6.5 lib/boxcars/boxcar/wikipedia_search.rb
boxcars-0.6.4 lib/boxcars/boxcar/wikipedia_search.rb
boxcars-0.6.3 lib/boxcars/boxcar/wikipedia_search.rb
boxcars-0.6.2 lib/boxcars/boxcar/wikipedia_search.rb
boxcars-0.6.1 lib/boxcars/boxcar/wikipedia_search.rb
boxcars-0.5.1 lib/boxcars/boxcar/wikipedia_search.rb