class Lyracyst::Wordsmith

Wordsmith.org provides anagrams.

Public Instance Methods

scrape(search, params, result) click to toggle source

The scraper method.

@param search [String] The string of letters to rearrange. @param params [Hash] The search parameters to use. @param result [Hash] The search results.

# File lib/lyracyst/wordsmith.rb, line 12
def scrape(search, params, result)
  prefix = 'http://wordsmith.org/anagram/anagram.cgi?anagram='
  word, pcont = "#{prefix}#{search}", []
  params.map { |k, v|
    if k == :lang then pcont.push "&language=#{v}"; end # string
    if k == :limit then pcont.push "&t=#{v}"; end # integer
    if k == :maxwords then pcont.push "&d=#{v}"; end # integer
    if k == :include then pcont.push "&include=#{v}"; end # string
    if k == :exclude then pcont.push "&exclude=#{v}"; end # string
    if k == :minletters then pcont.push "&n=#{v}"; end # integer
    if k == :maxletters then pcont.push "&m=#{v}"; end # integer
    if k == :repeat then pcont.push "&a=#{v}"; end # y/n
    if k == :list then pcont.push "&l=#{v}"; end # y/n
    if k == :linenum then pcont.push "&q=#{v}"; end # y/n
    if k == :case then pcont.push "&k=#{v}"; end # 0 - lower, 1 - first, 2 - upper
  }
  pcont.push "&src=adv"
  url = "#{word}#{pcont.join}"
  result = MetaInspector.new(url)
  pdoc = result.parsed
  text = pdoc.at_css('p:nth-child(7)').text
  s = text.scan(/^\s(\d*) found. Displaying ([a-z0-9 ]*):([a-z\s]*)What's/i)
  s = s[0]
  found = s[0]
  display = s[1]
  astring = s[2]
  search = { 'search' => search }
  anagrams = { 'anagrams' => astring }
  Lyracyst.tofile(search)
  Lyracyst.tofile(anagrams)
  Lyracyst.label('Anagrams')
  puts "Found #{found}. Displaying #{display}:\n#{astring.strip}"
end